java 坦克大战从敌人集合中删除坦克时报错

坦克大战的敌人坦克不会发射子弹,怎么解决【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:724,886贴子:
坦克大战的敌人坦克不会发射子弹,怎么解决收藏
坦克大战的敌人坦克不会发射子弹,怎么解决代码如下:package 坦克大战;import java.awt.*;import javax.swing.*;import java.util.*;import java.awt.event.*;import java.util.*;public class Tank1 extends JFrame{MyPanel mp=public static void main(String[] args) {Tank1 t1=new Tank1();}public Tank1(){mp=new MyPanel();Thread t=new Thread(mp);t.start();this.add(mp);this.addKeyListener(mp);this.setSize();this.setLocation(150,0);this.setIconImage((new ImageIcon(&X/T.jpg&)).getImage());this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}}class MyPanel extends JPanel implements KeyListener,Runnable{MyTank mt=Vector&DiTank& dtk=new Vector&DiTank&();int tksl=10;public MyPanel(){mt=new MyTank(500,600);for(int i=0;i&i++){DiTank dt=new DiTank((i)*180+5,0);dt.setFangxiang(2);//dt.dtkxl(dtk);Thread t2=new Thread(dt);t2.start();Zidan zd=new Zidan(dt.x+10,dt.y+30,2);dt.dzd.add(zd);Thread t3=new Thread(zd);t3.start();dtk.add(dt);}}public void paint(Graphics g){super.paint(g);g.fillRect(0, 0, );this.drawTank(mt.getX(), mt.getY(), g,mt.fangxiang, 0);for(int j=0;j&dtk.size();j++){
DiTank dt=dtk.get(j);
if(dt.shengming)
this.drawTank(dtk.get(j).getX(),dtk.get(j).getY(),g,dt.fangxiang,1);
}for(int i=0;i&mt.aa.size();i++){Zidan zd=mt.aa.get(i);if(zd!=null && zd.shengming==true){g.setColor(Color.white);g.fillRect(zd.x,zd.y, 2, 2);}}}}public void jzdf(Zidan zd,DiTank dt){switch(dt.fangxiang){case 0:case 2:if(zd.x&dt.x && zd.x&dt.x+20 && zd.y&dt.y && zd.y&dt.y+30){zd.shengming=dt.shengming=}case 1:case 3:if(zd.x&dt.x && zd.x&dt.x+
30 && zd.y&dt.y && zd.y&dt.y+20){zd.shengming=dt.shengming=}}}public void drawTank(int x,int y,Graphics g,int fangxiang,int leixing){switch(leixing){case 0:g.setColor(Color.black );case 1:g.setColor(Color.gray);}switch(fangxiang){case 0:g.fill3DRect(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-3);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);case 2:g.fill3DRect(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);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);g.drawLine(x+15, y+10, x+33, y+10);}}public void keyReleased(KeyEvent e) {}public void keyTyped(KeyEvent e) {}public void keyPressed(KeyEvent e) {if(e.getKeyCode()==KeyEvent.VK_W){if(this.mt.y&0){this.mt.setFangxiang(0);this.mt.xiangshang();}}else if(e.getKeyCode()==KeyEvent.VK_A){if(this.mt.x&0){this.mt.setFangxiang(1);this.mt.xiangzuo();}}else if(e.getKeyCode()==KeyEvent.VK_S){if(this.mt.y&680){this.mt.setFangxiang(2);this.mt.xiangxia();}}else if(e.getKeyCode()==KeyEvent.VK_D){if(this.mt.x&980){this.mt.setFangxiang(3);this.mt.xiangyou();}}if(e.getKeyCode()==KeyEvent.VK_J){this.mt.fszd();}this.repaint();}public void run(){while(true){try{Thread.sleep(100);}catch (Exception e){}for(int i=0;i&mt.aa.size();i++){Zidan zd=mt.aa.get(i);if(zd.shengming){for(int j=0;j&dtk.size();j++){DiTank dt=dtk.get(j);if(dt.shengming){this.jzdf(zd,dt);}}}}this.repaint();}}}class Tank{int x=0, y=0;int fangxiang=0;int sudu=5;boolean shengming=public int getColor() {}public void setColor(int color) {this.color =}public int getFangxiang() {}public void setFangxiang(int fangxiang) {this.fangxiang =}public int getSudu() {}public void setSudu(int sudu) {this.sudu =}public int getX() {}public void setX(int x) {this.x =}public int getY() {}public void setY(int y) {this.y =}public Tank(int x,int y){this.x=x;this.y=y;}}class DiTank extends Tank implements Runnable{int sudu=1 ;int time=0;Vector&Zidan& dzd=new Vector&Zidan&();public DiTank(int x,int y){super(x,y);}public void run(){while(true){switch(this.fangxiang){case 0:for(int i=0;i&20;i++){if(y&0){y-=try{Thread.sleep(100);}catch(Exception e){}}}case 1:for(int i=0;i&20;i++){if(x&0){x-=try{Thread.sleep(100);}catch(Exception e){}}}case 2:for(int i=0;i&20;i++){if(y&680){y+=try{Thread.sleep(100);}catch(Exception e){}}}case 3:for(int i=0;i&20;i++){if(x&999){x+=try{Thread.sleep(100);}catch(Exception e){}}}}this.fangxiang=(int)(Math.random()*4);if(this.shengming==false){}
this.time++;if(time%2==0){if(shengming){if(dzd.size()&5){Zidan zd=switch(fangxiang){case 0:zd=new Zidan(x+10,y,0);dzd.add(zd);case 1:zd=new Zidan(x,y+10,1);dzd.add(zd);case 2:zd=new Zidan(x+10,y+30,2);dzd.add(zd);case 3:zd=new Zidan(x+30,y+10,3);dzd.add(zd);}Thread t5=new Thread(zd);t5.start();
}}}} }}class MyTank extends Tank{Vector&Zidan&aa=new Vector&Zidan&();Zidan zd=public MyTank(int x,int y){super(x,y);}public void fszd(){switch(this.fangxiang){case 0:zd=new Zidan(x+10,y,0);aa.add(zd);case 1:zd=new Zidan(x ,y+10,1);aa.add(zd);case 2:zd=new Zidan(x+10,y+30,2);aa.add(zd);case 3:zd=new Zidan(x+30,y+10,3);aa.add(zd);}Thread t=new Thread(zd);t.start();}public void xiangshang(){y-=}public void xiangzuo(){x-=}public void xiangxia(){y+=}public void xiangyou(){x+=}}class Zidan implements Runnable{int sudu=18;boolean shengming=public Zidan(int x,int y,int fangxiang){this.x=x;this.y=y;this.fangxiang=}public void run(){while(true)//{try{Thread.sleep(50);}catch(Exception e){}switch(fangxiang){case 0:y-=case 1:x-=case
2:y+=case 3:x+=}if(x&0||x&1024||y&0||y&720){this.shengming=}}}
登录百度帐号import java.awt.C
import java.awt.F
import java.awt.G
import java.awt.event.KeyE
import java.awt.event.KeyL
import java.io.F
import java.io.FileInputS
import java.util.ArrayL
import java.util.R
import javax.swing.BorderF
import javax.swing.ImageI
import javax.swing.JF
import javax.swing.JP
import tankwar.Tank.D
import barrier.EnemyB
import barrier.G
import barrier.H
import barrier.I
import barrier.SelfB
import barrier.W
* Java学习交流QQ群: 我们一起学Java!
public class TankWar implements KeyListener {
static boolean TIMEOUT = false;
private JF
private JPanel gameP
private PanelShow messgeP
private myP
private Tank myT
public static final int AREA_WIDTH = 830;
public static final int AREA_HEIGHT = 800;
private ArrayList&Missle& missles = new ArrayList&Missle&();
private ArrayList&Tank& allTanks = new ArrayList&Tank&();
private ArrayList&Boom& booms = new ArrayList&Boom&();
private ArrayList&Wall& walls = new ArrayList&Wall&();
private ArrayList&Iron& irons = new ArrayList&Iron&();
private ArrayList&Gold& golds = new ArrayList&Gold&();
private ArrayList&Item& items = new ArrayList&Item&();
private ArrayList&EnemyBorn& enemyBorns = new ArrayList&EnemyBorn&();
private SelfBorn selfB
private Tank enemyT
private ImageIcon backG
private final S
private int tankM
private boolean over = false;
private static int selfMax = 3;
private boolean
private boolean flash = false;
private TankWar tw = this;
static int SCORE = 0;
private final JFrame mainF;
private int
public TankWar(String map, int tankMax, JFrame mainF, int style)
throws Exception {
this.map =
this.tankMax = tankM
this.mainF = mainF;
this.style =
private void init() {
f = new JFrame("坦克大战 V3.0");
gamePanel = new JPanel(null);
p = new myPanel();
p.setBackground(Color.WHITE);
r = new Random();
messgePanel = new PanelShow();
initMap(new File("map/" + map));
myTank = new Tank(selfBorn.getX(), selfBorn.getY(), true, allTanks,
walls, irons, golds, missles, home, booms, style);
} catch (Exception e1) {
myTank.setDir(Direction.U);
allTanks.add(myTank);
addTank();
backGround = new ImageIcon(
TankWar.class.getResource("/pic/whiteback.jpg"));
} catch (Exception e) {
p.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.WHITE));
p.setSize(AREA_WIDTH, AREA_HEIGHT);
messgePanel.setBounds(AREA_WIDTH, 0, 200, AREA_HEIGHT);
gamePanel.add(messgePanel);
gamePanel.add(p);
f.add(gamePanel);
f.setBounds(0, 0, AREA_WIDTH + 200, AREA_HEIGHT);
f.setDefaultCloseOperation(3);
f.setResizable(true);
f.setFocusable(true);
f.addKeyListener(this);
f.setVisible(true);
new Thread(new Runnable() {
public void run() {
while (!over) {
if (!myTank.isLive()) {
selfMax--;
if (selfMax & 0) {
f.removeKeyListener(tw);
over = true;
win = false;
myTank.setLevel(1);
myTank.setX(selfBorn.getX());
myTank.setY(selfBorn.getY());
myTank.setDir(Direction.U);
myTank.setHp(50);
myTank.setLive(true);
if (tankMax &= 0 && allTanks.size() == 1) {
f.removeKeyListener(tw);
over = true;
win = true;
if (!home.isLive()) {
f.removeKeyListener(tw);
over = true;
win = false;
p.repaint();
myTank.move();
for (int i = 1; i & allTanks.size(); i++) {
allTanks.get(i).move();
allTanks.get(i).setNoFire(myTank.getNoFire() + 1);
aI(allTanks.get(i));
if (allTanks.size() &= enemyBorns.size() + 1)
addTank();
myTank.setNoFire(myTank.getNoFire() + 1);
messgePanel.setEnemyCount(tankMax);
messgePanel.setSelfCount(selfMax);
messgePanel.setScore(SCORE);
if (SCORE % 500 == 0) {
SCORE += 100;
Item item = new Item(allTanks, booms, irons, home);
items.add(item);
item.start();
Thread.sleep(30);
} catch (InterruptedException e) {
}).start();
private class myPanel extends JPanel {
private static final long serialVersionUID = 7225328L;
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(backGround.getImage(), 0, 0, null);
for (int j = 0; j & walls.size(); j++) {
walls.get(j).draw(g);
for (int j = 0; j & irons.size(); j++) {
irons.get(j).draw(g);
for (int j = 0; j & golds.size(); j++) {
golds.get(j).draw(g);
for (int j = 0; j & enemyBorns.size(); j++) {
enemyBorns.get(j).draw(g);
home.draw(g);
selfBorn.draw(g);
for (int j = 0; j & allTanks.size(); j++) {
allTanks.get(j).drawTank(g);
for (int j = 0; j & irons.size(); j++) {
irons.get(j).draw(g);
for (int i = 0; i & missles.size(); i++) {
missles.get(i).drawMissle(g);
if (!missles.get(i).isLive())
missles.remove(i);
for (int i = 0; i & booms.size(); i++) {
if (booms.get(i).isLive())
booms.get(i).drawBoom(g);
booms.remove(i);
for (int j = 0; j & items.size(); j++) {
if (!items.get(j).isLive()) {
items.remove(j);
items.get(j).draw(g);
drawOver(g);
messgePanel.repaint();
public void keyTyped(KeyEvent e) {
public void keyPressed(KeyEvent e) {
if (over) {
if (e.getKeyCode() == KeyEvent.VK_F1) {
over = false;
missles.clear();
allTanks.clear();
booms.clear();
walls.clear();
irons.clear();
golds.clear();
enemyBorns.clear();
} catch (Exception e1) {
f.setVisible(false);
mainF.setSize(800, 800);
mainF.setVisible(true);
} else if (e.getKeyCode() == KeyEvent.VK_SPACE) {
myTank.fire();
myTank.keyPress(e);
public void keyReleased(KeyEvent e) {
myTank.keyReleased(e);
public void aI(Tank tank) {
if (TIMEOUT) {
tank.setUp(false);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(false);
if (r.nextInt(40) == 0)
tank.fire();
if (r.nextInt(10) == 0) {
if (tank.getX() &= myTank.getX()
&& tank.getX() &= myTank.getX() + Tank.SIZE
&& tank.getY() & myTank.getY()) {
tank.setUp(true);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(false);
tank.setDir(Direction.U);
} else if (tank.getX() &= myTank.getX()
&& tank.getX() &= myTank.getX() + Tank.SIZE
&& tank.getY() & myTank.getY()) {
tank.setUp(false);
tank.setLeft(false);
tank.setDown(true);
tank.setRight(false);
tank.setDir(Direction.D);
else if (tank.getX() & myTank.getX()
&& tank.getY() &= myTank.getY()
&& tank.getY() &= myTank.getY() + Tank.SIZE) {
tank.setUp(false);
tank.setLeft(true);
tank.setDown(false);
tank.setRight(false);
tank.setDir(Direction.L);
} else if (tank.getX() & myTank.getX()
&& tank.getY() &= myTank.getY()
&& tank.getY() &= myTank.getY() + Tank.SIZE) {
tank.setUp(false);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(true);
tank.setDir(Direction.R);
if (tank.getX() &= 0) {
tank.setUp(false);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(true);
tank.setDir(Direction.R);
if (tank.getY() &= 0) {
tank.setUp(false);
tank.setLeft(false);
tank.setDown(true);
tank.setRight(false);
tank.setDir(Direction.D);
if (tank.getX() &= AREA_WIDTH - Tank.SIZE) {
tank.setUp(false);
tank.setLeft(true);
tank.setDown(false);
tank.setRight(false);
tank.setDir(Direction.L);
if (tank.getY() &= AREA_HEIGHT - Tank.SIZE) {
tank.setUp(true);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(false);
tank.setDir(Direction.U);
} else if (r.nextInt(300) == 1) {
tank.setUp(true);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(false);
tank.setDir(Direction.U);
else if (r.nextInt(300) == 2) {
tank.setUp(false);
tank.setLeft(true);
tank.setDown(false);
tank.setRight(false);
tank.setDir(Direction.L);
} else if (r.nextInt(300) == 3) {
tank.setUp(false);
tank.setLeft(false);
tank.setDown(true);
tank.setRight(false);
tank.setDir(Direction.D);
} else if (r.nextInt(300) == 4) {
tank.setUp(false);
tank.setLeft(false);
tank.setDown(false);
tank.setRight(true);
tank.setDir(Direction.R);
public void initMap(File file) {
FileInputStream read = new FileInputStream(file);
for (int i = 0; i & AREA_HEIGHT / 50; i++) {
for (int j = 0; j & AREA_WIDTH / 50; j++) {
switch (read.read()) {
walls.add(new Wall(j * 50, i * 50));
irons.add(new Iron(j * 50, i * 50));
golds.add(new Gold(j * 50, i * 50));
selfBorn = new SelfBorn(j * 50, i * 50);
enemyBorns.add(new EnemyBorn(j * 50, i * 50));
home = new Home(j * 50, i * 50);
read.close();
} catch (Exception e) {
public void addTank() {
if (tankMax &= 0)
for (int i = allTanks.size(); i & enemyBorns.size() + 1; i++) {
int temp = r.nextInt(enemyBorns.size());
enemyTank = new Tank(enemyBorns.get(temp).getX(), enemyBorns
.get(temp).getY(), false, allTanks, walls, irons,
golds, missles, home, booms, r.nextInt(3) + 1);
} catch (Exception e) {
e.printStackTrace();
enemyTank.setDir(Direction.D);
enemyTank.setDown(true);
allTanks.add(enemyTank);
tankMax--;
if (tankMax &= 0)
public static void addMyTankLives() {
selfMax++;
private void over() {
for (int i = 0; i & AREA_HEIGHT / 50; i++) {
for (int j = 0; j & AREA_WIDTH / 50; j++) {
irons.add(new Iron(j * 50, i * 50));
p.repaint();
Thread.sleep(5);
} catch (InterruptedException e) {
while (true) {
p.repaint();
Thread.sleep(1000);
} catch (InterruptedException e) {
f.addKeyListener(this);
private void drawOver(Graphics g) {
p.repaint();
g.setColor(Color.red);
g.setFont(new Font("Arial", 1, 100));
g.drawString("GAME OVER", 100, 200);
g.setFont(new Font("Arial", 2, 50));
g.drawString("Congratulation!
You Win!", 100, 400);
g.drawString("So Sorry,
You Lose!", 100, 400);
if (flash) {
g.setFont(new Font("Arial", 2, 30));
g.setColor(Color.BLACK);
g.drawString("Press F1 to try again...,", 150, 500);
g.drawString("Press the other Key to Return the Title...,", 150,
}代码运行效果截图
十款经典游戏的Java版本(开源)
开源Java小游戏
看到标题可能有人要笑我,用Java写游戏?没办法,毕竟无论学什么语言我们都希望它能做出好玩有趣的应用。对于初学者来说,能做出个小游戏玩玩也是很大的学习动力嘛。下面就给大家介绍...
Java开发的游戏之三 坦克大战 完整源代码
代码过长不在此贴出,所有的代码都打包在以下链接中压缩包里,包括背景图片。
源代码下载链接:
http://download.csdn.net/detail...
《Java小游戏实现》:坦克大战
《Java小游戏实现》:坦克大战前面写了一个简单的聊天小程序,今天开始就写一个坦克大战的游戏,算是对Java相关小知识点的一个应用。这个游戏的完成,我们也是分步完成,逐步累加,一个一个小功能的添加,最...
java实现的坦克大战
《Java实现的坦克大战》
一.程序基本结构
二.实现的功能
1、单人模式
2、双人模式
3、通过深度优先算法实现的AI坦克寻路功能
4、局域网联机(半成品,以后补坑)
三.运行效果...
JAVA实现经典坦克大战及源代码下载
一、简单介绍
这是一个功能相对全的JAVA版坦克大战,界面绘制是通过JAVA的图形化用户界面完成的,包括了菜单界面和游戏界面。其中菜单界面可以供玩家选择重新开始游戏、暂停、继续、是否播...
没有更多推荐了,前期相关文章
一、任务需求
赋予敌人行动和攻击。
- 敌人行动
1.需要把EnemyTank做成线程类实现Runnable接口.
run方法中,坦克移动非常快biu biu biu,所以用sleep和for循环进行减速,让他缓慢移动。移动后再让弹可随机选择一个direct,如果坦克islive=false就让该线程结束。另外,增加if语句,当坦克跑出400*300的边界时,坦克不能向外移动。只能向边界内移动。
while (true) {
Thread.sleep(50);
} catch (Exception e) {
e.printStackTrace();
switch (Direct) {
for(int i=0;i&3;i++){
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
//说明坦克正在向上移动
for(int i=0;i&3;i++){
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
for(int i=0;i&3;i++){
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
for(int i=0;i&3;i++){
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
//让坦克随机产生新的方向
(int)(Math.random()*4);
//判断敌人坦克是否死亡
if(isLive==false){
//让坦克死亡,退出线程
2.改进画出敌方坦克代码,并且在MyPanel中定义坦克集合
// 定义敌军
Vector&EnemyTank& ets = new Vector&EnemyTank&();
// 画出敌方坦克
for (int i = 0; i & ets.size(); i++) {
EnemyTank et = ets.get(i);
if (et.isLive) {
drawTank(et.getX(), et.getY(), g, et.getDirect(), ets.get(i)
.getColor());
// 画出敌人坦克子弹
for (int j = 0; j & et.ss.size(); j++) {
Shot enemyShot = et.ss.get(j);// j写错成i
if (enemyShot.isLive) {
g.draw3DRect(enemyShot.x, enemyShot.y, 1, 1, false);
// 如果敌人的坦克死亡,就从Vector去掉
et.ss.remove(enemyShot);
-坦克发射子弹
2.将之前的MyPanel类run()方法中判断子弹击中坦克部分提取出来,再改写为hitEnemyTank()方法。
3.同上一步骤,改写hitMe()方法。
而之前的hitTank(Shot s,EnemyTank et)改成hitTank(Shot s,Tank et)用以被hitMe()和hitEnemyTank()调用
三、源代码
MyTankGame.java
* 功能:坦克游戏的2.0
* 1.画出坦克
* 2.坦克的移动
* 3.坦克发射子弹,子弹连发,最多五颗
* 4.爆炸效果
* 5.敌人开始行动啦
* 6.我被打爆
package Tank_05;
import java.awt.C
import java.awt.G
import java.awt.I
import java.awt.P
import java.awt.T
import java.awt.event.KeyE
import java.awt.event.KeyL
import java.util.V
import javax.swing.JF
import javax.swing.JP
@SuppressWarnings("serial")
public class MyTankGame4 extends JFrame {
MyPanel p1 = null;
public MyTankGame4() {
p1 = new MyPanel();
Thread t = new Thread(p1);
t.start();
setSize(400, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addKeyListener(p1);
public static void main(String[] args) {
new MyTankGame4();
@SuppressWarnings("serial")
class MyPanel extends JPanel implements KeyListener, Runnable {
int enSize = 3;
Hero hero = null;
Vector&EnemyTank& ets = new Vector&EnemyTank&();
Vector&Bomb& bombs = new Vector&Bomb&();
Image image1 = null;
Image image2 = null;
Image image3 = null;
Image image4 = null;
Image image5 = null;
Image image6 = null;
Image image7 = null;
Image image8 = null;
public MyPanel() {
hero = new Hero(100, 100);
for (int i = 0; i & enS i++) {
EnemyTank et = new EnemyTank((i + 1) * 80, 0);
et.setColor(1);
et.setDirect(1);
Thread t = new Thread(et);
t.start();
Shot s = new Shot(et.x + 9, et.y + 28, 1);
et.ss.add(s);
Thread t2 = new Thread(s);
t2.start();
ets.add(et);
image1 = Toolkit.getDefaultToolkit().getImage(
Panel.class.getResource("/blast1.gif"));
image2 = Toolkit.getDefaultToolkit().getImage(
Panel.class.getResource("/blast2.gif"));
image3 = Toolkit.getDefaultToolkit().getImage(
Panel.class.getResource("/blast3.gif"));
image4 = Toolkit.getDefaultToolkit().getImage(
Panel.class.getResource("/blast4.gif"));
image5 = Toolkit.getDefaultToolkit().getImage(
Panel.class.getResource("/blast5.gif"));
image6 = Toolkit.getDefaultToolkit().getImage(
Panel.class.getResource("/blast6.gif"));
image7 = Toolkit.getDefaultToolkit().getImage(
Panel.class.getResource("/blast7.gif"));
image8 = Toolkit.getDefaultToolkit().getImage(
Panel.class.getResource("/blast8.gif"));
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillRect(0, 0, 400, 300);
if(hero.isLive){
drawTank(hero.getX(), hero.getY(), g, hero.Direct, 0);
for (int i = 0; i & hero.ss.size(); i++) {
Shot myShot = hero.ss.get(i);
if (myShot != null && myShot.isLive == true) {
g.setColor(Color.red);
g.draw3DRect(myShot.x, myShot.y, 1, 1, false);
if (myShot.isLive == false) {
hero.ss.remove(myShot);
for (int i = 0; i & bombs.size(); i++) {
Bomb b = bombs.get(i);
if (b.life & 8) {
g.drawImage(image1, b.x, b.y, 30, 30, this);
} else if (b.life & 7) {
g.drawImage(image2, b.x, b.y, 30, 30, this);
} else if (b.life & 6) {
g.drawImage(image3, b.x, b.y, 30, 30, this);
} else if (b.life & 5) {
g.drawImage(image4, b.x, b.y, 30, 30, this);
} else if (b.life & 4) {
g.drawImage(image5, b.x, b.y, 30, 30, this);
} else if (b.life & 3) {
g.drawImage(image6, b.x, b.y, 30, 30, this);
} else if (b.life & 2) {
g.drawImage(image7, b.x, b.y, 30, 30, this);
} else if (b.life & 1) {
g.drawImage(image8, b.x, b.y, 30, 30, this);
b.lifeDown();
if (b.life == 0) {
bombs.remove(b);
for (int i = 0; i & ets.size(); i++) {
EnemyTank et = ets.get(i);
if (et.isLive) {
drawTank(et.getX(), et.getY(), g, et.getDirect(), ets.get(i)
.getColor());
for (int j = 0; j & et.ss.size(); j++) {
Shot enemyShot = et.ss.get(j);
if (enemyShot.isLive) {
g.draw3DRect(enemyShot.x, enemyShot.y, 1, 1, false);
et.ss.remove(enemyShot);
public void hitMe() {
for (int i = 0; i & ets.size(); i++) {
EnemyTank et = ets.get(i);
for (int j = 0; j & et.ss.size(); j++) {
Shot enemyShot = et.ss.get(j);
hitTank(enemyShot, hero);
public void hitEnemyTank() {
for (int i = 0; i & hero.ss.size(); i++) {
Shot myShot = hero.ss.get(i);
if (myShot.isLive) {
for (int j = 0; j & ets.size(); j++) {
EnemyTank et = ets.get(j);
if (et.isLive) {
hitTank(myShot, et);
public void hitTank(Shot s, Tank et) {
switch (et.Direct) {
if (s.x & et.x && s.x & et.x + 20 && s.y & et.y && s.y & et.y + 30) {
s.isLive = false;
et.isLive = false;
Bomb b = new Bomb(et.x, et.y);
bombs.add(b);
if (s.x & et.x && s.x & et.x + 30 && s.y & et.y && s.y &= et.y + 20) {
s.isLive = false;
et.isLive = false;
Bomb b = new Bomb(et.x, et.y);
bombs.add(b);
public void drawTank(int x, int y, Graphics g, int direct, int type) {
switch (type) {
g.setColor(Color.cyan);
g.setColor(Color.yellow);
switch (direct) {
g.fill3DRect(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 + 4, y + 10, 10, 10);
g.drawLine(x + 9, y + 15, x + 9, y);
g.fill3DRect(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 + 4, y + 10, 10, 10);
g.drawLine(x + 9, y + 15, x + 9, y + 30);
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 + 9, y + 4, 10, 10);
g.drawLine(x + 5, y + 9, x - 4, y + 9);
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 + 9, y + 4, 10, 10);
g.drawLine(x + 15, y + 9, x + 30, y + 9);
public void keyTyped(KeyEvent e) {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_W) {
hero.setDirect(0);
hero.moveUp();
} else if (e.getKeyCode() == KeyEvent.VK_S) {
hero.setDirect(1);
hero.moveDown();
} else if (e.getKeyCode() == KeyEvent.VK_A) {
hero.setDirect(2);
hero.moveLeft();
} else if (e.getKeyCode() == KeyEvent.VK_D) {
hero.setDirect(3);
hero.moveRight();
if (e.getKeyCode() == KeyEvent.VK_J) {
if (hero.ss.size() &= 4) {
hero.shotEnemy();
repaint();
public void keyReleased(KeyEvent e) {
public void run() {
while (true) {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
hitEnemyTank();
repaint();
members.java
package Tank_05;
import java.util.V
class Tank {
int x = 0;
int y = 0;
int speed = 8;
int Direct = 0;
boolean isLive = true;
public int getColor() {
public void setColor(int color) {
this.color =
public int getDirect() {
public void setDirect(int direct) {
public int getSpeed() {
public void setSpeed(int speed) {
this.speed =
public Tank(int x, int y) {
public int getX() {
public void setX(int x) {
public int getY() {
public void setY(int y) {
class EnemyTank extends Tank implements Runnable {
int time = 0;
Vector&Shot& ss = new Vector&Shot&();
public EnemyTank(int x, int y) {
super(x, y);
public void run() {
while (true) {
Thread.sleep(50);
} catch (Exception e) {
e.printStackTrace();
switch (Direct) {
for(int i=0;i&3;i++){
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
for(int i=0;i&3;i++){
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
for(int i=0;i&3;i++){
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
for(int i=0;i&3;i++){
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
if(time%2==0){
if(isLive){
if(ss.size()&8){
Shot s = null;
switch(Direct){
s = new Shot(x + 8, y - 4, 0);
ss.add(s);
s = new Shot(x + 9, y + 32, 1);
ss.add(s);
s = new Shot(x - 8, y + 8, 2);
ss.add(s);
s = new Shot(x + 32, y + 9, 3);
ss.add(s);
Thread t = new Thread(s);
t.start();
(int)(Math.random()*4);
if(isLive==false){
class Hero extends Tank {
Vector&Shot& ss = new Vector&Shot&();
Shot s = null;
public Hero(int x, int y) {
super(x, y);
public void shotEnemy() {
switch (Direct) {
s = new Shot(x + 8, y - 4, 0);
ss.add(s);
s = new Shot(x + 9, y + 32, 1);
ss.add(s);
s = new Shot(x - 8, y + 8, 2);
ss.add(s);
s = new Shot(x + 32, y + 9, 3);
ss.add(s);
Thread t = new Thread(s);
t.start();
public void moveUp() {
public void moveDown() {
public void moveLeft() {
public void moveRight() {
class Shot implements Runnable {
int speed = 1;
boolean isLive = true;
public Shot(int x, int y, int Direct) {
this.Direct = D
public void run() {
while (true) {
Thread.sleep(50);
} catch (Exception e) {
switch (Direct) {
if (x & 0 || x & 400 || y & 0 || y & 300) {
this.isLive = false;
class Bomb {
int life = 9;
boolean isLive = true;
public Bomb(int x, int y) {
public void lifeDown() {
if (life & 0) {
isLive = false;
四、效果图
【Java_项目篇&1&】--JAVA实现坦克大战游戏--子弹连发+爆炸效果(四)
前期相关文章【Java_项目篇】–JAVA实现坦克大战游戏–画出坦克(一)
【Java_项目篇】–JAVA实现坦克大战游戏–坦克移动+添加敌方坦克(二)
【Java_项目篇】–JAVA实现坦克大战...
基于java的坦克大战实例
原创性声明
此博文的出处 为 http://blog.csdn.net/zhujunxxxxx/article/details/如果进行转载请注明出处。本文作者原创,邮箱zhujun...
java实现的坦克大战
《Java实现的坦克大战》
一.程序基本结构
二.实现的功能
1、单人模式
2、双人模式
3、通过深度优先算法实现的AI坦克寻路功能
4、局域网联机(半成品,以后补坑)
三.运行效果...
【Java_项目篇&1&】--JAVA实现坦克大战游戏--画出坦克(一)
为什么选择这个项目?
1.好玩,有趣
2.涉及到java基础的各个方面的技术:
面向对象思想、多线程、IO、绘图技术、监听事件、数据库、界面编程
3.巩固旧的知识
黑色框为JFrame 红...
JAVA实现经典坦克大战及源代码下载
一、简单介绍
这是一个功能相对全的JAVA版坦克大战,界面绘制是通过JAVA的图形化用户界面完成的,包括了菜单界面和游戏界面。其中菜单界面可以供玩家选择重新开始游戏、暂停、继续、是否播...
【Java_项目篇&1&】--JAVA实现坦克大战游戏--坦克发射子弹(三)
前期相关文章【Java_项目篇】–JAVA实现坦克大战游戏–画出坦克(一)
【Java_项目篇】–JAVA实现坦克大战游戏–坦克移动+添加敌方坦克(二)一、任务需求添加hero坦克子弹并且发射。二、...
Java之详解坦克大战游戏(六)
现在代码已经越写越多了,这里我们又新建一个包com.TankGame4,复制原来的两个java文件,首先我们来实现一个功能:防止敌人的坦克重叠运动。我们把判断是否碰撞的函数写到EnemyTank类中 ...
TankWar 单机(JAVA版)版本1.9 敌军坦克自动移动 自动攻击 及判断边界
按照项目来吧
首先是让敌军坦克动起来 ,要想让敌军坦克动起来 要明白我方坦克是怎么动的呢?
你会说按上下左右键 ,仔细想想怎么让敌军坦克模拟按了上下左右键?
我们按上下左右键主要是让给坦克一个方...
第一个java程序
坦克大战单机版
网上坦克大战的游戏并不少,包括单机版,网络版。然而,作为一名程序员,学一门语言的最好方式莫过于写程序。在写的过程中,你会遇到很多的问题,这个时候你再去找原因,查帮助文档,谷歌百度等等,你的能力才会进步...
图片版坦克大战源代码之坦克类(二)
import java.awt.G
import java.awt.I
import java.awt.R
没有更多推荐了,}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信