⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmgame.frm

📁 Vsiual Basic编写的人工智能坦克游戏
💻 FRM
📖 第 1 页 / 共 4 页
字号:
 End If
 
 
 ''Move the enemy tanks:
 
 'Up
 If enemytrack(Index).direction = 1 Then
   'block1(Index).Picture = enemyup.Picture
   
   'check borders
   If block1(Index).top - 50 < map.top Then Exit Sub
  
   'check for other conflicting objects (i.e. tanks, walls, or player)
   getgrid block1(Index).left - map.left, block1(Index).top - map.top - 50
   If (mainarr(grx + 1, gry + 1) <> 0) And (mainarr(grx + 1, gry + 1) <> 2) Then Exit Sub
   getgrid block1(Index).Width + block1(Index).left - map.left, block1(Index).top - map.top - 50
   If (mainarr(grx + 1, gry + 1) <> 0) And (mainarr(grx + 1, gry + 1) <> 2) Then Exit Sub
  
   'move the tank
   block1(Index).Picture = enemyup.Picture
   block1(Index).ZOrder (0)
   block1(Index).top = block1(Index).top - (gridheight / 18)
 End If
 
 'Right
 If enemytrack(Index).direction = 2 Then
   'block1(Index).Picture = enemyright.Picture
   
   'check borders
   If block1(Index).left + block1(Index).Width + 50 > map.left + map.Width Then Exit Sub
  
   'check for other conflicting objects (i.e. tanks, walls, or player)
   getgrid block1(Index).left + block1(Index).Width - map.left + 50, block1(Index).top - map.top
   If (mainarr(grx + 1, gry + 1) <> 0) And (mainarr(grx + 1, gry + 1) <> 2) Then Exit Sub
   getgrid block1(Index).Width + block1(Index).left - map.left + 50, block1(Index).top - map.top + block1(Index).Height
   If (mainarr(grx + 1, gry + 1) <> 0) And (mainarr(grx + 1, gry + 1) <> 2) Then Exit Sub
  
   'move the tank
   block1(Index).Picture = enemyright.Picture
   block1(Index).ZOrder (0)
   block1(Index).left = block1(Index).left + (gridwidth / 18)
 End If
 
 'Down
 If enemytrack(Index).direction = 3 Then
   'block1(Index).Picture = enemydown.Picture
   
   'check borders
   If block1(Index).top + block1(Index).Height + 50 > map.top + map.Height Then Exit Sub
  
   'check for other conflicting objects (i.e. tanks, walls, or player)
   getgrid block1(Index).left - map.left, block1(Index).top - map.top + 50 + block1(Index).Height
   If (mainarr(grx + 1, gry + 1) <> 0) And (mainarr(grx + 1, gry + 1) <> 2) Then Exit Sub
   getgrid block1(Index).Width + block1(Index).left - map.left, block1(Index).top - map.top + 50 + block1(Index).Height
   If (mainarr(grx + 1, gry + 1) <> 0) And (mainarr(grx + 1, gry + 1) <> 2) Then Exit Sub
  
   'move the tank
   block1(Index).Picture = enemydown.Picture
   block1(Index).ZOrder (0)
   block1(Index).top = block1(Index).top + (gridheight / 18)
 End If
 
 'Left
 If enemytrack(Index).direction = 4 Then
   'block1(Index).Picture = enemyleft.Picture
   
   'check borders
   If block1(Index).left - 50 < map.left Then Exit Sub
  
   'check for other conflicting objects (i.e. tanks, walls, or player)
   getgrid block1(Index).left - map.left - 50, block1(Index).top - map.top
   If (mainarr(grx + 1, gry + 1) <> 0) And (mainarr(grx + 1, gry + 1) <> 2) Then Exit Sub
   getgrid block1(Index).left - map.left - 50, block1(Index).top - map.top + block1(Index).Height
   If (mainarr(grx + 1, gry + 1) <> 0) And (mainarr(grx + 1, gry + 1) <> 2) Then Exit Sub
  
   'move the tank
   block1(Index).Picture = enemyleft.Picture
   block1(Index).ZOrder (0)
   block1(Index).left = block1(Index).left - (gridwidth / 18)
 End If
 
