Private Sub Setup_Ships()
Dim I As Long, J As Long 'For loop variables
Randomize
For I = 0 To 7
With P1_Ship(I)
If I >= 4 Then .Number_Of_Targets = 4 Else .Number_Of_Targets = 3
.Direction = Rnd * 1 'Horizontal or Vertical
.Position.X = Rnd * 81
.Position.Y = Rnd * 81
P1_Reposition:
If .Direction = 0 Then 'Horizontal
If .Number_Of_Targets = 4 Then
.Section(0).X = .Position.X: .Section(0).Y = .Position.Y
.Section(1).X = .Position.X + 1: .Section(1).Y = .Position.Y
.Section(2).X = .Position.X + 2: .Section(2).Y = .Position.Y
.Section(3).X = .Position.X + 3: .Section(3).Y = .Position.Y
.
Else
.Section(0).X = .Position.X: .Section(0).Y = .Position.Y
.Section(1).X = .Position.X + 1: .Section(1).Y = .Position.Y
.Section(2).X = .Position.X + 2: .Section(2).Y = .Position.Y
End If
Else 'Vertical
If .Number_Of_Targets = 4 Then
.Section(0).X = .Position.X: .Section(0).Y = .Position.Y
.Section(1).X = .Position.X: .Section(1).Y = .Position.Y + 1
.Section(2).X = .Position.X: .Section(2).Y = .Position.Y + 2
.Section(3).X = .Position.X: .Section(3).Y = .Position.Y + 3
Else
.Section(0).X = .Position.X: .Section(0).Y = .Position.Y
.Section(1).X = .Position.X: .Section(1).Y = .Position.Y + 1
.Section(2).X = .Position.X: .Section(2).Y = .Position.Y + 2
End If
End If
For J = 0 To 3
If .Section(J) > 81 Then GoTo P1_Reposition
Next J
'If it all passed
If .Direction = 0 Then 'Horizontal
If .Number_Of_Targets = 4 Then
If Grid_Mark(.Position.X, Position.Y) = False Then Grid_Mark(.Position.X, Position.Y) = True Else GoTo P1_Reposition
If Grid_Mark(.Position.X + 1, Position.Y) = False Then Grid_Mark(.Position.X + 1, Position.Y) = True Else GoTo P1_Reposition
If Grid_Mark(.Position.X + 2, Position.Y) = False Then Grid_Mark(.Position.X + 2, Position.Y) = True Else GoTo P1_Reposition
If Grid_Mark(.Position.X + 3, Position.Y) = False Then Grid_Mark(.Position.X + 3, Position.Y) = True Else GoTo P1_Reposition
Else
If Grid_Mark(.Position.X, Position.Y) = False Then Grid_Mark(.Position.X, Position.Y) = True Else GoTo P1_Reposition
If Grid_Mark(.Position.X + 1, Position.Y) = False Then Grid_Mark(.Position.X + 1, Position.Y) = True Else GoTo P1_Reposition
If Grid_Mark(.Position.X + 2, Position.Y) = False Then Grid_Mark(.Position.X + 2, Position.Y) = True Else GoTo P1_Reposition
End If
Else 'Vertical
If .Number_Of_Targets = 4 Then
If Grid_Mark(.Position.X, Position.Y) = False Then Grid_Mark(.Position.X, Position.Y) = True Else GoTo P1_Reposition
If Grid_Mark(.Position.X, Position.Y + 1) = False Then Grid_Mark(.Position.X, Position.Y + 1) = True Else GoTo P1_Reposition
If Grid_Mark(.Position.X, Position.Y + 2) = False Then Grid_Mark(.Position.X, Position.Y + 2) = True Else GoTo P1_Reposition
If Grid_Mark(.Position.X, Position.Y + 3) = False Then Grid_Mark(.Position.X, Position.Y + 3) = True Else GoTo P1_Reposition
Else
If Grid_Mark(.Position.X, Position.Y) = False Then Grid_Mark(.Position.X, Position.Y) = True Else GoTo P1_Reposition
If Grid_Mark(.Position.X, Position.Y + 1) = False Then Grid_Mark(.Position.X, Position.Y + 1) = True Else GoTo P1_Reposition
If Grid_Mark(.Position.X, Position.Y + 2) = False Then Grid_Mark(.Position.X, Position.Y + 2) = True Else GoTo P1_Reposition
End If
End If
End With
With P1_Ship(I)
If I >= 4 Then .Number_Of_Targets = 4 Else .Number_Of_Targets = 3
.Direction = Rnd * 1 'Horizontal or Vertical
.Position.X = Rnd * 81
.Position.Y = Rnd * 81
P2_Reposition:
If .Direction = 0 Then 'Horizontal
If .Number_Of_Targets = 4 Then
.Section(0).X = .Position.X: .Section(0).Y = .Position.Y
.Section(1).X = .Position.X + 1: .Section(1).Y = .Position.Y
.Section(2).X = .Position.X + 2: .Section(2).Y = .Position.Y
.Section(3).X = .Position.X + 3: .Section(3).Y = .Position.Y
.
Else
.Section(0).X = .Position.X: .Section(0).Y = .Position.Y
.Section(1).X = .Position.X + 1: .Section(1).Y = .Position.Y
.Section(2).X = .Position.X + 2: .Section(2).Y = .Position.Y
End If
Else 'Vertical
If .Number_Of_Targets = 4 Then
.Section(0).X = .Position.X: .Section(0).Y = .Position.Y
.Section(1).X = .Position.X: .Section(1).Y = .Position.Y + 1
.Section(2).X = .Position.X: .Section(2).Y = .Position.Y + 2
.Section(3).X = .Position.X: .Section(3).Y = .Position.Y + 3
Else
.Section(0).X = .Position.X: .Section(0).Y = .Position.Y
.Section(1).X = .Position.X: .Section(1).Y = .Position.Y + 1
.Section(2).X = .Position.X: .Section(2).Y = .Position.Y + 2
End If
End If
For J = 0 To 3
If .Section(J) > 81 Then GoTo P2_Reposition
Next J
'If it all passed
If .Direction = 0 Then 'Horizontal
If .Number_Of_Targets = 4 Then
If Grid_Mark(.Position.X, Position.Y) = False Then Grid_Mark(.Position.X, Position.Y) = True Else GoTo P2_Reposition
If Grid_Mark(.Position.X + 1, Position.Y) = False Then Grid_Mark(.Position.X + 1, Position.Y) = True Else GoTo P2_Reposition
If Grid_Mark(.Position.X + 2, Position.Y) = False Then Grid_Mark(.Position.X + 2, Position.Y) = True Else GoTo P2_Reposition
If Grid_Mark(.Position.X + 3, Position.Y) = False Then Grid_Mark(.Position.X + 3, Position.Y) = True Else GoTo P2_Reposition
Else
If Grid_Mark(.Position.X, Position.Y) = False Then Grid_Mark(.Position.X, Position.Y) = True Else GoTo P2_Reposition
If Grid_Mark(.Position.X + 1, Position.Y) = False Then Grid_Mark(.Position.X + 1, Position.Y) = True Else GoTo P2_Reposition
If Grid_Mark(.Position.X + 2, Position.Y) = False Then Grid_Mark(.Position.X + 2, Position.Y) = True Else GoTo P2_Reposition
End If
Else 'Vertical
If .Number_Of_Targets = 4 Then
If Grid_Mark(.Position.X, Position.Y) = False Then Grid_Mark(.Position.X, Position.Y) = True Else GoTo P2_Reposition
If Grid_Mark(.Position.X, Position.Y + 1) = False Then Grid_Mark(.Position.X, Position.Y + 1) = True Else GoTo P2_Reposition
If Grid_Mark(.Position.X, Position.Y + 2) = False Then Grid_Mark(.Position.X, Position.Y + 2) = True Else GoTo P2_Reposition
If Grid_Mark(.Position.X, Position.Y + 3) = False Then Grid_Mark(.Position.X, Position.Y + 3) = True Else GoTo P2_Reposition
Else
If Grid_Mark(.Position.X, Position.Y) = False Then Grid_Mark(.Position.X, Position.Y) = True Else GoTo P2_Reposition
If Grid_Mark(.Position.X, Position.Y + 1) = False Then Grid_Mark(.Position.X, Position.Y + 1) = True Else GoTo P2_Reposition
If Grid_Mark(.Position.X, Position.Y + 2) = False Then Grid_Mark(.Position.X, Position.Y + 2) = True Else GoTo P2_Reposition
End If
End If
End With
Next I
End Sub