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

📄 hstank2.java

📁 1个简单的坦克战实现
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.* ; 
import javax.swing.* ; 
import java.awt.event.*; 
import java.util.EventListener; 
public class HsTank2 extends JFrame 
{ 
  HsTank2(String title) 
  { 
   this.setTitle(title) ; //标题
   this.setSize(620, 650) ; //
   this.setLocation(300 , 100) ; 
   this.setBackground(Color.WHITE) ; //背景颜色设置
   MyTank mp = new MyTank() ; 
   this.add(mp) ; //
   this.addKeyListener(mp) ;//主窗口添加键盘监听器(注册了的键盘事件监听接口,用于响应键盘事件)
   new Thread(mp).start() ; 
  } 
  public static void main(String[] args) 
  { 
   HsTank2 h = new HsTank2("坦克大战") ; 
   h.setVisible(true) ; //使可视化组建h(如窗口、面板等)可见
  } 
} 
//主战坦克 
class MyTank extends JPanel implements KeyListener , Runnable 
{ 
 int x = 280, y = 280 ;//坦克的初始位置 
 int direction = 1 ;//坦克的移动方向 
 int color = 0 ; 
 int colorf=0;
 int score = 0 ; //分数
 int difficult = 1 ; //设置游戏难度 
 int tankspeed = 10;//坦克的速度 
 int tankbullet = 4 ;//坦克的子弹速度 
 int tankfbullet = 4 ;//敌军的子弹速度 
 int life = 100 ;//生命
 long currenttime1;
 long currenttime2;
 int  bulletstatus=0;
 double bulletdelay=3.0;


 
 //子弹 
 int bulletx = 295 , bullety = 295 ; 
 int bulletx1 = 295 , bullety1 = -10 ; 
 int bulletx2 = 600 , bullety2 = 295 ; 
 int bulletx3 = 295 , bullety3 = 600 ; 
 int bulletx4 = -10 , bullety4 = 295 ;   
 //敌军坦克 
 int num = 5 ;//敌军坦克数量
 int[] xf = new int[num] ; //坦克X坐标
 int[] yf = new int[num] ; //坦克Y坐标
 int[] directionf = new int[num] ;//坦克方向
 int[] bulletxf = new int[num] ; 
 int[] bulletyf = new int[num] ; 
 int[] bulletxf1 = new int[num] ; 
 int[] bulletyf1 = new int[num] ;
 
 int[] bulletxf2 = new int[num] ; 
 int[] bulletyf2 = new int[num] ;

 int[] bulletxf3 = new int[num] ; 
 int[] bulletyf3 = new int[num] ;