Errorhandler:
Exit Sub
  
End Sub

Private Sub timmissileenemy_Timer(Index As Integer)
Dim j As Integer
Dim avoidfor As Boolean

On Error GoTo Errorhandler
missileenemy(Index).ZOrder (0)

''Check borders
'Up
If missileenemy(Index).Picture = missup.Picture Then
 If missileenemy(Index).top - 50 < map.top Then
  missileenemy(Index).Visible = False
  timmissileenemy(Index).Enabled = False
  Unload missileenemy(Index)
  Unload timmissileenemy(Index)
  Exit Sub
 End If
End If
'Right
If missileenemy(Index).Picture = missright.Picture Then
 If missileenemy(Index).left + missileenemy(Index).Width + 50 > map.left + map.Width Then
  missileenemy(Index).Visible = False
  timmissileenemy(Index).Enabled = False
  Unload missileenemy(Index)
  Unload timmissileenemy(Index)
  Exit Sub
 End If
End If
'Down
If missileenemy(Index).Picture = missdown.Picture Then
 If missileenemy(Index).top + missileenemy(Index).Height + 50 > map.top + map.Height Then
  missileenemy(Index).Visible = False
  timmissileenemy(Index).Enabled = False
  Unload missileenemy(Index)
  Unload timmissileenemy(Index)
  Exit Sub
 End If
End If
'Left
If missileenemy(Index).Picture = missleft.Picture Then
 If missileenemy(Index).left - 50 < map.left Then
  missileenemy(Index).Visible = False
  timmissileenemy(Index).Enabled = False
  Unload missileenemy(Index)
  Unload timmissileenemy(Index)
  Exit Sub
 End If
End If

'Gets missile's grid block
getgrid missileenemy(Index).left - map.left, missileenemy(Index).top - map.top
If mainarr(grx + 1, gry + 1) = 0 Or mainarr(grx + 1, gry + 1) = 2 Then
 getgrid missileenemy(Index).left + missileenemy(Index).Width - map.left, missileenemy(Index).top + missileenemy(Index).Height - map.top
 If mainarr(grx + 1, gry + 1) = 0 Or mainarr(grx + 1, gry + 1) = 2 Then
  avoidfor = True
 End If
End If

