1、java 坦克大战游戏教程完整代码项目:用java做的坦克大战效果图:进入坦克大战游戏主界面点击开始菜单,即可进入游戏:使用W/A/S/D控制坦克移动,使用J发射子弹消灭所有坦克游戏获得胜利,被击中后,游戏将会结束:完整代码见下文,需要准备一个进入坦克大战的音乐声音,放在TankVs.java代码文件的同路径的shengyin文件夹下。(没有也可以)代码运行方法:1,在以及配置好java JDK的情况下,将下面的完整的代码复制到并粘贴到记事本内,并将后缀.txt改为.java,文件命名为TankVs.java。2,运行cmd,使用javac TankVs.java命令编译该java文件,编译成
2、功后,使用java TankVs命令即可运行游戏。/以下为完整的坦克游戏代码import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.util.*;import java.io.*;import javax.sound.sampled.*; /导入声音类包public class TankVs extends JFrame implements ActionListener,Runnable OverPanel op=null; WinPanel wp=null; FirstPanel fmp=null
3、; MyPanel mp=null; JMenuBar jmb=null; JMenu jm=null; JMenuItem jmi=null; public static void main(String args) TankVs tk1=new TankVs(); public TankVs() fmp=new FirstPanel(); jmb=new JMenuBar(); jm=new JMenu(开始); jmi=new JMenuItem(开始游戏); jm.add(jmi); jmb.add(jm); this.setJMenuBar(jmb); this.add(fmp);
4、jmi.addActionListener(this); /添加单击事件监听 this.setSize(1000,800); this.setLocation(200,100); this.setTitle(坦克大战); /文件的路径自己改一下 this.setIconImage(new ImageIcon(D:JAVA高级坦克大战imagetank.jpg).getImage(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); this.setVisible(true); Thre
5、ad t=new Thread(fmp); t.start(); public void actionPerformed(ActionEvent e) if(fmp!=null)this.remove(fmp); if(op!=null)this.remove(op); if(wp!=null)this.remove(wp); mp=new MyPanel(); mp.repaint(); this.addKeyListener(mp); /添加键盘事件监听 this.add(mp); Thread t=new Thread(mp); t.start(); this.setVisible(tr
6、ue); Thread t1=new Thread(this); t1.start(); shengyin sy=new shengyin(.shengyintank.wav); sy.start(); public void run() while(true) try Thread.sleep(50); catch(Exception e) if(this.mp.dtk.size()=0) try Thread.sleep(1000); catch(Exception e) this.wp=new WinPanel(); this.add(wp); this.remove(mp); this
7、.setVisible(true); if(this.mp.mt.shengming=false) try Thread.sleep(1000); catch(Exception e) this.op=new OverPanel(); this.add(op); this.remove(mp); this.setVisible(true); class FirstPanel extends JPanel implements Runnable int times=0; public void paint(Graphics g) super.paint(g); g.fillRect(0,0,80
8、0,600); if(times%2=0) g.setColor(Color.yellow); Font myFont=new Font(华文行楷,Font.BOLD,80); g.setFont(myFont); g.drawString(坦克大战,230,300); public void run() while(true) try Thread.sleep(500); catch(Exception e) times+; this.repaint(); class OverPanel extends JPanel public void paint(Graphics g) super.p
9、aint(g); g.fillRect(0,0,800,600); g.setColor(Color.yellow); g.setFont(new Font(Cambria,Font.BOLD,80); g.drawString(GAME OVER,200,300); class WinPanel extends JPanel public void paint(Graphics g) super.paint(g); g.fillRect(0,0,800,600); g.setColor(Color.yellow); g.setFont(new Font(Cambria,Font.BOLD,8
10、0); g.drawString(YOU WIN,200,300); class MyPanel extends JPanel implements KeyListener,Runnable WoTank mt=null; Vector dtk=new Vector(); /集合类+泛型,Vector适用与多线程, int tks=12; public MyPanel() mt=new WoTank(260,500); mt.setSudu(8); for(int i=0;itks;i+) DiTank dt=new DiTank(750/(tks-1)*i,20); dt.setSudu(2
11、); dtk.add(dt); Thread t=new Thread(dt); /启动敌人坦克线程 t.start(); public void paint(Graphics g) super.paint(g); g.fillRect(0,0,800,600); if(mt.shengming=true) this.drawTank(mt.getX(),mt.getY(),g,mt.getFangxiang(),0); /绘制我方坦克 for(int i=0;idtk.size();i+) DiTank dt=dtk.get(i); this.drawTank(dt.getX(),dt.ge
12、tY(),g,dt.getFangxiang(),1); if(dt.zd.shengming=true) g.setColor(Color.white); g.fill3DRect(dt.zd.x,dt.zd.y,3,3,false); /绘制敌方坦克 for(int i=0;imt.aa.size();i+) /绘制子弹 Zidan zd=mt.aa.get(i); if(zd.shengming=true & mt.shengming=true) g.setColor(Color.red); g.fill3DRect(zd.x,zd.y,3,3,false); if(zd.shengmi
13、ng=false) mt.aa.remove(zd); public void drawTank(int x,int y,Graphics g,int fangxiang,int leixing) switch(leixing) case 0: /我的坦克 g.setColor(Color.yellow); break; case 1: /敌人的坦克 g.setColor(Color.green); break; switch(fangxiang) case 0: /上方向 g.fill3DRect(x,y,5,30,false); g.fill3DRect(x+15,y,5,30,false
14、); g.fill3DRect(x+5,y+5,10,20,false); g.fillOval(x+5,y+10,10,10); g.drawLine(x+10,y+15,x+10,y-3); break; case 1: /左方向 g.fill3DRect(x,y,30,5,false); g.fill3DRect(x,y+15,30,5,false); g.fill3DRect(x+5,y+5,20,10,false); g.fillOval(x+10,y+5,10,10); g.drawLine(x+15,y+10,x-3,y+10); break; case 2: /下方向 g.fi
15、ll3DRect(x,y,5,30,false); g.fill3DRect(x+15,y,5,30,false); g.fill3DRect(x+5,y+5,10,20,false); g.fillOval(x+5,y+10,10,10); g.drawLine(x+10,y+15,x+10,y+33); break; case 3: /右方向 g.fill3DRect(x,y,30,5,false); g.fill3DRect(x,y+15,30,5,false); g.fill3DRect(x+5,y+5,20,10,false); g.fillOval(x+10,y+5,10,10);
16、 g.drawLine(x+15,y+10,x+33,y+10); break; public void keyTyped(KeyEvent e) public void keyReleased(KeyEvent e) public void keyPressed(KeyEvent e) if(mt.shengming=true) if(e.getKeyCode()=KeyEvent.VK_W) this.mt.setFangxiang(0); this.mt.xiangshang(); else if(e.getKeyCode()=KeyEvent.VK_A) this.mt.setFang
17、xiang(1); this.mt.xiangzuo(); else if(e.getKeyCode()=KeyEvent.VK_S) this.mt.setFangxiang(2); this.mt.xiangxia(); else if(e.getKeyCode()=KeyEvent.VK_D) this.mt.setFangxiang(3); this.mt.xiangyou(); if(e.getKeyCode()=KeyEvent.VK_J) if(mt.aa.size()0) try Thread.sleep(50); catch(Exception e) for(int i=0;
18、imt.aa.size();i+) Zidan zd=mt.aa.get(i); for(int j=0;jdtk.size();j+) DiTank dt=dtk.get(j); this.jzdf(zd,dt); for(int i=0;idt.getX() & zd.xdt.getY() & zd.ydt.getX() & zd.xdt.getY() & zd.ymt.getX() & zd.xmt.getY() & zd.ymt.getX() & zd.xmt.getY() & zd.ymt.getY()+20) zd.shengming=false; mt.shengming=fal
19、se; break; class Tank private int x=0,y=0; int fangxiang=0; int sudu=1; boolean shengming=true; public int getSudu() return sudu; public void setSudu(int sudu) this.sudu=sudu; public int getFangxiang() return fangxiang; public void setFangxiang(int fangxiang) this.fangxiang=fangxiang; public int get
20、X() return x; public int getY() return y; public void setX(int x) this.x=x; public void setY(int y) this.y=y; public Tank(int x,int y) this.x=x; this.y=y; class WoTank extends Tank Zidan zd=new Zidan(); Vector aa=new Vector(); public WoTank(int x,int y) super(x,y); public void xiangshang() if(getY()
21、-sudu0) this.setY(this.getY()-sudu); public void xiangzuo() if(getX()-sudu0) this.setX(this.getX()-sudu); public void xiangxia() if(getY()+sudu520) this.setY(this.getY()+sudu); public void xiangyou() if(getX()+sudu750) this.setX(this.getX()+sudu); public void fszd() switch(this.fangxiang) case 0: zd
22、=new Zidan(super.getX()+10,super.getY(),super.getFangxiang(),true); break; case 1: zd=new Zidan(super.getX(),super.getY()+10,super.getFangxiang(),true); break; case 2: zd=new Zidan(super.getX()+10,super.getY()+30,super.getFangxiang(),true); break; case 3: zd=new Zidan(super.getX()+30,super.getY()+10
23、,super.getFangxiang(),true); break; aa.add(zd); Thread t=new Thread(zd); /启动子弹线程 t.start(); class Zidan implements Runnable int x; int y; int fangxiang; int sudu=8; public boolean shengming=false; public Zidan() public Zidan(int x,int y,int fangxiang,boolean shengming) this.x=x; this.y=y; this.fangxiang=fangxiang; this.shengming=shengming; public void run() while(true)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1