java初学者项目 坦克大战

游戏说明:
玩家可以操纵自己的坦克,通过发射子弹击毁敌机,敌机用同样的方式击毁玩家的坦克。&&&&
基于java版的坦克大战实现思路:
1.0:游戏界面设计
&&&&&&&& --游戏的界面采用JPanel 游戏的主要活动区在这个JPanel上进行
&&&&&&&& --游戏的界面素材采用java代码的paint方法绘制坦克 炸弹效果导入外部图片素材
首先常见一个JPanel,绘制出坦克和子弹,主意,坦克的绘制必须确定一个基准点,此后坦克的位置依赖与此坐标。
因此,现在需要一个MyPanel类来承载游戏的界面可视化区域。该类继承自JPanel类。
MyPanel类的paint()方法可以很有效的绘制出坦克和子弹,注意到repaint()方法可以很方便的执行paint()方法,游戏的核心就是让显示器不停的刷新当前页面。通过repaint()很方便能做到这点。
而让MyPanel是很有必要的,游戏开始之后,我们让repaint()可以自动的运行,而不是通过响应某种事件。
现在,有了坦克和子弹之后,下一步就是让JFrame能监听到玩家按下空格键,这个很容易可以实现,当监听到玩家的事件之后,监视器马上执行发射子弹行为。这个行为是由坦克自身发出的,并且考虑到所有的坦克都有发射子弹的功能,为此,需要先写我们的Tank类。这个类是敌人坦克和我方坦克共有的,其余两者均继承自(Class) Tank类。
这个类的设计思路如下
该类定义的坦克的初始速度,方向,子弹的速度,并且具有发射子弹的功能。代码如下:
public class Tank {
&&& int positionX;&&& &&& //坦克的初始位置x
&&& int positionY;&&& &&& //坦克的初始位置y
&&& int&&&&&& &&& //坦克的方向
&&& int&&& &&& &&& //坦克速度
&&& int bulletSpeed=10;& //子弹速度
&&& public int getPositionX() {
&&&&&& return positionX;
&&& public void setPositionX(int positionX) {
&&&&&& this.positionX = positionX;
&&& public int getPositionY() {
&&&&&& return positionY;
&&& public void setPositionY(int positionY) {
&&&&&& this.positionY = positionY;
&&& public int getDirect() {
&&&&&& return
&&& public void setDirect(int direct) {
&&&&&& this.direct =
&&& public int getSpeed() {
&&&&&& return
&&& public void setSpeed(int speed) {
&&&&&& this.speed =
&&& //坦克上移
&&& public void moveUp()
&&& //坦克向右
&&& public void moveRight(){
&&& //坦克下移
&&& public void moveDown(){
&&& //坦克左移
&&& public void moveLeft(){
&&& //坦克射击子弹行为
&&& public void shout()
注意到shout这个方法,在用户按下空格键之后,通过监视器调用而发射子弹,但注意,子弹发射出去之后便不再受控制,为此,需要将每一个子弹都做成一个线程。出于这个缘故,并且考虑到子弹仍旧有属于自己的特性,比如速度、方向、初始位置等,需要将子弹单独做成一个类,这个类实现Runnable接口(为了后面产生其他武器,这里通过接口实现线程而不是继承而来)。当一个子弹杯创建之后,应当马上启动子弹的线程。
现在可以让我方的子弹在按下空格之后实现发射一个子弹,下一步是让玩家可以通过上下左右键控制坦克的方向。当玩家敲下相应的键之后,监视器马上调用继承自Tank的MTank(我方坦克)。这点很容易就试下,代码类似地:&
//坦克上移
&&& public void moveUp()
if(this.positionY&0) //保证用户不出界
&&&&&& this.positionY-=this.
下面的任务是让敌人也可以发射子弹,注意,敌人的子弹是不受玩家控制的,并且要求敌人子弹不能连发,也就是说,敌人的一个子弹在死亡之前,是不容许在产生新的子弹的,为了让敌人自动发射子弹,我们改变思路,找一个容器来存放敌人的子弹,在paint里面,通过遍历容器里面的子弹来模拟自动发射,注意:一旦程序执行,paint总是在不停的调用,因为JPanel已经是个线程,在它的run()函数中,用while循环来保证paint永远运转。
考虑到线程的安全问题,采用Vector 向量来存放子弹,
&&& Vector&Bullet& bullets=new Vector&Bullet&();
注意,每辆坦克都有自己的子弹容器,它是Tank类的一个属性。下一步,让坦克动起来,理所当然地,将敌方坦克做成一个线程,该线程让坦克自动运行,类似地在线程run中这样做:&&&&&&
while(true){
Thread.sleep(30);
&&& catch(Exception e){
&&& this.aotoMove();
&&&&&&&&&& }
到目前为止:我方的坦克可以通过控制自由移动并发射子弹,敌人的坦克也实现了自由移动并自动发射子弹。
下面要做的就是,当我方坦克击中敌人坦克之后,敌人坦克消失,反之亦然。
实现这一切比想象中的还要容易,只需要在paint中加入碰撞检测。
hitTest()函数将提供检测机制。当我方的坦克发射的子弹落在敌人坦克所在的区域,我们应该让敌方的坦克消失。
为了统一并实现该要求,需要定义一个Vector存放这个游戏中所有的敌方坦克,这样在paint绘制的时候,只需要读取Vector向量来动态的产生坦克。
下面,开始具体碰撞检测:
一旦检测到我方的坦克的子弹落在敌方坦克的区域,执行某操作,产生击毁效果。
一旦检测道敌方坦克的子弹落在我方坦克的区域,执行某操作,产生击毁效果。
一旦检测到子弹飞出游戏区域,执行某操作,从向量中移除该子弹
一旦检测到敌人的坦克互相碰撞或者遇到墙壁,执行某操作,改变方向
碰撞检测的过程必须要注意的是,由于碰撞检测放在paint类,执行速度过快,在检测完毕改变方向之后,一定要有一个延迟,不能马上判断,否则会出现&无头坦克&,到处乱撞。
解决的方法有:在坦克移动的时候,用for循环+Thread.sleep来控制坦克在一次移动中必须走完指定的路线。
2:在改变方向后,有一个小小的延迟,保证在此期间,坦克有一个微小的挣脱力来挣脱碰撞带来的困扰。
最后,在增加游戏开始的画面:新建一个JPanel,当游戏开始的时候显示这个界面,通过times%2的方法让这个界面的字符串有个闪的过程。
将MyPanel的创建放到一个合适的逻辑中。而不是一开始就。当执行MyPanel的时候,记得先移除新建的JPanel。
截止目前:游戏的基本功能已经完结。V_1.0
阅读(...) 评论()主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
CSDN &《程序员》研发主编,投稿&纠错等事宜请致邮
你只管努力,剩下的交给时光!
如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件。而上帝在努力创造出更大更傻的傻瓜。目前为止,上帝是赢的。个人网站:。个人QQ群:、
个人大数据技术博客:
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,
}代码运行效果截图记住登录一个月发表随想还能输入:200字该用户最新代码编程随想&by by by by by by [java]代码库
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
public class TankWar implements KeyListener {
static boolean TIMEOUT =
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 =
private static int selfMax = 3;
private boolean flash =
private TankWar tw =
static int SCORE = 0;
private final JFrame mainF;
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);
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);
if (!home.isLive()) {
f.removeKeyListener(tw);
p.repaint();
myTank.move();
for (int i = 1; i & allTanks.size(); i++) {
allTanks.get(i).move();
allTanks.get(i).setNoFire(myTank.getNoFire() + 1);
// if(allTanks.get(i).getX()%5==0&&allTanks.get(i).getY()%5==0)
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) {
// TODO Auto-generated method stub
public void keyPressed(KeyEvent e) {
if (over) {
if (e.getKeyCode() == KeyEvent.VK_F1) {
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,
[代码运行效果截图][源代码打包下载](50积分)[1695 次下载]分享到:更多回复评论回复评论回复评论回复评论回复评论共77 条评论
发表评论:评论须知:1、评论每次加2分,每天上限为30;2、请文明用语,共同创建干净的技术交流环境;3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。

我要回帖

更多关于 java初学者项目 的文章

 

随机推荐