If avoidfor = False Then
For j = 1 To blockcount
 If (block1(j).Picture = wall1.Picture) Then
 
 'top left corner
  If (missileenemy(Index).top > block1(j).top) And (missileenemy(Index).top < block1(j).top + block1(j).Height) And (missileenemy(Index).left > block1(j).left) And (missileenemy(Index).left < block1(j).left + block1(j).Width) Then
    missileenemy(Index).Visible = False
    timmissileenemy(Index).Enabled = False
    PlaySound App.Path + "\sounds\explode.wav", 0, SND_ASYNC
    
    getgrid block1(j).left, block1(j).top
    mainarr(grx + 1, gry + 1) = 0
    
    'display the bomb
    load timBomb(j)
    timBomb(j).Enabled = True
    
    Unload missileenemy(Index)
    Unload timmissileenemy(Index)
    
    'block1(j).Visible = False
    Exit Sub
  End If
 
 'top right corner
  If (missileenemy(Index).top > block1(j).top) And (missileenemy(Index).top < block1(j).top + block1(j).Height) And (missileenemy(Index).left + missileenemy(Index).Width > block1(j).left) And (missileenemy(Index).left + missileenemy(Index).Width < block1(j).left + block1(j).Width) Then
    missileenemy(Index).Visible = False
    timmissileenemy(Index).Enabled = False
    PlaySound App.Path + "\sounds\explode.wav", 0, SND_ASYNC
    
    getgrid block1(j).left, block1(j).top
    mainarr(grx + 1, gry + 1) = 0
    'display bomb
    
    load timBomb(j)
    timBomb(j).Enabled = True
    
    Unload missileenemy(Index)
    Unload timmissileenemy(Index)
    
    'block1(j).Visible = False
    Exit Sub
  End If
 
 'bottom left corner
  If (missileenemy(Index).top + missileenemy(Index).Height > block1(j).top) And (missileenemy(Index).top + missileenemy(Index).Height < block1(j).top + block1(j).Height) And (missileenemy(Index).left > block1(j).left) And (missileenemy(Index).left < block1(j).left + block1(j).Width) Then
    missileenemy(Index).Visible = False
    timmissileenemy(Index).Enabled = False
    PlaySound App.Path + "\sounds\explode.wav", 0, SND_ASYNC
    
    getgrid block1(j).left, block1(j).top
    mainarr(grx + 1, gry + 1) = 0
    'display bomb
    
    load timBomb(j)
    timBomb(j).Enabled = True
    
    Unload missileenemy(Index)
    Unload timmissileenemy(Index)
    
    'block1(j).Visible = False
    Exit Sub
  End If
  
 'bottom right corner
  If (missileenemy(Index).top + missileenemy(Index).Height > block1(j).top) And (missileenemy(Index).top + missileenemy(Index).Height < block1(j).top + block1(j).Height) And (missileenemy(Index).left + missileenemy(Index).Width > block1(j).left) And (missileenemy(Index).left + missileenemy(Index).Width < block1(j).left + block1(j).Width) Then
    missileenemy(Index).Visible = False
    timmissileenemy(Index).Enabled = False
    PlaySound App.Path + "\sounds\explode.wav", 0, SND_ASYNC
    
    getgrid block1(j).left, block1(j).top
    mainarr(grx + 1, gry + 1) = 0
    'display bomb
    
    load timBomb(j)
    timBomb(j).Enabled = True
    
    Unload missileenemy(Index)
    Unload timmissileenemy(Index)

    'block1(j).Visible = False
    Exit Sub
  End If
 End If
Next
End If


 ''Check if the missile hits the player
 If avoidfor = False Then
  numlives = numlives - 1
  piclives(numlives + 1).Visible = False
  missileenemy(Index).Visible = False
  timmissileenemy(Index).Enabled = False
  PlaySound App.Path + "\sounds\explode.wav", 0, SND_ASYNC
  bombcount = 0
  blowupplayer.Enabled = True
  'If no more lives remain, make the tank dissapear
  If numlives = 0 Then
   gameover = True
   getgrid missileenemy(Index).left - map.left, missileenemy(Index).top - map.top
   If mainarr(grx + 1, gry + 1) = 3 Then mainarr(grx + 1, gry + 1) = 0
   getgrid missileenemy(Index).left + missileenemy(Index).Width - map.left, missileenemy(Index).top + missileenemy(Index).Height - map.top
   If mainarr(grx + 1, gry + 1) = 3 Then mainarr(grx + 1, gry + 1) = 0
   tankup.Visible = False
   tankright.Visible = False
   tankdown.Visible = False
   tankleft.Visible = False
   endgame_Click
   start.Enabled = False
   MsgBox "Game Over!", , "Message"
  End If
  Unload missileenemy(Index)
  Unload timmissileenemy(Index)
  Exit Sub
 End If
 
 
 'move the missile in the appropriate direction
 If missileenemy(Index).Picture = missup.Picture Then missileenemy(Index).top = missileenemy(Index).top - 300
 If missileenemy(Index).Picture = missright.Picture Then missileenemy(Index).left = missileenemy(Index).left + 300
 If missileenemy(Index).Picture = missdown.Picture Then missileenemy(Index).top = missileenemy(Index).top + 300
 If missileenemy(Index).Picture = missleft.Picture Then missileenemy(Index).left = missileenemy(Index).left - 300