 int[] bulletxf4 = new int[num] ; 
 int[] bulletyf4 = new int[num] ;
 
//构造函数,初始化敌军坦克的位置和状态 
 MyTank() 
 { 
  for (int i = 0; i<num; i++) 
  { 
   xf[i] = (int) (Math.random() * 560) ; //随机生成敌军坦克坐标
   yf[i] = (int) (Math.random() * 510+50) ; 
   bulletxf[i] = xf[i] + 15 ;  
   bulletyf[i] = yf[i] + 15 ; 
  } 

  for (int i = 0; i<num; i++) 
  { 
   bulletxf1[i] = 295 ; bulletyf1[i] = -10 ;
  
   bulletxf2[i] = 600 ; bulletyf2[i] = 295 ;
 
   bulletxf3[i] = 295 ; bulletyf3[i] = 600 ;
   
   bulletxf4[i] = -10 ; bulletyf4[i] = 295 ;
   
  } 
 } 
//主面版 
public void paint(Graphics g) 
{ 
 super.paint(g) ; 
 this.setBackground(Color.WHITE) ; 
 g.setColor(Color.red) ; 
 g.drawString("生命:" , 10 , 20 ) ; 
 g.fillRect(50 , 10 , life * 5 , 10) ; 
 g.drawRect(50 , 10 , 500 , 10) ; 
 g.drawString("得分:  "+ score , 10 , 40) ;
 g.drawString("难度:  "+ difficult , 110 , 40) ;
 g.drawString("坦克速度:  "+ tankspeed , 210 , 40) ;
 g.drawString("坦克子弹速度:  "+ tankbullet , 310 , 40) ; 
 g.drawString("坦克发弹间隔:  "+ bulletdelay+"秒" , 410 , 40) ;

 if(direction == 1) 
 { 
  g.setColor(Color.green) ; 
  g.fillRect(x , y , 40 , 40) ; //坦克主体
  switch (color % 2) 
  { 
   case 0: g.setColor(Color.red) ; break; 
   case 1: g.setColor(Color.black) ; break; 
  } 
    //坦克10个轮子
  g.fillOval(x - 5 , y - 5 , 10 , 10) ; //使用当前颜色填充外接指定矩形框的椭圆
                                      //x - 要填充椭圆的左上角的 x 坐标。 
                                      //y - 要填充椭圆的左上角的 y 坐标。 
                                      //width - 要填充椭圆的宽度。 
                                      //height - 要填充椭圆的高度。 

  g.fillOval(x - 5 , y + 5 , 10 , 10) ; //左2轮
  g.fillOval(x - 5 , y + 15 , 10 , 10) ; //左3轮
  g.fillOval(x - 5 , y + 25 , 10 , 10) ; //左4轮
  g.fillOval(x - 5 , y + 35 , 10 , 10) ; //左5轮
  g.fillOval(x + 35 , y - 5 , 10 , 10) ; //右1轮
  g.fillOval(x + 35 , y + 5 , 10 , 10) ; //右2轮
  g.fillOval(x + 35 , y + 15 , 10 , 10) ; //右3轮
  g.fillOval(x + 35 , y + 25 , 10 , 10) ; //右4轮
  g.fillOval(x + 35 , y + 35 , 10 , 10) ; //右5轮
  g.setColor(Color.black) ; 
  g.fillRect(x + 15 , y - 20 , 10 , 40) ; //坦克炮管
  g.setColor(Color.yellow) ;
  g.fillOval(x + 5 , y + 30 , 10 , 10) ; 
  g.fillOval(x + 25 , y + 30 , 10 , 10) ; 
 } 
 if(direction == 2) 
 { 
  g.setColor(Color.green) ; 
  g.fillRect(x , y , 40 , 40) ; 
  switch (color % 2) 
  { 
     case 0: g.setColor(Color.red) ; break; 
     case 1: 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) ; 
  g.setColor(Color.yellow) ;
  g.fillOval(x , y + 5 , 10 , 10) ; 
  g.fillOval(x , y + 25 , 10 , 10) ; 
 
 } 
 if(direction == 3) 
 { 
  g.setColor(Color.green) ; 
  g.fillRect(x , y , 40 , 40) ; 
  switch (color % 2) 
  { 
     case 0: g.setColor(Color.red) ; break; 
     case 1: 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) ; 
  g.setColor(Color.yellow) ;
  g.fillOval(x + 5 , y , 10 , 10) ; 
  g.fillOval(x + 25 , y , 10 , 10) ; 
 } 
 if(direction == 4) 
{ 
  g.setColor(Color.green) ; 
  g.fillRect(x , y , 40 , 40) ; 
  switch (color % 2) 
  { 
     case 0: g.setColor(Color.red) ; break; 
     case 1: 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) ; 
  g.setColor(Color.yellow) ;     
  g.fillOval(x + 30 , y + 5 , 10 , 10) ; 
  g.fillOval(x + 30 , y + 25 , 10 , 10) ; 
} 
  g.setColor(Color.black) ; 
  g.fillOval(bulletx , bullety , 10 , 10) ; 
  g.fillOval(bulletx1 , bullety1 , 10 , 10) ; 
  g.fillOval(bulletx2 , bullety2 , 10 , 10) ; 
  g.fillOval(bulletx3 , bullety3 , 10 , 10) ; 
  g.fillOval(bulletx4 , bullety4 , 10 , 10) ; 
for (int i = 0; i<num; i++) 
{ 
  if(directionf[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(directionf[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] + 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] , yf[i] + 5 , 10 , 10) ; 
  g.fillOval(xf[i] , yf[i] + 25 , 10 , 10) ; 
  } 
  if(directionf[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(directionf[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] + 15 , 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(bulletxf1[i] , bulletyf1[i] , 10 , 10 ) ; 
   g.fillOval(bulletxf2[i] , bulletyf2[i] , 10 , 10 ) ; 
   g.fillOval(bulletxf3[i] , bulletyf3[i] , 10 , 10 ) ; 
   g.fillOval(bulletxf4[i] , bulletyf4[i] , 10 , 10 ) ; 
 } 
} 
public void keyTyped(KeyEvent e) 
{ 
} 
//键盘控制坦克的移动,发弹 
public void keyPressed(KeyEvent e) 
{ 
 
 if(e.getKeyCode() == KeyEvent.VK_UP) 
 { 
  color ++ ;
  direction = 1 ;
  y = y - tankspeed ; 
  bullety = bullety - tankspeed ;
  if(y <= 50) 
  { 
   y = y + tankspeed ; 
   bullety = bullety + tankspeed ; 
  } 
 } 
 if(e.getKeyCode() == KeyEvent.VK_RIGHT) 
 {
  color ++ ;  
  direction = 2 ;
  x = x + tankspeed ; 
  bulletx = bulletx + tankspeed ; 
  if(x >= 560) 
  { 
   x = x - tankspeed ; 
   bulletx = bulletx - tankspeed ; 
  } 
 } 
 if(e.getKeyCode() == KeyEvent.VK_DOWN) 
 { 
  color ++ ; 
  direction = 3 ;
  y = y + tankspeed ; 
  bullety = bullety + tankspeed ;
  if(y >= 560) 
  { 
   y = y - tankspeed ; 
   bullety = bullety - tankspeed ; 
  } 
 } 
 if(e.getKeyCode() == KeyEvent.VK_LEFT) 
 { 
  color ++ ; 
  direction = 4 ;
  x = x - tankspeed ; 
  bulletx = bulletx - tankspeed ; 
  if(x <= 0) 
  { 
   x = x + tankspeed ; 
   bulletx = bulletx + tankspeed ; 
  } 
 } 

if(e.getKeyCode() == KeyEvent.VK_SPACE) 
{  
   if(bulletstatus%2==0)
   {
   	currenttime1=System.currentTimeMillis();
    if(direction == 1) 
    { 

     bulletx1 = bulletx ; 
     bullety1 = bullety ;
     bulletstatus++;
    }  
    if(direction == 2) 
    { 

     bulletx2 = bulletx ; 
     bullety2 = bullety ;
     bulletstatus++; 
    } 
    if(direction == 3) 
    { 

     bulletx3 = bulletx ; 
     bullety3 = bullety ; 
     bulletstatus++;
    } 
    if(direction == 4) 
    { 


     bulletx4 = bulletx ; 
     bullety4 = bullety ;
     bulletstatus++;
    } 
   }
   else
    {currenttime2=System.currentTimeMillis();
     long T=currenttime2-currenttime1;
     if(T>=1000*bulletdelay)
     {bulletstatus++;
      if(bulletstatus%2==0)
       {
       	currenttime1=System.currentTimeMillis();
        if(direction == 1) 
        { 
     
         bulletx1 = bulletx ; 
         bullety1 = bullety ;
         bulletstatus++;
        }  
        if(direction == 2) 
        { 
         bulletx2 = bulletx ; 
         bullety2 = bullety ;
         bulletstatus++; 
        } 
        if(direction == 3) 
       { 
        bulletx3 = bulletx ; 
        bullety3 = bullety ; 
        bulletstatus++;
       } 
        if(direction == 4) 
       { 
        bulletx4 = bulletx ; 
        bullety4 = bullety ;
        bulletstatus++;
       } 
      }
      
     }
     
     }
 } 
this.repaint() ; 
} 
public void keyReleased(KeyEvent e) 
{ 
} 
public void run() 
{ 
for (int a = 0; a<60000; a++) 
{ 
 bullety1 = bullety1 - tankbullet ;
 bulletx2 = bulletx2 + tankbullet ;
 bullety3 = bullety3 + tankbullet ;
 bulletx4 = bulletx4 - tankbullet ; 
 for (int i = 0; i<num; i++) 
 {
  bulletyf1[i] = bulletyf1[i] - tankfbullet ;
  bulletxf2[i] = bulletxf2[i] + tankfbullet ;
  bulletyf3[i] = bulletyf3[i] + tankfbullet ;
  bulletxf4[i] = bulletxf4[i] - tankfbullet ; 
 } 
//判断是否被击中 
 for (int i = 0; i<num; i++) 
 { 
  if(bulletyf1[i]<y + 38 &&bulletyf1[i]>y +8 && bulletxf1[i]-x>-10 && bulletxf1[i]-x<40) 
  { 
  life = life - difficult ;
  System.out.println ("被下方敌军击中") ;
 
  bulletxf1[i] = -20 ; 
  bulletyf1[i] = -20 ; 
  } 
  if(bulletxf2[i]>x+2 &&bulletxf2[i]<x+32 &&bulletyf2[i] - y >-10 && bulletyf2[i] - y <40 ) 
  { 
   life = life - difficult ;
   System.out.println ("被左方敌军击中") ;
 
   bulletxf2[i] = -20 ; 
   bulletyf2[i] = -20 ; 
  } 
  if(bulletyf3[i]>y+2 && bulletyf3[i]< y+32 && bulletxf3[i]-x >-10&& bulletxf3[i]-x<40) 
  {
   life = life - difficult ;	 
   System.out.println ("被上方敌军击中") ;

   bulletxf3[i] = -20 ; 
   bulletyf3[i] = -20 ;  
  } 
  if(bulletxf4[i]>x+8 &&bulletxf4[i]<x+38 &&bulletyf4[i] - y >-10 && bulletyf4[i] - y <40 ) 
  {
   life = life - difficult ; 
   System.out.println ("被右方敌军击中") ;
 
   bulletxf4[i] = -20 ; 
   bulletyf4[i] = -20 ; 
  } 
  } 

  	

//判断是否击中敌军 
for (int i = 0; i<num; i++) 
{ if(bullety1<bulletyf1[i]+10&&bullety1>bulletyf1[i]-10&&bulletx1>bulletxf1[i]-10&&bulletx1<bulletxf1[i]+10)
  {
 
  	bulletx1=-20;
  	bullety1=-20;
  	bulletxf1[i]=-20;
  	bulletyf1[i]=-20;
  }
  if(bullety1<bulletyf2[i]+10&&bullety1>bulletyf2[i]-10&&bulletx1>bulletxf2[i]-10&&bulletx1<bulletxf2[i]+10)
  {
  	
  	bulletx1=-20;
  	bullety1=-20;
  	bulletxf2[i]=-20;
  	bulletyf2[i]=-20;
  }
  if(bullety1<bulletyf3[i]+10&&bullety1>bulletyf3[i]-10&&bulletx1>bulletxf3[i]-10&&bulletx1<bulletxf3[i]+10)
  {
  	
  	bulletx1=-20;
  	bullety1=-20;
  	bulletxf3[i]=-20;
  	bulletyf3[i]=-20;
  }
  if(bullety1<bulletyf4[i]+10&&bullety1>bulletyf4[i]-10&&bulletx1>bulletxf4[i]-10&&bulletx1<bulletxf4[i]+10)
  {
  
  	bulletx1=-20;
  	bullety1=-20;
  	bulletxf4[i]=-20;
  	bulletyf4[i]=-20;
  }
  if(bullety1<yf[i] + 38 &&bullety1>yf[i] +8 && bulletx1-xf[i]>-10 && bulletx1-xf[i]<40) 
  { 
   System.out.println ("击中上方敌军") ;
  
   bulletx1=-20;
   bullety1=-20; 
   score = score + 100 ;
   difficult = score/1000+1 ;
   if(tankspeed>2)
   tankspeed = 10-difficult+1;
   if(tankbullet<10)
   tankbullet = 4+difficult-1;
   if(tankfbullet<10)
   tankfbullet = 4+difficult-1;

⌨️ 快捷键说明

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