Hi,
This is a little game I have been working on over the past couple of days.
The first version is only single player but I am thinking of making it multi-player maybe through the use of a database.
Nightwalker
This is a little game I have been working on over the past couple of days.
vb Code:
'You need ' 4 CommandButtons "cmdAbout", "cmdHow", "cmdAdd" and "cmd Subtract" ' A listbox called "lstCountries" set to style "Checkbox". 'The form code Option Explicit Dim index As Integer, i As Integer, holder As String, var(20) As Variant, country As String, zero As Boolean Private Sub cmdAbout_Click() MsgBox ("World War 3 Forum Game"& vbCrLf & "Based on the Forum game [url]http://www.gtaforums.com/index.php?[/url] showtopic=566787&st=0" & vbCrLf & Please visit either [url]http://aaronspehr.net/[/url] or [url]http://www.vbforums.com/showthread.php?728099-World-War-3-points-game&p=4465297#post4465297[/url] to download the lastest version. & vbCrLf & "Copyright 2013 by Nightwalker83") End Sub Private Sub cmdAdd_Click() addpoint End Sub Private Sub cmdHow_Click() MsgBox ("How to play " & App.ProductName & vbCrLf & "Select a country then select either add or subtract a vote if a country reaches 0 votes they lose the game.") End Sub Private Sub cmdSubtract_Click() subtractpoint End Sub Private Sub Form_Load() 'Subclass the "Form", to Capture the Listbox Notification Messages ... lPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubClassedList) var(0) = 5 lstCountries.AddItem "Australia - " & var(0), 0 var(1) = 5 lstCountries.AddItem "France - " & var(1), 1 var(2) = 5 lstCountries.AddItem "Germany - " & var(2), 2 i = 0 End Sub Private Sub Form_Unload(Cancel As Integer) 'Release the SubClassing, Very Important to Prevent Crashing! Call SetWindowLong(hwnd, GWL_WNDPROC, lPrevWndProc) End Sub Private Sub lstCountries_Click() holder = lstCountries.Text country = (Replace(holder, Right(holder, 3), "")) End Sub Private Sub varcheck(pos As Integer) If pos = 0 Then lstCountries.RemoveItem (lstCountries.ListIndex) cmdSubtract.Enabled = False zero = True Else zero = False End If End Sub Private Sub addpoint() If holder = "" Then Exit Sub List1.RemoveItem List1.ListIndex Select Case Trim(country) Case "Australia" varcheck (var(0)) var(0) = var(0) + 1 List1.AddItem country & var(0), List1.ListIndex List1.ItemData(List1.NewIndex) = QBColor(10) Case "France" varcheck (var(1)) var(1) = var(1) + 1 List1.AddItem country & var(1), List1.ListIndex List1.ItemData(List1.NewIndex) = QBColor(10) Case "Germany" varcheck (var(2)) var(2) = var(2) + 1 List1.AddItem country & var(2), List1.ListIndex List1.ItemData(List1.NewIndex) = QBColor(10) End Select i = Right(List1.Text, 1) MsgBox (country & " point added") Command2.Enabled = True End Sub Private Sub subtractpoint() If holder = "" Then Exit Sub Select Case Trim(country) Case "Australia" varcheck (var(0)) If zero Then Exit Sub lstCountries.RemoveItem lstCountries.ListIndex var(0) = var(0) - 1 lstCountries.AddItem country & var(0), lstCountries.ListIndex lstCountries.ItemData(lstCountries.NewIndex) = QBColor(12) Case "France" varcheck (var(1)) If zero Then Exit Sub lstCountries.RemoveItem lstCountries.ListIndex var(1) = var(1) - 1 lstCountries.AddItem country & var(1), lstCountries.ListIndex lstCountries.ItemData(lstCountries.NewIndex) = QBColor(12) Case "Germany" varcheck (var(2)) If zero Then Exit Sub lstCountries.RemoveItem lstCountries.ListIndex var(2) = var(2) - 1 lstCountries.AddItem country & var(2), lstCountries.ListIndex lstCountries.ItemData(lstCountries.NewIndex) = QBColor(12) End Select i = Right(lstCountries.Text, 1) MsgBox (country & " point subtracted") End Sub 'The module code ' from thevbprogrammer.com Option Explicit Public Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Public Type DRAWITEMSTRUCT CtlType As Long CtlID As Long itemID As Long itemAction As Long itemState As Long hwndItem As Long hdc As Long rcItem As RECT ItemData As Long End Type Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long Public Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Public Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long Public Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long Public Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long Public Declare Function DrawFocusRect Lib "user32" (ByVal hdc As Long, lpRect As RECT) As Long Public Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long Public Const COLOR_HIGHLIGHT = 13 Public Const COLOR_HIGHLIGHTTEXT = 14 Public Const COLOR_WINDOW = 5 Public Const COLOR_WINDOWTEXT = 8 Public Const LB_GETTEXT = &H189 Public Const WM_DRAWITEM = &H2B Public Const GWL_WNDPROC = (-4) Public Const ODS_FOCUS = &H10 Public Const ODT_LISTBOX = 2 Public lPrevWndProc As Long Public Function SubClassedList(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim tItem As DRAWITEMSTRUCT Dim sBuff As String * 255 Dim sItem As String Dim lBack As Long If Msg = WM_DRAWITEM Then 'Redraw the listbox 'This function only passes the Address of the DrawItem Structure, so we need to 'use the CopyMemory API to Get a Copy into the Variable we setup: Call CopyMemory(tItem, ByVal lParam, Len(tItem)) 'Make sure we're dealing with a Listbox If tItem.CtlType = ODT_LISTBOX Then 'Get the Item Text Call SendMessage(tItem.hwndItem, LB_GETTEXT, tItem.itemID, ByVal sBuff) sItem = Left(sBuff, InStr(sBuff, Chr(0)) - 1) If (tItem.itemState And ODS_FOCUS) Then 'Item has Focus, Highlight it, I'm using the Default Focus 'Colors for this example. lBack = CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT)) Call FillRect(tItem.hdc, tItem.rcItem, lBack) Call SetBkColor(tItem.hdc, GetSysColor(COLOR_HIGHLIGHT)) Call SetTextColor(tItem.hdc, GetSysColor(COLOR_HIGHLIGHTTEXT)) TextOut tItem.hdc, tItem.rcItem.Left, tItem.rcItem.Top, ByVal sItem, Len(sItem) DrawFocusRect tItem.hdc, tItem.rcItem Else 'Item Doesn't Have Focus, Draw it's Colored Background 'Create a Brush using the Color we stored in ItemData lBack = CreateSolidBrush(tItem.ItemData) 'Paint the Item Area Call FillRect(tItem.hdc, tItem.rcItem, lBack) 'Set the Text Colors Call SetBkColor(tItem.hdc, tItem.ItemData) Call SetTextColor(tItem.hdc, IIf(tItem.ItemData = vbBlack, vbWhite, vbBlack)) 'Display the Item Text TextOut tItem.hdc, tItem.rcItem.Left, tItem.rcItem.Top, ByVal sItem, Len(sItem) End If Call DeleteObject(lBack) 'Don't Need to Pass a Value on as we've just handled the Message ourselves SubClassedList = 0 Exit Function End If End If SubClassedList = CallWindowProc(lPrevWndProc, hwnd, Msg, wParam, lParam) End Function
The first version is only single player but I am thinking of making it multi-player maybe through the use of a database.
Nightwalker