Errorhandler:
 Exit Sub
 missileenemy(Index).Visible = False
 timmissileenemy(Index).Enabled = False
 Unload missileenemy(Index)
 Unload timmissileenemy(Index)
 
End Sub

Private Sub timplayer_Timer()
Dim j As Integer
Dim avoidfor As Boolean

On Error GoTo Errorhandler
missileplayer.ZOrder (0)

'Check borders
If dirplayer = 1 Then
 If missileplayer.top - 50 < map.top Then
  missileplayer.Visible = False
  timplayer.Enabled = False
  Exit Sub
 End If
End If
If dirplayer = 2 Then
 If missileplayer.left + missileplayer.Width + 50 > map.left + map.Width Then
  missileplayer.Visible = False
  timplayer.Enabled = False
  Exit Sub
 End If
End If
If dirplayer = 3 Then
 If missileplayer.top + missileplayer.Height + 50 > map.top + map.Height Then
  missileplayer.Visible = False
  timplayer.Enabled = False
  Exit Sub
 End If
End If
If dirplayer = 4 Then
 If missileplayer.left - 50 < map.left Then
  missileplayer.Visible = False
  timplayer.Enabled = False
  Exit Sub
 End If
End If

'Gets missile's grid block
getgrid missileplayer.left - map.left, missileplayer.top - map.top
If mainarr(grx + 1, gry + 1) = 0 Or mainarr(grx + 1, gry + 1) = 3 Then
 getgrid missileplayer.left + missileplayer.Width - map.left, missileplayer.top + missileplayer.Height - map.top
 If mainarr(grx + 1, gry + 1) = 0 Or mainarr(grx + 1, gry + 1) = 3 Then
  avoidfor = True
 End If
End If

If avoidfor = False Then
For j = 1 To blockcount
 If block1(j).Picture <> emptyblock.Picture Then
 
 'top left corner
  If (missileplayer.top > block1(j).top) And (missileplayer.top < block1(j).top + block1(j).Height) And (missileplayer.left > block1(j).left) And (missileplayer.left < block1(j).left + block1(j).Width) Then
    missileplayer.Visible = False
    timplayer.Enabled = False
    PlaySound App.Path + "\sounds\explode.wav", 0, SND_ASYNC
    For i = 1 To enemycount
     If enemytank(i) = j Then
      enemytank(i) = -1
      enemytrack(j).IndexOfTank = 0
      timEnemy(j).Enabled = False
     End If
    Next
    getgrid block1(j).left, block1(j).top
    mainarr(grx + 1, gry + 1) = 0
    'display the bomb
    
    load timBomb(j)
    timBomb(j).Enabled = True
    'block1(j).Visible = False
    Exit Sub
  End If
 
 'top right corner
  If (missileplayer.top > block1(j).top) And (missileplayer.top < block1(j).top + block1(j).Height) And (missileplayer.left + missileplayer.Width > block1(j).left) And (missileplayer.left + missileplayer.Width < block1(j).left + block1(j).Width) Then
    missileplayer.Visible = False
    timplayer.Enabled = False
    PlaySound App.Path + "\sounds\explode.wav", 0, SND_ASYNC
    For i = 1 To enemycount
     If enemytank(i) = j Then
      enemytank(i) = -1
      enemytrack(j).IndexOfTank = 0
      timEnemy(j).Enabled = False
     End If
    Next
    getgrid block1(j).left, block1(j).top
    mainarr(grx + 1, gry + 1) = 0
    'display bomb
    
    load timBomb(j)
    timBomb(j).Enabled = True
    'block1(j).Visible = False
    Exit Sub
  End If
 
 'bottom left corner
  If (missileplayer.top + missileplayer.Height > block1(j).top) And (missileplayer.top + missileplayer.Height < block1(j).top + block1(j).Height) And (missileplayer.left > block1(j).left) And (missileplayer.left < block1(j).left + block1(j).Width) Then
    missileplayer.Visible = False
    timplayer.Enabled = False
    PlaySound App.Path + "\sounds\explode.wav", 0, SND_ASYNC
    For i = 1 To enemycount
     If enemytank(i) = j Then
      enemytank(i) = -1
      enemytrack(j).IndexOfTank = 0
      timEnemy(j).Enabled = False
     End If
    Next
    getgrid block1(j).left, block1(j).top
    mainarr(grx + 1, gry + 1) = 0
    'display bomb
    
    load timBomb(j)
    timBomb(j).Enabled = True
    'block1(j).Visible = False
    Exit Sub
  End If
  
 'bottom right corner
  If (missileplayer.top + missileplayer.Height > block1(j).top) And (missileplayer.top + missileplayer.Height < block1(j).top + block1(j).Height) And (missileplayer.left + missileplayer.Width > block1(j).left) And (missileplayer.left + missileplayer.Width < block1(j).left + block1(j).Width) Then
    missileplayer.Visible = False
    timplayer.Enabled = False
    PlaySound App.Path + "\sounds\explode.wav", 0, SND_ASYNC
    For i = 1 To enemycount
     If enemytank(i) = j Then
      enemytank(i) = -1
      enemytrack(j).IndexOfTank = 0
      timEnemy(j).Enabled = False
     End If
    Next
    getgrid block1(j).left, block1(j).top
    mainarr(grx + 1, gry + 1) = 0
    'display bomb
    
    load timBomb(j)
    timBomb(j).Enabled = True
    'block1(j).Visible = False
    Exit Sub
  End If
 End If
