VB坦克大战代码
- 格式:doc
- 大小:37.50 KB
- 文档页数:5
Private Sub Form_Load() La.Top = 4000La.Left = 3000La.Height = 800La.Width = 900Lb.Top = 4300Lb.Left = 3900Lb.Height = 200Lb.Width = 900Lc.Top = 4300Lc.Left = 4560Lc.Height = 200Lc.Width = 200End SubPrivate Sub Form_keypress(keyascii As Integer)If keyascii = 106 ThenLa.Enabled = FalseLb.Enabled = FalseIf La.Top - Lb.Top = 900 And Lb.Left - La.Left = 300 Then Lc.Top = La.Top - 900Lc.Left = La.Left + 300Lc.Visible = TrueTimer1."Enabled = TrueTimer2."Enabled = FalseTimer3."Enabled = FalseTimer4."Enabled = FalseElseIf La.Left - Lb.Left = 900 And Lb.Top - La.Top = 300 Then Lc.Top = La.Top + 300Lc.Left = La.Left - 900Lc.Visible = TrueTimer1."Enabled = FalseTimer2."Enabled = TrueTimer3."Enabled = FalseTimer4."Enabled = FalseElseIf Lb.Top - La.Top = 900 And Lb.Left - La.Left = 300 Then Lc.Top = La.Top + 1600Lc.Left = La.Left + 300Lc.Visible = TrueTimer1."Enabled = FalseTimer2."Enabled = FalseTimer3."Enabled = TrueTimer4."Enabled = FalseElseIf Lb.Left - La.Left = 900 And Lb.Top - La.Top = 300 Then Lc.Top = La.Top + 300Lc.Left = La.Left + 1600Lc.Visible = TrueTimer1."Enabled = FalseTimer2."Enabled = FalseTimerTimer4."Enabled = TrueEnd IfElseIf keyascii = 119 Then La.Enabled = TrueLb.Enabled = TrueLb.Left = La.Left + 300 Lb.Top = La.Top - 900 La.Height = 900La.Width = 800Lb.Width = 200Lb.Height = 900If Lb.Top <= 0 Then Lb.Enabled = FalseLa.Enabled = FalseElseLa.Top = La.Top - 100 Lb.Top = Lb.Top - 100 End IfElseIf keyascii = 97 ThenLb.Enabled = TrueLb.Left = La.Left - 900 Lb.Top = La.Top + 300 La.Height = 800La.Width = 900Lb.Width = 900Lb.Height = 200If Lb.Left <= 0 Then Lb.Enabled = FalseLa.Enabled = FalseElseLa.Left = La.Left - 100 Lb.Left = Lb.Left - 100 End IfElseIf keyascii = 100 Then La.Enabled = TrueLb.Enabled = TrueLb.Left = La.Left + 900 Lb.Top = La.Top + 300 La.Height = 800La.Width = 900Lb.Width = 900Lb.Height = 200If Lb.Left >= 8700 Then Lb.Enabled = FalseLa.Enabled = FalseElseLa.Left = La.Left + 100 Lb.Left = Lb.Left + 100 End IfElseIf keyascii = 115 Then La.Enabled = TrueLb.Enabled = TrueLb.Left = La.Left + 300 Lb.Top = La.Top + 900 La.Height = 900La.Width = 800Lb.Width = 200Lb.Height = 900If Lb.Top >= 7600 Then Lb.Enabled = FalseLa.Enabled = FalseElseLa.Top = La.Top + 100Lb.Top = Lb.Top + 100End IfElseIf keyascii = 8 ThenEndEnd IfEnd SubPrivate Sub Timer1_Timer()Do While Lc.Top > 0Lc.Top = Lc.Top - 2Lc.Left = Lc.LeftIf Lc.Left > Ld.Left And Lc.Left < Ld.Left + Ld.Width And Lc.Top > Ld.Top And Lc.Top< Ld.Top + Ld.Height ThenLd.Visible = FalseLc.Visible = FalseEnd IfLoopLc.Visible = FalseTimer1."Enabled = FalseEnd SubPrivate Sub Timer2_Timer()Do While Lc.Left > 0Lc.Left = Lc.Left - 2Lc.Top = Lc.TopIf Lc.Left > Ld.Left And Lc.Left < Ld.Left + Ld.Width And Lc.Top > Ld.Top And Lc.Top <Ld.Top + Ld.Height ThenLd.Visible = FalseLc.Visible = FalseEnd IfLoopLc.Visible = FalseTimer2."Enabled = FalseEnd SubPrivate Sub Timer3_Timer()Do While Lc.Top < 8880Lc.Top = Lc.Top + 2Lc.Left = Lc.LeftIf Lc.Left > Ld.Left And Lc.Left < Ld.Left + Ld.Width And Lc.Top > Ld.Top And Lc.Top <Ld.Top + Ld.Height ThenLd.Visible = FalseLc.Visible = FalseEnd IfLoopLc.Visible = FalseTimer3."Enabled = FalseEnd SubPrivate Sub Timer4_Timer()Do While Lc.Left < 9750Lc.Left = Lc.Left + 2Lc.Top = Lc.TopIf Lc.Left > Ld.Left And Lc.Left < Ld.Left + Ld.Width And Lc.Top > Ld.Top And Lc.Top< Ld.Top + Ld.Height ThenLd.Visible = FalseLc.Visible = FalseEnd IfLoopLc.Visible = FalseTimer4."Enabled = FalseEnd Sub。
import java.awt.* ;import javax.swing.* ;import java.awt.event.*;import java.util.EventListener;class f extends JFrame {f(String title) {this.setTitle(title) ;this.setSize(608 , 630) ;this.setLocation(300 , 100) ;this.setBackground(Color.BLACK) ;MyTank mp = new MyTank() ;this.add(mp) ;this.addKeyListener(mp) ;new Thread(mp).start() ;}public static void main(String[] args) {f h = new f("坦克大战(版本1.0)") ;h.setVisible(true) ;}}//主战坦克class MyTank extends JPanel implements KeyListener , Runnable {int x = 280, y = 280 ;//坦克的初始位置int op = 1 ;//坦克的移动方向int color = 0 ;int tankspeed = 8 ;//坦克的速度int tankbullet = 8 ;//坦克的子弹速度int tankfbullet = 4 ;//敌军的子弹速度int shengming = 100 ;//生命int fenshu = 0 ;int nandu = 5 ; //设置游戏难度//子弹int dx = 295 , dy = 295 ;int dx1 = 295 , dy1 = -10 ;int dx2 = 600 , dy2 = 295 ;int dx3 = 295 , dy3 = 600 ;int dx4 = -10 , dy4 = 295 ;//敌军坦克int num = 10 ;//敌军坦克数量,不能修改int[] xf = new int[num] ;int[] yf = new int[num] ;int[] opf = new int[num] ;int[] dxf = new int[num] ;int[] dyf = new int[num] ;int[] dxf1 = new int[num] ;int[] dyf1 = new int[num] ;int[] dxf2 = new int[num] ;int[] dyf2 = new int[num] ;int[] dxf3 = new int[num] ;int[] dyf3 = new int[num] ;int[] dxf4 = new int[num] ;int[] dyf4 = new int[num] ;//构造函数,初始化敌军坦克的位置和状态MyTank() {for (int i = 0; i<num; i++) {xf[i] = (int) (Math.random() * 560) ; yf[i] = (int) (Math.random() * 560) ; dxf[i] = xf[i] + 15 ;dyf[i] = yf[i] + 15 ;}for (int i = 0; i<num; i++) {dxf1[i] = 295 ; dyf1[i] = -10 ;dxf2[i] = 600 ; dyf2[i] = 295 ;dxf3[i] = 295 ; dyf3[i] = 600 ;dxf4[i] = -10 ; dyf4[i] = 295 ;}}//主面版public void paint(Graphics g) { super.paint(g) ;this.setBackground(Color.YELLOW) ;g.setColor(Color.red) ;g.drawString("生命:" , 10 , 20 ) ;g.fillRect(50 , 10 , shengming * 5 , 10) ;g.drawRect(50 , 10 , 500 , 10) ;g.drawString("得分: "+ fenshu , 10 , 40) ;if(op == 1) {g.setColor(Color.red) ;g.fillRect(x , y , 40 , 40) ;switch (color % 6) {case 0: g.setColor(Color.blue) ; break; case 1: g.setColor(Color.yellow) ; break; case 2: g.setColor(Color.red) ; break;case 3: g.setColor(Color.orange) ; break; case 4: g.setColor(Color.green) ; break; case 5: g.setColor(Color.black) ; break; }g.fillOval(x - 5 , y - 5 , 10 , 10) ;g.fillOval(x - 5 , y + 5 , 10 , 10) ;g.fillOval(x - 5 , y + 15 , 10 , 10) ;g.fillOval(x - 5 , y + 25 , 10 , 10) ;g.fillOval(x - 5 , y + 35 , 10 , 10) ;g.fillOval(x + 35 , y - 5 , 10 , 10) ;g.fillOval(x + 35 , y + 5 , 10 , 10) ;g.fillOval(x + 35 , y + 15 , 10 , 10) ;g.fillOval(x + 35 , y + 25 , 10 , 10) ;g.fillOval(x + 35 , y + 35 , 10 , 10) ;g.setColor(Color.black) ;g.fillRect(x + 15 , y - 20 , 10 , 40) ;switch (color % 20) {case 0: g.setColor(Color.white) ; break; case 1: g.setColor(Color.white) ; break; case 2: g.setColor(Color.white) ; break; case 3: g.setColor(Color.white) ; break; case 4: g.setColor(Color.white) ; break; case 5: g.setColor(Color.white) ; break; case 6: g.setColor(Color.white) ; break;case 7: g.setColor(Color.white) ; break;case 8: g.setColor(Color.white) ; break;case 9: g.setColor(Color.white) ; break;case 10: g.setColor(Color.black) ; break;case 11: g.setColor(Color.black) ; break;case 12: g.setColor(Color.black) ; break;case 13: g.setColor(Color.black) ; break;case 14: g.setColor(Color.black) ; break;case 15: g.setColor(Color.black) ; break;case 16: g.setColor(Color.black) ; break;case 17: g.setColor(Color.black) ; break;case 18: g.setColor(Color.black) ; break;case 19: g.setColor(Color.black) ; break; }g.fillOval(x + 5 , y + 30 , 10 , 10) ;g.fillOval(x + 25 , y + 30 , 10 , 10) ;}if(op == 2) {g.setColor(Color.green) ;g.fillRect(x , y , 40 , 40) ;switch (color % 6) {case 0: g.setColor(Color.blue) ; break;case 1: g.setColor(Color.yellow) ; break;case 2: g.setColor(Color.red) ; break;case 3: g.setColor(Color.orange) ; break;case 4: g.setColor(Color.green) ; break;case 5: g.setColor(Color.black) ; break;}g.fillOval(x - 5 , y - 5 , 10 , 10) ;g.fillOval(x + 5 , y - 5 , 10 , 10) ;g.fillOval(x + 15 , y - 5 , 10 , 10) ;g.fillOval(x + 25 , y - 5 , 10 , 10) ;g.fillOval(x + 35 , y - 5 , 10 , 10) ;g.fillOval(x - 5 , y+35 , 10 , 10) ;g.fillOval(x + 5 , y+35 , 10 , 10) ;g.fillOval(x + 15 , y+35 , 10 , 10) ;g.fillOval(x + 25 , y+35 , 10 , 10) ;g.fillOval(x + 35 , y+35 , 10 , 10) ;g.setColor(Color.black) ;g.fillRect(x + 20 , y + 15 , 40 , 10) ;switch (color % 20) {case 0: g.setColor(Color.white) ; break;case 1: g.setColor(Color.white) ; break;case 2: g.setColor(Color.white) ; break;case 3: g.setColor(Color.white) ; break;case 4: g.setColor(Color.white) ; break;case 5: g.setColor(Color.white) ; break;case 6: g.setColor(Color.white) ; break;case 7: g.setColor(Color.white) ; break;case 8: g.setColor(Color.white) ; break;case 9: g.setColor(Color.white) ; break;case 10: g.setColor(Color.black) ; break;case 11: g.setColor(Color.black) ; break;case 12: g.setColor(Color.black) ; break;case 13: g.setColor(Color.black) ; break;case 14: g.setColor(Color.black) ; break;case 15: g.setColor(Color.black) ; break;case 16: g.setColor(Color.black) ; break;case 17: g.setColor(Color.black) ; break;case 18: g.setColor(Color.black) ; break;case 19: g.setColor(Color.black) ; break; }g.fillOval(x , y + 5 , 10 , 10) ;g.fillOval(x , y + 25 , 10 , 10) ;}if(op == 3) {g.setColor(Color.blue) ;g.fillRect(x , y , 40 , 40) ;switch (color % 6) {case 0: g.setColor(Color.blue) ; break;case 1: g.setColor(Color.yellow) ; break;case 2: g.setColor(Color.red) ; break;case 3: g.setColor(Color.orange) ; break;case 4: g.setColor(Color.green) ; break;case 5: g.setColor(Color.black) ; break;}g.fillOval(x - 5 , y - 5 , 10 , 10) ;g.fillOval(x - 5 , y + 5 , 10 , 10) ;g.fillOval(x - 5 , y + 15 , 10 , 10) ;g.fillOval(x - 5 , y + 25 , 10 , 10) ;g.fillOval(x - 5 , y + 35 , 10 , 10) ;g.fillOval(x + 35 , y - 5 , 10 , 10) ;g.fillOval(x + 35 , y + 5 , 10 , 10) ;g.fillOval(x + 35 , y + 15 , 10 , 10) ;g.fillOval(x + 35 , y + 25 , 10 , 10) ;g.fillOval(x + 35 , y + 35 , 10 , 10) ;g.setColor(Color.black) ;g.fillRect(x + 15 , y + 20 , 10 , 40) ;switch (color % 20) {case 0: g.setColor(Color.white) ; break;case 1: g.setColor(Color.white) ; break;case 2: g.setColor(Color.white) ; break;case 3: g.setColor(Color.white) ; break;case 4: g.setColor(Color.white) ; break;case 5: g.setColor(Color.white) ; break;case 6: g.setColor(Color.white) ; break;case 7: g.setColor(Color.white) ; break;case 8: g.setColor(Color.white) ; break;case 9: g.setColor(Color.white) ; break;case 10: g.setColor(Color.black) ; break;case 11: g.setColor(Color.black) ; break;case 12: g.setColor(Color.black) ; break;case 13: g.setColor(Color.black) ; break;case 14: g.setColor(Color.black) ; break;case 15: g.setColor(Color.black) ; break;case 16: g.setColor(Color.black) ; break;case 17: g.setColor(Color.black) ; break;case 18: g.setColor(Color.black) ; break;case 19: g.setColor(Color.black) ; break; }g.fillOval(x + 5 , y , 10 , 10) ;g.fillOval(x + 25 , y , 10 , 10) ;}if(op == 4) {g.setColor(Color.yellow) ;g.fillRect(x , y , 40 , 40) ;switch (color % 6) {case 0: g.setColor(Color.blue) ; break;case 1: g.setColor(Color.yellow) ; break;case 2: g.setColor(Color.red) ; break;case 3: g.setColor(Color.orange) ; break;case 4: g.setColor(Color.green) ; break;case 5: g.setColor(Color.black) ; break;}g.fillOval(x - 5 , y - 5 , 10 , 10) ;g.fillOval(x + 5 , y - 5 , 10 , 10) ;g.fillOval(x + 15 , y - 5 , 10 , 10) ;g.fillOval(x + 25 , y - 5 , 10 , 10) ;g.fillOval(x + 35 , y - 5 , 10 , 10) ;g.fillOval(x - 5 , y+35 , 10 , 10) ;g.fillOval(x + 5 , y+35 , 10 , 10) ;g.fillOval(x + 15 , y+35 , 10 , 10) ;g.fillOval(x + 25 , y+35 , 10 , 10) ;g.fillOval(x + 35 , y+35 , 10 , 10) ;g.setColor(Color.black) ;g.fillRect(x - 20 , y + 15 , 40 , 10) ;switch (color % 20) {case 0: g.setColor(Color.white) ; break;case 1: g.setColor(Color.white) ; break;case 2: g.setColor(Color.white) ; break;case 3: g.setColor(Color.white) ; break;case 4: g.setColor(Color.white) ; break;case 5: g.setColor(Color.white) ; break;case 6: g.setColor(Color.white) ; break;case 7: g.setColor(Color.white) ; break;case 8: g.setColor(Color.white) ; break;case 9: g.setColor(Color.white) ; break;case 10: g.setColor(Color.black) ; break;case 11: g.setColor(Color.black) ; break;case 12: g.setColor(Color.black) ; break;case 13: g.setColor(Color.black) ; break;case 14: g.setColor(Color.black) ; break;case 15: g.setColor(Color.black) ; break;case 16: g.setColor(Color.black) ; break;case 17: g.setColor(Color.black) ; break;case 18: g.setColor(Color.black) ; break;case 19: g.setColor(Color.black) ; break; }g.fillOval(x + 30 , y + 5 , 10 , 10) ;g.fillOval(x + 30 , y + 25 , 10 , 10) ;}g.setColor(Color.black) ;g.fillOval(dx , dy , 10 , 10) ;g.fillOval(dx1 , dy1 , 10 , 10) ;g.fillOval(dx2 , dy2 , 10 , 10) ;g.fillOval(dx3 , dy3 , 10 , 10) ;g.fillOval(dx4 , dy4 , 10 , 10) ;for (int i = 0; i<num; i++) {if(opf[i] == 1) {g.fillRect(xf[i] , yf[i] , 40 , 40) ;g.fillOval(xf[i] - 5 , yf[i] - 5 , 10 , 10) ; g.fillOval(xf[i] - 5 , yf[i] + 5 , 10 , 10) ; g.fillOval(xf[i] - 5 , yf[i] + 15 , 10 , 10) ;g.fillOval(xf[i] - 5 , yf[i] + 25 , 10 , 10) ;g.fillOval(xf[i] - 5 , yf[i] + 35 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] - 5 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] + 5 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] + 15 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] + 25 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] + 35 , 10 , 10) ;g.fillRect(xf[i] + 15 , yf[i] - 20 , 10 , 40) ;g.fillOval(xf[i] + 5 , yf[i] + 30 , 10 , 10) ;g.fillOval(xf[i] + 25 , yf[i] + 30 , 10 , 10) ; }if(opf[i] == 2) {g.fillRect(xf[i] , yf[i] , 40 , 40) ;g.fillOval(xf[i] - 5 , yf[i] - 5 , 10 , 10) ; g.fillOval(xf[i] + 5 , yf[i] - 5 , 10 , 10) ; g.fillOval(xf[i] + 15 , yf[i] - 5 , 10 , 10) ;g.fillOval(xf[i] + 25 , yf[i] - 5 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] - 5 , 10 , 10) ;g.fillOval(xf[i] - 5 , yf[i] + 35 , 10 , 10) ;g.fillOval(xf[i] + 5 , yf[i] + 35 , 10 , 10) ;g.fillOval(xf[i] + 15 , yf[i] + 35 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] + 35 , 10 , 10) ;g.fillRect(xf[i] + 20 , yf[i] + 15 , 40 , 10) ;g.fillOval(xf[i] , yf[i] + 5 , 10 , 10) ;g.fillOval(xf[i] , yf[i] + 25 , 10 , 10) ;}if(opf[i] == 3) {g.fillRect(xf[i] , yf[i] , 40 , 40) ;g.fillOval(xf[i] - 5 , yf[i] - 5 , 10 , 10) ; g.fillOval(xf[i] - 5 , yf[i] + 5 , 10 , 10) ; g.fillOval(xf[i] - 5 , yf[i] + 15 , 10 , 10) ;g.fillOval(xf[i] - 5 , yf[i] + 25 , 10 , 10) ;g.fillOval(xf[i] - 5 , yf[i] + 35 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] - 5 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] + 5 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] + 15 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] + 25 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] + 35 , 10 , 10) ;g.fillRect(xf[i] + 15 , yf[i] + 20 , 10 , 40) ;g.fillOval(xf[i] + 5 , yf[i] , 10 , 10) ;g.fillOval(xf[i] + 25 , yf[i] , 10 , 10) ;}if(opf[i] == 4) {g.fillRect(xf[i] , yf[i] , 40 , 40) ;g.fillOval(xf[i] - 5 , yf[i] - 5 , 10 , 10) ; g.fillOval(xf[i] + 5 , yf[i] - 5 , 10 , 10) ; g.fillOval(xf[i] + 15 , yf[i] - 5 , 10 , 10) ;g.fillOval(xf[i] + 25 , yf[i] - 5 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] - 5 , 10 , 10) ;g.fillOval(xf[i] - 5 , yf[i] + 35 , 10 , 10) ;g.fillOval(xf[i] + 5 , yf[i] + 35 , 10 , 10) ;g.fillOval(xf[i] + 25 , yf[i] + 35 , 10 , 10) ;g.fillOval(xf[i] + 35 , yf[i] + 35 , 10 , 10) ;g.fillRect(xf[i] - 20 , yf[i] + 15 , 40 , 10) ;g.fillOval(xf[i] + 30 , yf[i] + 5 , 10 , 10) ;g.fillOval(xf[i] + 30 , yf[i] + 25 , 10 , 10) ; }g.fillOval(dxf1[i] , dyf1[i] , 10 , 10 ) ;g.fillOval(dxf2[i] , dyf2[i] , 10 , 10 ) ;g.fillOval(dxf3[i] , dyf3[i] , 10 , 10 ) ;g.fillOval(dxf4[i] , dyf4[i] , 10 , 10 ) ;}}public void keyTyped(KeyEvent e) {}//键盘控制坦克的移动,发弹public void keyPressed(KeyEvent e) {color ++ ;if(e.getKeyCode() == KeyEvent.VK_UP) {op = 1 ;y = y - tankspeed ;dy = dy - tankspeed ;if(y <= 0) {y = y + tankspeed ;dy = dy + tankspeed ;}}if(e.getKeyCode() == KeyEvent.VK_RIGHT) {op = 2 ;x = x + tankspeed ;dx = dx + tankspeed ;if(x >= 560) {x = x - tankspeed ;dx = dx - tankspeed ;}}if(e.getKeyCode() == KeyEvent.VK_DOWN) {op = 3 ;y = y + tankspeed ;dy = dy + tankspeed ;if(y >= 560) {y = y - tankspeed ;dy = dy - tankspeed ;}}if(e.getKeyCode() == KeyEvent.VK_LEFT) { op = 4 ;x = x - tankspeed ;dx = dx - tankspeed ;if(x <= 0) {x = x + tankspeed ;dx = dx + tankspeed ;}}if(e.getKeyCode() == KeyEvent.VK_SPACE) { if(op == 1) {dx1 = dx ; dy1 = dy ;}if(op == 2) {dx2 = dx ; dy2 = dy ;}if(op == 3) {dx3 = dx ; dy3 = dy ;}if(op == 4) {dx4 = dx ; dy4 = dy ;}}this.repaint() ;}public void keyReleased(KeyEvent e) {}public void run() {for (int a = 0; a<60000; a++) {dy1 = dy1 - tankbullet ;dx2 = dx2 + tankbullet ;dy3 = dy3 + tankbullet ;dx4 = dx4 - tankbullet ;for (int i = 0; i<num; i++) {dyf1[i] = dyf1[i] - tankfbullet ;dxf2[i] = dxf2[i] + tankfbullet ;dyf3[i] = dyf3[i] + tankfbullet ;dxf4[i] = dxf4[i] - tankfbullet ;}//判断是否被击中for (int i = 0; i<num; i++) {if(dyf1[i]<y + 38 &&dyf1[i]>y +8 && dxf1[i]-x>-10 && dxf1[i]-x<40) { System.out.println ("被1击中") ;dxf1[i] = dxf[i] ; dyf1[i] = dyf[i] ;shengming = shengming - nandu ;}if(dxf2[i]>x+2 &&dxf2[i]<x+32 &&dyf2[i] - y >-10 && dyf2[i] - y <40 ) { System.out.println ("被2击中") ;dxf2[i] = dxf[i] ; dyf2[i] = dyf[i] ;shengming = shengming - nandu ;}if(dyf3[i]>y+2 && dyf3[i]< y+32 && dxf3[i]-x >-10&& dxf3[i]-x<40) { System.out.println ("被3击中") ;dxf3[i] = dxf[i] ; dyf3[i] = dyf[i] ;shengming = shengming - nandu ;}if(dxf4[i]>x+8 &&dxf4[i]<x+38 &&dyf4[i] - y >-10 && dyf4[i] - y <40 ) { System.out.println ("被4击中") ;dxf4[i] = dxf[i] ; dyf4[i] = dyf[i] ;shengming = shengming - nandu ;}}//判断是否击中敌军for (int i = 0; i<num; i++) {if(dy1<yf[i] + 38 &&dy1>yf[i] +8 && dx1-xf[i]>-10 && dx1-xf[i]<40) { System.out.println ("1击中") ;fenshu = fenshu + 100 ;xf[i] = (int)(Math.random() * 560 );yf[i] = (int)(Math.random() * 560 );}if(dx2>xf[i]+2 &&dx2<xf[i]+32 &&dy2 - yf[i] >-10 && dy2 - yf[i] <40 ) { System.out.println ("2击中") ;fenshu = fenshu + 100 ;xf[i] = (int)(Math.random() * 560 );yf[i] = (int)(Math.random() * 560 );}if(dy3>yf[i]+2 && dy3< yf[i]+32 && dx3-xf[i] >-10&& dx3-xf[i]<40) { System.out.println ("3击中") ;fenshu = fenshu + 100 ;xf[i] = (int)(Math.random() * 560 );yf[i] = (int)(Math.random() * 560 );}if(dx4>xf[i]+8 &&dx4<xf[i]+38 &&dy4 - yf[i] >-10 && dy4 - yf[i] <40 ) { System.out.println ("4击中") ;fenshu = fenshu + 100 ;xf[i] = (int)(Math.random() * 560 );yf[i] = (int)(Math.random() * 560 );}dxf[i] = xf[i] + 15 ;dyf[i] = yf[i] + 15 ;}//坦克的移动for (int i = 0; i<num; i++) {switch (opf[i]) {case 1:{yf[i]-- ;dyf[i] -- ;for (int s = 0; s<num; s++) {if(yf[i] <= 0) {yf[i] ++ ;dyf[i] ++ ;}}break;}case 2:{xf[i]++ ;dxf[i]++ ;for (int s = 0; s<num; s++) { if(xf[i] >= 560){xf[i] -- ;dxf[i] -- ;}}break;}case 3:{yf[i]++ ;dyf[i]++ ;for (int s = 0; s<num ; s++) { if(yf[i] >= 560){yf[i] -- ;dyf[i] -- ;}}break;}case 4:{xf[i]-- ;dxf[i]-- ;for (int s = 0; s<num; s++) { if(xf[i] <= 0){xf[i] ++ ;dxf[i] ++ ;}}break;}}}try{Thread.sleep(20) ;}catch(Exception e) {e.printStackTrace() ;}//坦克的开火if(a % 50 == 5) {if(Math.random()>0.5){for (int i = 0; i<2; i++) {if(opf[i] == 1) {dxf1[i] = dxf[i] ; dyf1[i] = dyf[i] ; }if(opf[i] == 2) {dxf2[i] = dxf[i] ; dyf2[i] = dyf[i] ; }if(opf[i] == 3) {dxf3[i] = dxf[i] ; dyf3[i] = dyf[i] ; }if(opf[i] == 4) {dxf4[i] = dxf[i] ; dyf4[i] = dyf[i] ; }}}}if(a % 50 == 15) {if(Math.random()>0.5) {for (int i = 2; i<4; i++) {if(opf[i] == 1) {dxf1[i] = dxf[i] ; dyf1[i] = dyf[i] ; }if(opf[i] == 2) {dxf2[i] = dxf[i] ; dyf2[i] = dyf[i] ; }if(opf[i] == 3) {dxf3[i] = dxf[i] ; dyf3[i] = dyf[i] ; }if(opf[i] == 4) {dxf4[i] = dxf[i] ; dyf4[i] = dyf[i] ; }}}}if(a % 50 == 25) {if(Math.random()>0.5){for (int i = 4; i<6; i++) {if(opf[i] == 1) {dxf1[i] = dxf[i] ; dyf1[i] = dyf[i] ; }if(opf[i] == 2) {dxf2[i] = dxf[i] ; dyf2[i] = dyf[i] ; }if(opf[i] == 3) {dxf3[i] = dxf[i] ; dyf3[i] = dyf[i] ; }if(opf[i] == 4) {dxf4[i] = dxf[i] ; dyf4[i] = dyf[i] ; }}}}if(a % 50 == 35) {if(Math.random()>0.5){for (int i = 6; i<8; i++) {if(opf[i] == 1) {dxf1[i] = dxf[i] ; dyf1[i] = dyf[i] ; }if(opf[i] == 2) {dxf2[i] = dxf[i] ; dyf2[i] = dyf[i] ; }if(opf[i] == 3) {dxf3[i] = dxf[i] ; dyf3[i] = dyf[i] ; }if(opf[i] == 4) {dxf4[i] = dxf[i] ; dyf4[i] = dyf[i] ; }}}}if(a % 50 == 45) {if(Math.random()>0.5) {for (int i = 8; i<10; i++) {if(opf[i] == 1) {dxf1[i] = dxf[i] ; dyf1[i] = dyf[i] ; }if(opf[i] == 2) {dxf2[i] = dxf[i] ; dyf2[i] = dyf[i] ; }if(opf[i] == 3) {dxf3[i] = dxf[i] ; dyf3[i] = dyf[i] ; }if(opf[i] == 4) {dxf4[i] = dxf[i] ; dyf4[i] = dyf[i] ; }}}}//坦克的随机移动if(a % 50 == 1 ) {for (int i = 0; i<2; i++) {if( Math.random() > 0.5 ) {if(Math.random() > 0.5){opf[i] = 1 ;}else{opf[i] = 2 ;}}else{if(Math.random() > 0.5){opf[i] = 3 ;}else{opf[i] = 4 ;}}}}if(a % 50 == 11 ) {//坦克的随机移动for (int i = 2; i<4; i++) {if( Math.random() > 0.5 ) {if(Math.random() > 0.5){opf[i] = 1 ;}else{}}else{if(Math.random() > 0.5){ opf[i] = 3 ;}else{opf[i] = 4 ;}}}}if(a % 50 == 21 ) {//坦克的随机移动for (int i = 4; i<6; i++) { if( Math.random() > 0.5 ) { if(Math.random() > 0.5){ opf[i] = 1 ;}else{opf[i] = 2 ;}}else{if(Math.random() > 0.5){ opf[i] = 3 ;}else{opf[i] = 4 ;}}}}if(a % 50 == 31 ) {//坦克的随机移动for (int i = 6; i<8; i++) { if( Math.random() > 0.5 ) { if(Math.random() > 0.5){ opf[i] = 1 ;}else{opf[i] = 2 ;}}else{if(Math.random() > 0.5){ opf[i] = 3 ;}else{}}}}if(a % 50 == 41 ) {//坦克的随机移动for (int i = 8; i<10; i++) {if( Math.random() > 0.5 ) {if(Math.random() > 0.5){opf[i] = 1 ;}else{opf[i] = 2 ;}}else{if(Math.random() > 0.5){opf[i] = 3 ;}else{opf[i] = 4 ;}}}}//重画if(shengming<=0){//弹出player1胜利对话框JOptionPane.showMessageDialog(null,"你结束了!!!","Game Over !", JOptionPane.ERROR_MESSAGE); //结束游戏System.exit(0) ;}this.repaint() ;}}}。
Pygame坦克⼤战游戏开发实战详解代码导语哈喽!哈喽——我是⽊⽊⼦今天来升级下之前写的坦克⼤战游戏嘛,哈哈哈其实也不算是修改,就是稍微的调试⼀下!因为之前写的界⾯都是英⽂的,有的⼩伙伴⼉英⽂⼀点⼉都不会的可能看着别扭,今天来⼀款中⽂版的给⼤家嘛!俗话说的好:“⾬露均沾”。
哈哈哈.jpg⼩简介:《坦克⼤战》,1985年由⽇本开发商南梦宫(Namco)开发,是第⼀款可以双打的红⽩机游戏。
当时使⽤的还是⼩霸王。
很多⼩朋友以学习的名义买了以后偷偷打的打游戏还被家长发现了有没得!《坦克⼤战》红⽩机原版共有35关,每⼀关的地形和障碍都不同。
图为原版坦克⼤战最后⼀关,你有没有打通关过?(⼩声bb,我这个游戏⽔平可能达不到!)正⽂1)游戏规则:游戏过程是这样的,玩家操作坦克消灭电脑控制的坦克,并保护⾃⼰基地。
基地图标是⼀只傲娇的张着翅膀的⽼鹰。
⼩时候⾃⼰失⼿把飞鹰轰成烧鸡的惨案经常发⽣。
双打的时候,为了看谁刷得分⾼,都争着打坦克,⼤本营的⽼鹰被烤熟了都不管。
坦克⼤战中的宝贝有战车、星星、时钟等,⼩编当时最喜欢的是时钟,敌不能动我能动的感觉妙极了。
图中的坦克图标吃了是可以加⼀条命的,当时为了抢宝贝都抢先把队友的坦克打晕。
2)环境安装Python3、Pycharm、Pygame、以及⾃带或⾃定义的模块。
pip install +模块名或pip install -i https:///simple/ +模块名3)代码演⽰(之前不是写过的嘛,今天的话就是修改下的,这种⼩游戏代码肯定都很多的,所以这⾥直接贴主程序了。
需要完整的打包好的代码跟素材哪些的话直接滴滴我即可或者看我主页左侧哪⾥有源码基地的哈!)主程序:import pygamefrom pygame.locals import *import sysimport sceneimport bulletimport foodimport tanksimport home# 开始界⾯显⽰def show_start_interface(screen, width, height):tfont = pygame.font.Font('./font/simkai.ttf', width // 4)cfont = pygame.font.Font('./font/simkai.ttf', width // 20)title = tfont.render(u'坦克⼤战', True, (255, 0, 0))content1 = cfont.render(u'按1键进⼊单⼈游戏', True, (0, 244, 222))content2 = cfont.render(u'按2键进⼊双⼈⼈游戏', True, (0, 0, 255))#显⽰字体pygame.font.Font.render(text⽂本, antialias是否抗锯齿, color颜⾊, background=None)trect = title.get_rect()# 默认title左上⾓的坐标是 (0, 0)trect.midtop = (width / 2, height / 5)crect1 = content1.get_rect()crect1.midtop = (width / 2, height / 1.8)crect2 = content2.get_rect()crect2.midtop = (width / 2, height / 1.6)screen.blit(title, trect)screen.blit(content1, crect1)screen.blit(content2, crect2)# 在指定位置绘制指定⽂字对象pygame.display.update()# 更新界⾯while True:for event in pygame.event.get():if event.type == QUIT:sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_1:return 1if event.key == pygame.K_2:return 2# 结束界⾯显⽰def show_end_interface(screen, width, height, is_win):bg_img = pygame.image.load("./images/others/background.png") screen.blit(bg_img, (0, 0))if is_win:font = pygame.font.Font('./font/simkai.ttf', width // 10)content = font.render(u'恭喜通关!', True, (255, 0, 0))rect = content.get_rect()rect.midtop = (width / 2, height / 2)screen.blit(content, rect)else:fail_img = pygame.image.load("./images/others/gameover.png") rect = fail_img.get_rect()rect.midtop = (width / 2, height / 2)screen.blit(fail_img, rect)pygame.display.update()while True:for event in pygame.event.get():if event.type == QUIT:sys.exit()# 关卡切换def show_switch_stage(screen, width, height, stage):bg_img = pygame.image.load("./images/others/background.png") screen.blit(bg_img, (0, 0))font = pygame.font.Font('./font/simkai.ttf', width // 10)content = font.render(u'第%d关' % stage, True, (0, 255, 0))rect = content.get_rect()rect.midtop = (width / 2, height / 2)screen.blit(content, rect)pygame.display.update()delay_event = EREVENTpygame.time.set_timer(delay_event, 1000)#定时器延时while True:for event in pygame.event.get():if event.type == QUIT:sys.exit()if event.type == delay_event:returndef main():pygame.init()pygame.mixer.init()screen = pygame.display.set_mode((630, 630))pygame.display.set_caption('坦克⼤战')bg_img = pygame.image.load('./images/others/background.png') # 加载⾳效add_sound = pygame.mixer.Sound("./audios/add.wav")add_sound.set_volume(1)bang_sound = pygame.mixer.Sound("./audios/bang.wav")bang_sound.set_volume(1)blast_sound = pygame.mixer.Sound("./audios/blast.wav")blast_sound.set_volume(1)fire_sound = pygame.mixer.Sound("./audios/fire.wav")fire_sound.set_volume(1)Gunfire_sound = pygame.mixer.Sound("./audios/Gunfire.wav")Gunfire_sound.set_volume(1)hit_sound = pygame.mixer.Sound("./audios/hit.wav")hit_sound.set_volume(1)start_sound = pygame.mixer.Sound("./audios/start.wav")start_sound.set_volume(1)# 开始界⾯num_player = show_start_interface(screen, 630, 630)# 播放游戏开始的⾳乐start_sound.play()# 关卡stage = 0num_stage = 2# 游戏是否结束is_gameover = False# 时钟clock = pygame.time.Clock()# 主循环while not is_gameover:# 关卡stage += 1if stage > num_stage:breakshow_switch_stage(screen, 630, 630, stage)# 该关卡坦克总数量enemytanks_total = min(stage * 18, 80)# 场上存在的敌⽅坦克总数量enemytanks_now = 0# 场上可以存在的敌⽅坦克总数量enemytanks_now_max = min(max(stage * 2, 4), 8)# 精灵组,独⽴运⾏的动画组tanksGroup = pygame.sprite.Group()mytanksGroup = pygame.sprite.Group()enemytanksGroup = pygame.sprite.Group()bulletsGroup = pygame.sprite.Group()mybulletsGroup = pygame.sprite.Group()enemybulletsGroup = pygame.sprite.Group()myfoodsGroup = pygame.sprite.Group()# ⾃定义事件# -⽣成敌⽅坦克事件genEnemyEvent = EREVENTpygame.time.set_timer(genEnemyEvent, 100)# -敌⽅坦克静⽌恢复事件recoverEnemyEvent = EREVENTpygame.time.set_timer(recoverEnemyEvent, 8000)# -我⽅坦克⽆敌恢复事件noprotectMytankEvent = EREVENTpygame.time.set_timer(noprotectMytankEvent, 8000)# 关卡地图map_stage = scene.Map(stage)# 我⽅坦克tank_player1 = tanks.myTank(1)tanksGroup.add(tank_player1)mytanksGroup.add(tank_player1)if num_player > 1:tank_player2 = tanks.myTank(2)tanksGroup.add(tank_player2)mytanksGroup.add(tank_player2)is_switch_tank = Trueplayer1_moving = Falseplayer2_moving = False# 为了轮胎的动画效果time = 0# 敌⽅坦克for i in range(0, 3):if enemytanks_total > 0:enemytank = tanks.enemyTank(i)tanksGroup.add(enemytank)enemytanksGroup.add(enemytank)enemytanks_now += 1enemytanks_total -= 1# ⼤本营myhome = home.Home()# 出场特效appearance_img = pygame.image.load("./images/others/appear.png").convert_alpha() appearances = []appearances.append(appearance_img.subsurface((0, 0), (48, 48)))appearances.append(appearance_img.subsurface((48, 0), (48, 48)))appearances.append(appearance_img.subsurface((96, 0), (48, 48)))# 关卡主循环while True:if is_gameover is True:breakif enemytanks_total < 1 and enemytanks_now < 1:is_gameover = Falsebreakfor event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == genEnemyEvent:if enemytanks_total > 0:if enemytanks_now < enemytanks_now_max:enemytank = tanks.enemyTank()if not pygame.sprite.spritecollide(enemytank, tanksGroup, False, None):tanksGroup.add(enemytank)enemytanksGroup.add(enemytank)enemytanks_now += 1enemytanks_total -= 1if event.type == recoverEnemyEvent:for each in enemytanksGroup:each.can_move = Trueif event.type == noprotectMytankEvent:for each in mytanksGroup:mytanksGroup.protected = False# 检查⽤户键盘操作key_pressed = pygame.key.get_pressed()# 玩家⼀# WSAD -> 上下左右# 空格键射击if key_pressed[pygame.K_w]:tanksGroup.remove(tank_player1)tank_player1.move_up(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)tanksGroup.add(tank_player1)player1_moving = Trueelif key_pressed[pygame.K_s]:tanksGroup.remove(tank_player1)tank_player1.move_down(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome) tanksGroup.add(tank_player1)player1_moving = Trueelif key_pressed[pygame.K_a]:tanksGroup.remove(tank_player1)tank_player1.move_left(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)tanksGroup.add(tank_player1)player1_moving = Trueelif key_pressed[pygame.K_d]:tanksGroup.remove(tank_player1)tank_player1.move_right(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)tanksGroup.add(tank_player1)player1_moving = Trueelif key_pressed[pygame.K_SPACE]:if not tank_player1.bullet.being:fire_sound.play()tank_player1.shoot()# 玩家⼆# ↑↓←→ -> 上下左右# ⼩键盘0键射击if num_player > 1:if key_pressed[pygame.K_UP]:tanksGroup.remove(tank_player2)tank_player2.move_up(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome) tanksGroup.add(tank_player2)player2_moving = Trueelif key_pressed[pygame.K_DOWN]:tanksGroup.remove(tank_player2)tank_player2.move_down(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome) tanksGroup.add(tank_player2)player2_moving = Trueelif key_pressed[pygame.K_LEFT]:tanksGroup.remove(tank_player2)tank_player2.move_left(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome) tanksGroup.add(tank_player2)player2_moving = Trueelif key_pressed[pygame.K_RIGHT]:tanksGroup.remove(tank_player2)tank_player2.move_right(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome) tanksGroup.add(tank_player2)player2_moving = Trueelif key_pressed[pygame.K_KP0]:if not tank_player2.bullet.being:fire_sound.play()tank_player2.shoot()# 背景screen.blit(bg_img, (0, 0))# ⽯头墙for each in map_stage.brickGroup:screen.blit(each.brick, each.rect)# 钢墙for each in map_stage.ironGroup:screen.blit(each.iron, each.rect)# 冰for each in map_stage.iceGroup:screen.blit(each.ice, each.rect)# 河流for each in map_stage.riverGroup:screen.blit(each.river, each.rect)# 树for each in map_stage.treeGroup:screen.blit(each.tree, each.rect)time += 1if time == 5:time = 0is_switch_tank = not is_switch_tank# 我⽅坦克if tank_player1 in mytanksGroup:if is_switch_tank and player1_moving:screen.blit(tank_player1.tank_0, (tank_player1.rect.left, tank_player1.rect.top))player1_moving = Falseelse:screen.blit(tank_player1.tank_1, (tank_player1.rect.left, tank_player1.rect.top))if tank_player1.protected:screen.blit(tank_player1.protected_mask1, (tank_player1.rect.left, tank_player1.rect.top))if num_player > 1:if tank_player2 in mytanksGroup:if is_switch_tank and player2_moving:screen.blit(tank_player2.tank_0, (tank_player2.rect.left, tank_player2.rect.top))player1_moving = Falseelse:screen.blit(tank_player2.tank_1, (tank_player2.rect.left, tank_player2.rect.top))if tank_player2.protected:screen.blit(tank_player1.protected_mask1, (tank_player2.rect.left, tank_player2.rect.top)) # 敌⽅坦克for each in enemytanksGroup:# 出⽣特效if each.born:if each.times > 0:each.times -= 1if each.times <= 10:screen.blit(appearances[2], (3 + each.x * 12 * 24, 3))elif each.times <= 20:screen.blit(appearances[1], (3 + each.x * 12 * 24, 3))elif each.times <= 30:screen.blit(appearances[0], (3 + each.x * 12 * 24, 3))elif each.times <= 40:screen.blit(appearances[2], (3 + each.x * 12 * 24, 3))elif each.times <= 50:screen.blit(appearances[1], (3 + each.x * 12 * 24, 3))elif each.times <= 60:screen.blit(appearances[0], (3 + each.x * 12 * 24, 3))elif each.times <= 70:screen.blit(appearances[2], (3 + each.x * 12 * 24, 3))elif each.times <= 80:screen.blit(appearances[1], (3 + each.x * 12 * 24, 3))elif each.times <= 90:screen.blit(appearances[0], (3 + each.x * 12 * 24, 3))else:each.born = Falseelse:if is_switch_tank:screen.blit(each.tank_0, (each.rect.left, each.rect.top))else:screen.blit(each.tank_1, (each.rect.left, each.rect.top))if each.can_move:tanksGroup.remove(each)each.move(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)tanksGroup.add(each)# 我⽅⼦弹for tank_player in mytanksGroup:if tank_player.bullet.being:tank_player.bullet.move()screen.blit(tank_player.bullet.bullet, tank_player.bullet.rect)# ⼦弹碰撞敌⽅⼦弹for each in enemybulletsGroup:if each.being:if pygame.sprite.collide_rect(tank_player.bullet, each):tank_player.bullet.being = Falseeach.being = FalseenemybulletsGroup.remove(each)breakelse:enemybulletsGroup.remove(each)# ⼦弹碰撞敌⽅坦克for each in enemytanksGroup:if each.being:if pygame.sprite.collide_rect(tank_player.bullet, each):if each.is_red == True:myfood = food.Food()myfood.generate()myfoodsGroup.add(myfood)each.is_red = Falseeach.blood -= 1each.color -= 1if each.blood < 0:bang_sound.play()each.being = FalseenemytanksGroup.remove(each)enemytanks_now -= 1tanksGroup.remove(each)else:each.reload()tank_player.bullet.being = Falsebreakelse:enemytanksGroup.remove(each)tanksGroup.remove(each)# ⼦弹碰撞⽯头墙if pygame.sprite.spritecollide(tank_player.bullet, map_stage.brickGroup, True, None): tank_player.bullet.being = False# ⼦弹碰钢墙if tank_player.bullet.stronger:if pygame.sprite.spritecollide(tank_player.bullet, map_stage.ironGroup, True, None): tank_player.bullet.being = Falseelse:if pygame.sprite.spritecollide(tank_player.bullet, map_stage.ironGroup, False, None): tank_player.bullet.being = False# ⼦弹碰⼤本营if pygame.sprite.collide_rect(tank_player.bullet, myhome):tank_player.bullet.being = Falsemyhome.set_dead()is_gameover = True# 敌⽅⼦弹for each in enemytanksGroup:if each.being:if each.can_move and not each.bullet.being:enemybulletsGroup.remove(each.bullet)each.shoot()enemybulletsGroup.add(each.bullet)if not each.born:if each.bullet.being:each.bullet.move()screen.blit(each.bullet.bullet, each.bullet.rect)# ⼦弹碰撞我⽅坦克for tank_player in mytanksGroup:if pygame.sprite.collide_rect(each.bullet, tank_player):if not tank_player.protected:bang_sound.play()tank_player.life -= 1if tank_player.life < 0:mytanksGroup.remove(tank_player)tanksGroup.remove(tank_player)if len(mytanksGroup) < 1:is_gameover = Trueelse:tank_player.reset()each.bullet.being = FalseenemybulletsGroup.remove(each.bullet)break# ⼦弹碰撞⽯头墙if pygame.sprite.spritecollide(each.bullet, map_stage.brickGroup, True, None): each.bullet.being = FalseenemybulletsGroup.remove(each.bullet)# ⼦弹碰钢墙if each.bullet.stronger:if pygame.sprite.spritecollide(each.bullet, map_stage.ironGroup, True, None): each.bullet.being = Falseelse:if pygame.sprite.spritecollide(each.bullet, map_stage.ironGroup, False, None): each.bullet.being = False# ⼦弹碰⼤本营if pygame.sprite.collide_rect(each.bullet, myhome):each.bullet.being = Falsemyhome.set_dead()is_gameover = Trueelse:enemytanksGroup.remove(each)tanksGroup.remove(each)# 家screen.blit(myhome.home, myhome.rect)# ⾷物for myfood in myfoodsGroup:if myfood.being and myfood.time > 0:screen.blit(myfood.food, myfood.rect)myfood.time -= 1for tank_player in mytanksGroup:if pygame.sprite.collide_rect(tank_player, myfood):# 消灭当前所有敌⼈if myfood.kind == 0:for _ in enemytanksGroup:bang_sound.play()enemytanksGroup = pygame.sprite.Group()enemytanks_total -= enemytanks_nowenemytanks_now = 0# 敌⼈静⽌if myfood.kind == 1:for each in enemytanksGroup:each.can_move = False# ⼦弹增强if myfood.kind == 2:add_sound.play()tank_player.bullet.stronger = True# 使得⼤本营的墙变为钢板if myfood.kind == 3:map_stage.protect_home()# 坦克获得⼀段时间的保护罩if myfood.kind == 4:add_sound.play()for tank_player in mytanksGroup:tank_player.protected = True# 坦克升级if myfood.kind == 5:add_sound.play()tank_player.up_level()# 坦克⽣命+1if myfood.kind == 6:add_sound.play()tank_player.life += 1myfood.being = FalsemyfoodsGroup.remove(myfood)breakelse:myfood.being = FalsemyfoodsGroup.remove(myfood)pygame.display.flip()clock.tick(60)if not is_gameover:show_end_interface(screen, 630, 630, True)else:show_end_interface(screen, 630, 630, False)if __name__ == '__main__':main()4)效果展⽰视频展⽰效果——【Pygame实战】经典的坦克⼤战游戏,勾起童年⽆限回忆!静态截图效果——游戏界⾯:第⼀关单⼈游戏:双⼈第⼀关游戏:总结好啦!中⽂版的坦克⼤战都看的懂了哈,想咋玩⼉咋玩⼉。
C语⾔完整游戏项⽬坦克⼤战详细代码话不多说我们今天就来创造出属于我们⾃⼰的《坦克⼤战》,GOGOGO直接开始吧这次的源码⽐较详细,我分了好⼏个cpp⽂件,思路更加的清晰,请耐⼼⽤⼼的观看⾸先就是我们载⼊图⽚的函数tupian.cpp# include "tanke.h"障碍物void LaoWang(int * tilex, int * tiley){IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32 , 32 , &img, 32 * 5, 0 );}void tileHong(int * tilex, int * tiley){IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32, 32, &img, 32 * 0, 0 );return;}void tileLv(int * tilex, int * tiley){IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32, 32, &img, 32 * 2, 0 );return;}void tileBai(int * tilex, int * tiley){IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32, 32, &img, 32 * 1, 0 );return;}IMAGE img;loadimage(&img, _T("res\\tile.bmp"));putimage(*tilex, *tiley, 32, 32, &img, 32 * 3, 0 ); }//物品void FaZhang(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\fazhang.jpg"));putimage(*wupinx, *wupiny, 24, 24, &img, 0, 0 ); }void ShouQiang(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\shouqiang.jpg"));putimage(*wupinx, *wupiny, 24, 24, &img, 0, 0 ); }void ShangDian(int *wupinx, int *wupiny){IMAGE img;loadimage(&img,_T("res\\shangdian.jpg"));putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 ); }void YaoShui(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\yaoshui.jpg"));putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 ); }void DunPai(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\dunpai.jpg"));putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 ); }void XieZi(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\ iezi.jpg"));putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 ); }void Boss(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\boss.jpg"));putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 ); }void BigBoss(int *wupinx, int *wupiny){IMAGE img;loadimage(&img, _T("res\\bigboss.jpg"));putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 ); }接下来是初始化的函数waiyuan.cpp# include "tanke.h"{setcolor(GREEN);settextstyle(0, 0, ("宋体"));char c2[20] = "⾃⼰⽣命值:";outtextxy(0, 20, c2);char c3[10] ;sprintf(c3, _T("%.1f"), 100* (60 - *j) / 60.0);outtextxy(90, 20, c3);}void DShengMing(int * d,int *k){setcolor(GREEN);settextstyle(0, 0, ("宋体"));char c2[20] = "敌⼈⽣命值:";outtextxy(0, 0, c2);char c3[10] ;sprintf(c3, _T("%.1f"), 100* (60 - *d) / 60.0);outtextxy(90, 0, c3);char c4[40] = "恭喜~! 现在起⾦币到2200有惊喜!";//胜利 if ( *k >= 8000 ){setcolor(YELLOW);settextstyle(30, 0, ("宋体"));outtextxy(150, 0, c4);}}void Gold(int * gold){setcolor(GREEN);settextstyle(0, 0, ("宋体"));char c2[20] = "⾦币:";outtextxy(0, 40, c2);char c3[10] ;sprintf(c3, _T("%d"), *gold);outtextxy(40, 40, c3);}void start(void){initgraph(200, 130);TCHAR s1[10]="坦克⼤战";TCHAR s2[30]="按A 开始游戏按B 退出游戏";TCHAR s3[30]="按W S A D控制⽅向";TCHAR s4[20]="按J 发射⼦弹";TCHAR s5[20]="按C 看攻略";outtextxy(70, 0, s1);outtextxy(0, 110, s2);outtextxy(60, 90, s5);outtextxy(55, 30, s4);outtextxy(35, 60, s3);while (true){Sleep(500);if (GetAsyncKeyState('A')){BeginBatchDraw();closegraph();initgraph(640, 480);Sleep(200);Quit();return ;}if (GetAsyncKeyState('C'))GongLue();}}}void GongLue(void){initgraph(450, 300);TCHAR s1[20]="游戏攻略:";TCHAR s2[50]="再打坦克之前先吃法杖打掉⽩⾊砖块,";TCHAR s3[50]="这样敌坦克打⽩⾊就不能回⾎了,boss更应如此。
采用双向循环链表作太极形式旋转的图案,图案的变化采用刷新屏幕的方法做到。
首先,建立一个二维字符数组,保存图形数据,然后通过更改该二维字符数组和清屏,再显示,做到图像的变化。
用它提示坦克大战游戏的操作方法。
再显示问题解决后,通过无回显读取函数getch();和输入流检查函数kbhit();读取输入的方向键或回车键进入下一页面。
用同样的方法,读取方向键和回车键,更改内部图案方法,使用户选择关:第一关:仅有4个坦克同时作战,总数为30个!第二关:仅有5个坦克同时作战,总数为40个!第三关:有6个坦克同时作战,总数为50个!第四关:有7个坦克同时作战,总数为60个!第五关:有8个坦克同时作战,总数为70个!选择关卡后,进入下一页面:进行相关提示。
最后进入游戏界面。
也可以通过按左方向键返回上一级重新选择!!!第一关到第三关:都是宽80,高42的。
最后两关:都是宽160,高42的。
右击标题栏选择属性,进入设置。
接着就是进入最重要的坦克大战游戏了:这时采用的就不是刷新屏幕能解决的问题了。
由于界面太大,不能刷新屏幕,仅能用光标移动函数来更改图像。
光标移动函数为gotoxy(int ,int );读者自己查看定义。
采用同样输入流读取方法。
接着是游戏规则,操作者用W.w.A.a.S.s.D.d移动坦克,空格是停下。
用方向键改变炮筒的方向,回车键是开火。
但当自己的炮弹还在运行时,不得开火!!!用链表保存每一辆坦克(包括主坦克)的数据。
电脑控制的坦克,被控制者的坦克炮弹击中,就会发生爆炸,并死亡。
当界面上的所有坦克小于特定值时,如果内部还有未出现的坦克,就会在上方的随机位置,产生新坦克。
如果操作者的坦克被击中,它的HP(我称为生命值)就会减一点。
刚开始游戏时的HP=5;但升级进入下一关时保留上一局的最后分数和HP。
不会重置。
但游戏中有补血包,可以补充生命值(HP)补血包每90秒出现一次,出现的时间长为60秒。
如果在这期间操作者的坦克运动到它的位置,补血包将给操作者的坦克补血。
坦克大战游戏编程实现游戏编程实现坦克大战坦克大战是一款经典的电子游戏,在游戏中,玩家将控制一个坦克,通过操作坦克的移动和攻击,与其他玩家或电脑进行战斗。
本文将介绍如何使用编程语言实现坦克大战游戏。
设计思路在实现坦克大战游戏之前,首先需要明确游戏的基本要素和规则。
玩家将操作一个坦克,通过键盘或操纵杆控制坦克的移动和攻击。
游戏画面由地图、坦克、子弹等元素构成。
坦克可以向前、向后、向左、向右移动,可以发射子弹进行攻击。
玩家需要躲避敌方坦克的攻击,同时尽可能击败敌方坦克。
编程实现坦克的移动和攻击可以通过编程语言来实现。
以下是使用Java语言来编写坦克大战游戏的示例代码:```javapublic class TankGame extends JFrame {private Tank tank; // 玩家坦克private List<Tank> enemyTanks; // 敌方坦克列表private List<Bullet> bullets; // 子弹列表public TankGame() {// 初始化游戏窗口this.setSize(800, 600);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);// 初始化玩家坦克tank = new Tank(400, 500);// 初始化敌方坦克列表enemyTanks = new ArrayList<>();enemyTanks.add(new Tank(100, 100));enemyTanks.add(new Tank(300, 200));// 初始化子弹列表bullets = new ArrayList<>();// 添加键盘监听器,控制坦克移动和攻击this.addKeyListener(new KeyListener() {@Overridepublic void keyPressed(KeyEvent e) {int keycode = e.getKeyCode();switch (keycode) {case KeyEvent.VK_UP:tank.moveUp();break;case KeyEvent.VK_DOWN: tank.moveDown();break;case KeyEvent.VK_LEFT: tank.moveLeft();break;case KeyEvent.VK_RIGHT: tank.moveRight();break;case KeyEvent.VK_SPACE: bullets.add(tank.fire());break;default:break;}// 重新绘制游戏画面repaint();}@Overridepublic void keyReleased(KeyEvent e) { }@Overridepublic void keyTyped(KeyEvent e) { }});}// 绘制游戏画面public void paint(Graphics g) {super.paint(g);// 绘制玩家坦克tank.draw(g);// 绘制敌方坦克for (Tank enemyTank : enemyTanks) { enemyTank.draw(g);}// 绘制子弹for (Bullet bullet : bullets) {bullet.draw(g);}}public static void main(String[] args) {new TankGame();}}```在上述示例代码中,我们创建了一个继承自JFrame的主窗口,并在窗口中添加了一个玩家坦克、敌方坦克和子弹的列表。
坦克大战设计报告学院班级学号姓名成绩一、设计思路1.要达到的目的培养学生综合利用VB语言进行程序设计的能力,主要是培养学生的时钟控制和综合编程能力。
⏹要求使用面向对象和结构化程序设计的编程思路⏹能通过键盘W(上)、S(下)、A(左)、D(右)移动坦克。
⏹可以通过上述按键随时改变坦克的方向。
⏹炮身和炮筒分别为标签控件◆当坦克移动到窗体边框时停止前进,但能改变方向。
◆按键J时可以按炮筒方向发射炮弹(炮弹为标签控件)。
二、部分程序关键源代码及注释1Private Sub Form_KeyPress(KeyAscii As Integer)If KeyAscii = 106 ThenLa.Enabled = FalseLb.Enabled = False (当发炮弹时坦克不能再移动以免跑到炮弹前)2If La.Top - Lb.Top = 800 And Lb.Left - La.Left = 300 ThenLc.Top = La.Top - 800Lc.Left = La.Left + 300Lc.V isible = TrueTimer1.Enabled = TrueTimer2.Enabled = False (只运行一个时钟)Timer3.Enabled = FalseTimer4.Enabled = False3 ElseIf KeyAscii = 119 ThenLa.Enabled = TrueLb.Enabled = TrueLb.Left = La.Left + 300Lb.Top = La.Top – 800 (方向键控制方向和移动)Lb.Width = 200Lb.Height = 800If Lb.Top = 0 ThenLb.Top = 0ElseLa.Top = La.Top - 200Lb.Top = Lb.Top - 200End IfSub4Private Sub Form_Load()Lc.V isible = False (开始炮弹不可见)End Sub5Private Sub Timer1_Timer()If Lc.Top < 0 ThenLc.V isible = FalseTimer1.Enabled = False (当到达边界时时钟控件停止运行,炮弹消失)Else 'If Lc.Top <= 7600 ThenLc.Top = Lc.Top - 200Lc.Left = Lc.LeftEnd IfEnd Sub三、设计方案的完善及目前存在的问题1.设计方案要完善的地方要完善的地方是创新,做的时候感觉要尽快完成基本要求,没太考虑创新,做完之后感觉创新与基本要求的程序代码很矛盾,余地太少,还有要参加其他考试,时间也不允许,粗劣之处可能会很多。
坦克大战设计报告一、设计思路1.要达到的目的培养学生综合利用VB语言进行程序设计的能力,主要是培养学生的时钟控制和综合编程能力。
⏹要求使用面向对象和结构化程序设计的编程思路⏹能通过键盘W(上)、S(下)、A(左)、D(右)移动坦克。
⏹可以通过上述按键随时改变坦克的方向。
⏹炮身和炮筒分别为标签控件◆当坦克移动到窗体边框时停止前进,但能改变方向。
按键J时可以按炮筒方向发射炮弹(炮弹为标签控件)。
2.关键问题的解决①坦克由两个控件构成label1作为坦克的主体部分,label2作为炮管。
②坦克的移动通过窗体的keypress事件接受键盘按键,w键控制坦克向上,s键控制坦克向下,a键控制坦克向左,d键控制坦克向右。
炮弹的发射由键盘事件控制,单击j键发射炮弹。
利用timer控件控制炮弹延直线移动(改变炮弹的top和left属性),当炮弹击中边缘后消失。
③每当利用keypress事件触发坦克的发炮,首先判断是否炮弹在运行当中,如果运行当中则不进行响应。
炮弹的运动是由timer控件控制,发炮时启动timer事件。
二、程序流程图三、部分程序关键源代码及注释1 If La.Top - Lb.Top = 900 And Lb.Left - La.Left = 300 ThenLc.Top = La.Top - 900Lc.Left = La.Left + 300Lc.Visible = TrueTimer1.Enabled = True (向某一方向发炮时只运行一个时钟)Timer2.Enabled = FalseTimer3.Enabled = FalseTimer4.Enabled = False2 ElseIf keyascii = 97 ThenLa.Enabled = TrueLb.Enabled = TrueLb.Left = La.Left - 900Lb.Top = La.Top + 300 (方向键控制转向和移动)La.Height = 800La.Width = 900 (转向时Lable重新定位)Lb.Width = 900Lb.Height = 200If Lb.Left <= 0 ThenLb.Enabled = FalseLa.Enabled = FalseElseLa.Left = La.Left – 100 (炮筒和炮身相对位置不变的移动)Lb.Left = Lb.Left - 100End If3 Private Sub Timer2_Timer()Do While Lc.Left > 0Lc.Left = Lc.Left - 2Lc.Top = Lc.TopIf Lc.Left > Ld.Left And Lc.Left < Ld.Left + Ld.Width And Lc.Top > Ld.Top And Lc.Top < Ld.Top + Ld.Height ThenLd.Visible = FalseLc.Visible = FalseEnd IfLoopLc.Visible = False (当炮弹到达边界时时钟停止运行,炮弹消失)Timer2.Enabled = FalseEnd Sub四、设计方案的完善及目前存在的问题1.设计方案要完善的地方①×××××②×××××③×××××。
坦克大战源码根据韩顺平老师视频所作/**坦克大战* 防重叠*/package ;import .*;import .*;import class MyTankGame5 extends JFrame implements ActionListener{quals("newgame")){quals("exit")){quals("saveExit")){quals("continue")){etImage"/"));image2=().getImage"/"));image3=().getImage"/"));etNodesAndEnemy();etSpeed();etSpeed(0);etSpeed();etSpeed(0);边的矩形(x, y, 5, 30,false);边的矩形(x, y, 5, 30,false);etSpeed();etSpeed(0);etSpeed(esp1);;import Node{int x;int y;int direct;public Node(int x,int y,int direct){=x;=y;=direct;}}//记录坦克信息的类class Recorder{//记录敌人和我的坦克数量private static int enlife=20;private static int mylife=10;private static int deadenemy=0;private static FileWriter fw=null;private static BufferedWriter bw=null;private static FileReader fr=null;private static BufferedReader br=null;private static Vector<EnemyTank> ets=new Vector<EnemyTank>();//从文件恢复记录static Vector<Node> nodes=new Vector<Node>();//完成读取public Vector<Node> getNodesAndEnemy(){try {//创建fr=new FileReader("d:\\chen\\");br=new BufferedReader(fr);String n="";//先读取第一行n=();deadenemy=(n);//用split分割从第二行开始取while((n=())!=null){//字符串str中从第一个字符起,//每遇到一个空格则切割为一个元素,//放入[]xyd数组中String []xyd=(" ");//这里的空格数与keepRecAndEnemyTank()中//写入(String record=+" "++" "+;)//!!!!!!!!!!!!!! //的空格数要对应,否则会报错!Node node1=new Node(xyd[0]),(xyd[1]),(xyd[2]));(node1);}} catch (IOException e) {// TODO Auto-generated catch block();}finally{//关闭文件//谁先开,谁后关!try {();();} catch (IOException e) {// TODO Auto-generated catch block();}}return nodes;}public static Vector<EnemyTank> getEts() {return ets;}public static void setEts(Vector<EnemyTank> ets) { = ets;}//保存击毁敌人的数目和敌人坐标,存盘退出public static void keepRecAndEnemyTank(){try {//创建fw=new FileWriter("d:\\chen\\");bw=new BufferedWriter(fw);(deadenemy+"\r\n");//保存当前敌人的数目和坐标for(int i=0;i<();i++){//取出第一个坦克EnemyTank et=(i);//保存活的if{String record=+" "++" "+;//写入(record+"\r\n");}}} catch (IOException e) {// TODO Auto-generated catch block();}finally{//关闭文件//谁先开,谁后关!try {();();} catch (IOException e) {// TODO Auto-generated catch block();}}}//保存击毁的敌人数目public static void keepRecording(){try {//创建fw=new FileWriter("d:\\chen\\");bw=new BufferedWriter(fw);(deadenemy+"\r\n");} catch (IOException e) {// TODO Auto-generated catch block();}finally{//关闭文件//谁先开,谁后关!try {();();} catch (IOException e) {// TODO Auto-generated catch block();}}}//读取出上一局击毁的敌人数目public static void getRecording(){try {//创建fr=new FileReader("d:\\chen\\");br=new BufferedReader(fr);String n=();deadenemy=(n);} catch (IOException e) {// TODO Auto-generated catch block();}finally{//关闭文件//谁先开,谁后关!try {();();} catch (IOException e) {// TODO Auto-generated catch block();}}}public static int getEnlife() {return enlife;}public static void setEnlife(int enlife) {= enlife;}public static int getMylife() {return mylife;}public static void setMylife(int mylife) {= mylife;}//减少数量public static void reduceMylife() {;}public static void reduceEnlife() {;}public static void deadenemy() {++;public static int getDeadenemy() {return deadenemy;}}class Tank{//坦克的横坐标int x=0;//纵坐标int y=0;//暂停速度int tempspeed;public int getTempspeed() {return tempspeed;}public void setTempspeed(int tempspeed) { = tempspeed;}//颜色int color;boolean isLive=true;public boolean isLive() {return isLive;}public void setLive(boolean isLive) {= isLive;}public int getColor() {return color;}public void setColor(int color) {= color;public int getX() {return x;}public void setX(int x) {= x;}public int getY() {return y;}public void setY(int y) {= y;}public Tank (int x,int y){=x;=y;}//坦克方向//0上,1右,2下,3左int direct=0;public int getDirect() {return direct;}public void setDirect(int direct) {= direct;}//坦克的速度int speed=3;public int getSpeed() {return speed;}public void setSpeed(int speed) {= speed;}}//敌方坦克class EnemyTank extends Tank implements Runnable{//设敌人可以复活10次static int newlife=10;//计数器static int counter=0;//让坦克随机产生步数//每次走多少步int steps=(int)()*50+10);int sleeptime=200; //睡眠时间//定义一个向量存放敌人子弹Vector<Shot> ss1=new Vector<Shot>();//在敌人创建和子弹死亡后在创建子弹public EnemyTank(int x,int y){super(x,y);}//定义一个向量,访问MyPanel的所有敌人坦克Vector<EnemyTank> ets=new Vector<EnemyTank>();//得到MyPanel的所有敌人坦克public void setEts(Vector<EnemyTank> vv){=vv;}//判断是否撞到了别的敌人坦克public boolean isTouchotherEnemy(){boolean b=false;//判断switch{case 0://向上//取出敌人所有坦克for(int i=0;i<();i++){//取出第一个坦克EnemyTank et=(i);//如果不是自己if(et!=this){//如果敌人方向是向上或者向下if==0||==2){if>=&&<=+20&&>=&&<=+30){return true;}if+20>=&&+20<=+20&&>=&&<=+30){return true;}}//如果敌人方向是向左或者向右if==1||==3){if>=&&<=+30&&>=&&<=+20){return true;}if+20>=&&+20<=+30&&>=&&<=+20){return true;}}}}break;case 1://向右//取出敌人所有坦克for(int i=0;i<();i++){//取出第一个坦克EnemyTank et=(i);//如果不是自己if(et!=this){//如果敌人方向是向上或者向下if==0||==2){if+30>=&&+30<=+20&&>=&&<=+30){return true;}if+30>=&&+30<=+20&&+20>=&&+20<=+30){return true;}}//如果敌人方向是向左或者向右if==1||==3){if>=&&<=+30&&>=&&<=+20){return true;}if+30>=&&+30<=+30&&+20>=&&+20<=+20){return true;}}}}break;case 2://向下//取出敌人所有坦克for(int i=0;i<();i++){//取出第一个坦克EnemyTank et=(i);//如果不是自己if(et!=this){//如果敌人方向是向上或者向下if==0||==2){if>=&&<=+20&&+30>=&&+30<=+30){return true;}if+20>=&&+20<=+20&&+30>=&&+30<=+30){return true;}}//如果敌人方向是向左或者向右if==1||==3){if>=&&<=+30&&+30>=&&+30<=+20){return true;}if+20>=&&+20<=+30&&+30>=&&+30<=+20){return true;}}}}break;case 3://向左//取出敌人所有坦克for(int i=0;i<();i++){//取出第一个坦克EnemyTank et=(i);//如果不是自己if(et!=this){//如果敌人方向是向上或者向下if==0||==2){if>=&&<=+20&&>=&&<=+30){return true;}if>=&&<=+20&&+20>=&&+20<=+30){return true;}}//如果敌人方向是向左或者向右if==1||==3){if>=&&<=+30&&>=&&<=+20){return true;}if>=&&<=+30&&+20>=&&+20<=+20){return true;}}}}break;}return b;}public void run() {// TODO Auto-generated method stubwhile(true){switch{case 0://继续让他再走几步for(int i=0;i<steps;i++){if(y>0&&!isTouchotherEnemy()){y-=speed;}// //撞到墙或者队友就转弯||isTouchotherEnemy()// else if(y<=0)// {// //让坦克变向// =(direct+1)%4;// }try {(sleeptime);} catch (InterruptedException e) {// TODO Auto-generated catch block();}}break;case 1://继续让他再走几步for(int i=0;i<steps;i++){if(x<&&!isTouchotherEnemy()){x+=speed;}// //撞到墙或者队友就转弯// else if(x>=// {// //让坦克变向// =(direct+1)%4;// }try {(sleeptime);} catch (InterruptedException e) {// TODO Auto-generated catch block();}}break;case 2://继续让他再走几步for(int i=0;i<steps;i++){if(y<&&!isTouchotherEnemy()){y+=speed;}//撞到墙或者队友就转弯// else if(y>=// {// //让坦克变向// =(direct+1)%4;// }try {(sleeptime);} catch (InterruptedException e) {// TODO Auto-generated catch block();}}break;case 3://继续让他再走几步for(int i=0;i<steps;i++){if(x>0&&!isTouchotherEnemy()){x-=speed;}// //撞到墙或者队友就转弯// else if(x<=0)// {// //让坦克变向// =(direct+1)%4;// }try {(sleeptime);} catch (InterruptedException e) {// TODO Auto-generated catch block();}}break;}//判断是否死亡,是否暂停if==false||=={//退出线程break;}//让坦克随机产生方向=(int)()*4);}}}//我的坦克class Hero extends Tank{//设我可以复活3次static int newlife=10;//计数器static int counter=0;Vector<Shot> ss=new Vector<Shot>();//子弹Shot s=null;public Hero(int x,int y){super(x,y);}//开火public void shotEnemy(){switch{case 0:s=new Shot(x+9,y-10,0);(s);break;case 1:s=new Shot(x+35,y+9,1);(s);break;case 2:s=new Shot(x+10,y+35,2);(s);break;case 3:s=new Shot(x-9,y+9,3);(s);break;}//创建线程对象Thread t1=new Thread(s);//启动();}//坦克向上移动public void moveUp(){if(y>0&&{y-=speed;}}//坦克向右移动public void moveRight(){if(x<&&{x+=speed;}}//坦克向下移动public void moveDown(){if(y<&&{y+=speed;}}//坦克向左移动public void moveLeft(){if(x>0&&{x-=speed;}}}//炸弹类class Bomb{//定义炸弹坐标int x,y;//炸弹生命int life=3;boolean isLive=true;public Bomb(int x,int y){=x;=y;}//减少生命值public void lifeDown(){if(life>0){life--;}else{=false;}}}//子弹类class Shot implements Runnable{//坐标int x;int y;int direct;int speed=5;public int getDirect() {return direct;}public void setDirect(int direct) {= direct;}public int getSpeed() {return speed;}public void setSpeed(int speed) {= speed;}//是否还活着boolean isLive=true;public Shot(int x,int y,int direct){=x;=y;=direct;}public void run(){while(true){try {(50);} catch (InterruptedException e) {// TODO Auto-generated catch block();}switch(direct){case 0://上方向y-=speed;break;case 1://向右x+=speed;break;case 2://向下y+=speed;break;case 3://向左x-=speed;break;}//"子弹坐标:"+"("+x+","+y+")");//子弹何时死亡?//判断该子弹是否碰到窗口边缘if(x<0||x>||y<0||y>{=false;break;}}}}//播放声音的类class AePlayWave extends Thread {private String filename;public AePlayWave(String wavfile){filename = wavfile;}public void run() {File soundFile = new File(filename);AudioInputStream audioInputStream = null;try {audioInputStream = (soundFile);} catch (Exception e1) {();return;}AudioFormat format = ();SourceDataLine auline = null;info = new , format);try {auline = (SourceDataLine) (info);(format);} catch (Exception e) {();return;}();int nBytesRead = 0;//这是缓冲byte[] abData = new byte[512];try {while (nBytesRead != -1){nBytesRead = (abData, 0, ;if (nBytesRead >= 0)(abData, 0, nBytesRead);}} catch (IOException e) {();return;} finally {();();}}}。
using System;using System.Collections.Generic;using System.Text;using System.Drawing; //addusing System.Collections;//addnamespace 坦克{class Tank{private int width; //坦克的宽度private int height; //坦克的高度private int top; //坦克位置的纵坐标private int left; //坦克位置的横坐标private int type; //坦克的类型(2---5敌方,6己方)private int direct; //0--上,1--下,2--左,3--右public ArrayList bList=new ArrayList();//子弹序列public Tank(int tank_type)//构造函数{Random r = new Random();this.direct = r.Next(0, 4);//产生0—3的数this.width = 32;this.height = 32;this.left = r.Next(0, 1);//产生0—9的数this.top = r.Next(0, 1);//产生0—9的数this.type = tank_type;}public int Top//Top属性{get{return top;}set{if (top >= 0 && top <= 9){top = value;//if (top == 0 || top == 9) newDirect();}}}public int Type//坦克的类型属性{get{return type;}set{if (top >= 1 && top <= 5){type = value;}}}public int Left//Left属性{get{return left;}set{if (left >= 0 && left <= 9){left = value;//if (left == 0 || left == 9) newDirect();}}}public int Direct//Direct属性(坦克方向){get{return direct;}set{direct = value;}}public void newDirect()//改变方向{Random r = new Random();int new_Direct=r.Next(0, 4);//产生0—3的数while(this.direct == new_Direct)new_Direct = r.Next(0, 4);//产生0—3的数this.direct = new_Direct;}public void Draw(Graphics g,int type)//根据坦克类型选择不同图片{Image tankImage = Image.FromFile("BMP/ETANK1.BMP");if (type == 2) tankImage = Image.FromFile("BMP/ETANK2.BMP");if (type == 3) tankImage = Image.FromFile("BMP/ETANK3.BMP");if (type == 4) tankImage = Image.FromFile("BMP/ETANK4.BMP");if (type == 5) tankImage = Image.FromFile("BMP/ETANK1.BMP");if (type == 6) tankImage = Image.FromFile("BMP/MYTANK.BMP");//得到绘制这个坦克图形的在游戏面板中的矩形区域Rectangle destRect = new Rectangle(this.left * width, this.top * height, width,height);Rectangle srcRect = new Rectangle(direct * width, 0, width, height);g.DrawImage(tankImage,destRect,srcRect,GraphicsUnit.Pixel );}public void Explore(Graphics g)//坦克爆炸动画{//得到绘制这个坦克图形的在游戏面板中的矩形区域Rectangle destRect = new Rectangle(this.left * width, this.top * height, width, height);Rectangle srcRect = new Rectangle(0, 0, width, height);Image tankImage = Image.FromFile("BMP/explode1.bmp");g.DrawImage(tankImage, destRect, srcRect, GraphicsUnit.Pixel);tankImage = Image.FromFile("BMP/explode1.bmp");g.DrawImage(tankImage, destRect, srcRect, GraphicsUnit.Pixel);tankImage = Image.FromFile("BMP/explode2.bmp");g.DrawImage(tankImage, destRect, srcRect, GraphicsUnit.Pixel);PlaySound.Play("Sound/Explode.wav");}public void fire(){bullet b = new bullet(this.type);//根据坦克产生不同子弹b.Direct = this.Direct;//坦克的朝向b.Top = this.Top;b.Left = this.Left;//b.move();bList.Add(b);if(this.type==6) PlaySound.Play("Sound/Shoot.wav");//己方发射出声}public void MoveBullet(ref int [,]Map){for (int i = bList.Count-1; i>=0; i--)//遍历子弹序列//for (int i = 0; i < bList.Count;i++ ){bullet t = ((bullet)bList[i]);//移动以前if (t.Left < 0 || t.Left > 9 || t.Top < 0 || t.Top > 9)//超出边界{bList.RemoveAt(i); continue;//删除此颗子弹}if (Map[t.Left, t.Top] != 0 && Map[t.Left, t.Top]!= this.type )//已遇到坦克和墙等障碍物{bList.RemoveAt(i);//删除此颗子弹if (t.hitE(Map[t.Left, t.Top]))//击中对方坦克Map[t.Left, t.Top] = -1;//此处坦克被打中continue;}t.move();//移动以后if (t.Left < 0 || t.Left > 9 || t.Top < 0 ||t.Top > 9)//超出边界{bList.RemoveAt(i);continue;//删除此颗子弹}if (Map[t.Left, t.Top] != 0)//已遇到物体{bList.RemoveAt(i);//删除此颗子弹if (t.hitE(Map[t.Left, t.Top]))//击中对方坦克Map[t.Left, t.Top] = -1;//此处坦克被打中continue;}}}public void DrawBullet(Graphics g,int [,]Map)//画子弹{MoveBullet(ref Map);foreach (bullet t in bList)//遍历子弹序列t.Draw(g);}//public void NewPosition()//产生新坐标//{// Random r = new Random();// this.left = r.Next(0, 10);//产生0—9的数// this.top = r.Next(0, 10);//产生0—9的数//}//public bool ComparePosition(Tank s)//比较坦克位置//{// if (this.left == s.left && this.top == s.top)// return true;// else// return false;//}}}。