Currently, I am working on creating a battle ship game in VBA using excel. I have made a 10 X 10 sheet of command buttons and have the following codes working (as far as the 10X 10 sheet goes):
reset of playing field
Ship Placement
The problems I am running into are:
* resetting only ONE ship. So, if a user places 4 ships, if they are out of range on the 5th one, the whole board resets. I'm using various loops because my code is set up alphanumerically.
* Checking if a ship is already placed. Once a ship is placed, the command buttons turn color based on the ship placed.
Here's a part of my code, checking for the left direction.
I am trying to figure out a way to check the color of a command button, so if it is a certain color, a ship will NOT be placed there.
y = Mid(StartingPoint, 1, 1) 'alphabet letter
z = Mid(StartingPoint, 2, Len(StartingPoint) - 1) 'number
If direction = "left" Then
For i = 0 To 4 Step 1
For j = 9 To 18 Step 1
If Sheet3.Cells(j, 1).Value = y Then
y = Sheet3.Cells(j, 2).Value
End If
If Sheet3.Cells(j, 1).Value = 0 Then
MsgBox ("Out of Range")
Battle.AirCraftCarrier.Locked = False
Call Reset
i = 5
End If
Next j
If Sheet3.Cells(y + 1, 2).Value > 0 Then
If i = 0 Then
y = Sheet3.Cells(y - 1, 1).Value
If Battle.Controls(y & z).BackColor = vbBlue Or Battle.Controls(y & z).BackColor = vbMagenta Or _
Battle.Controls(y & z).BackColor = vbYellow Or Battle.Controls(y & z).BackColor = vbCyan Then
MsgBox ("There is already a ship here!")
Battle.Controls(y & z).BackColor = vbBlack
End If
'y = Sheet3.Cells(y - 1, 1).Value
Battle.Controls(y & z).BackColor = vbMagenta
Else
y = Sheet3.Cells(y - 1, 1).Value
If Battle.Controls(y & z).BackColor = vbBlue Or Battle.Controls(y & z).BackColor = vbMagenta Or _
Battle.Controls(y & z).BackColor = vbYellow Or Battle.Controls(y & z).BackColor = vbCyan Then
MsgBox ("There is already a ship here!")
'y = Sheet3.Cells(y - 1, 1).Value
Battle.Controls(y & z).BackColor = vbBlack
End If
'y = Sheet3.Cells(y - 1, 1).Value
Battle.Controls(y & z).BackColor = vbMagenta
End If
Else
MsgBox ("Out of Range")
Battle.AirCraftCarrier.Locked = False
Battle.Controls(y & z).BackColor = vbBlack
'Call Reset
i = 5
End If
For j = 9 To 18
If Sheet3.Cells(j, 1).Value = y Then
y = Sheet3.Cells(j, 2).Value - 1
End If
Next j
If Sheet3.Cells(y + 1, 2).Value > 0 Then
y = Sheet3.Cells(y - 1, 1).Value
End If
If i = 4 Then
Battle.AirCraftCarrier.Locked = True
End If
Next i
End If
Because I am a student, it doesn't have to be super intricate. I can simply give a warning of not placing ships on top of another, but I need to be able to tell the user there is an error if they do attempt to do so.
Any help is greatly appreciated.
Bookmarks