Next
End If

 'move the missile in the appropriate direction
 If dirplayer = 1 Then missileplayer.top = missileplayer.top - 200
 If dirplayer = 2 Then missileplayer.left = missileplayer.left + 200
 If dirplayer = 3 Then missileplayer.top = missileplayer.top + 200
 If dirplayer = 4 Then missileplayer.left = missileplayer.left - 200

Errorhandler:
 Exit Sub
 missileplayer.Visible = False
 timplayer.Enabled = False
 
End Sub

Private Sub update_Timer()
On Error GoTo Errorhandler

 'empties 'non-wall' blocks
 For j = 1 To grdy
  For i = 1 To grdx
   If mainarr(i, j) > 1 Then mainarr(i, j) = 0
  Next
 Next
 
 'updates the block array (enemy tanks)
 For i = 1 To enemycount
  If enemytank(i) > -1 Then
   getgrid block1(enemytank(i)).left + (block1(enemytank(i)).Width / 2) - map.left, block1(enemytank(i)).top + (block1(enemytank(i)).Height / 2) - map.top
   mainarr(grx + 1, gry + 1) = 2
  End If
 Next
  
 'updates the block array (player's tank)
 If tankright.Visible = True Then
  getgrid tankright.left + (tankright.Width / 2) - map.left, tankright.top + (tankright.Height / 2) - map.TabIndex
 End If
 If tankdown.Visible = True Then
  getgrid tankdown.left + (tankdown.Width / 2) - map.left, tankdown.top + (tankdown.Height / 2) - map.top
 End If
 If tankleft.Visible = True Then
  getgrid tankleft.left + (tankleft.Width / 2) - map.left, tankleft.top + (tankleft.Height / 2) - map.top
 End If
 If tankup.Visible = True Then
  getgrid tankup.left + (tankup.Width / 2) - map.left, tankup.top + (tankup.Height / 2) - map.top
 End If
 mainarr(grx + 1, gry + 1) = 3
 'Shape1.Move (grx * block1(0).Width) + map.Left, (gry * block1(0).Height) + map.Top, Shape1.Width, Shape1.Height
 'Shape1.Visible = True
 'Shape1.ZOrder (0)
 
Errorhandler:
 Exit Sub
 
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -