当前位置:文档之家› java课程设计--坦克大战游戏(带源码)

java课程设计--坦克大战游戏(带源码)

} for(int i=0;i<explodes.size();i++){
Explode e=explodes.get(i); e.draw(g); }
for(int i=0;i<tanks.size();i++){ Tank t=tanks.get(i); t.collidesWithWall(w1); t.collidesWithWall(w2); t.collidesWithTanks(tanks); t.draw(g);
this.x = x; this.y = y; this.w = w; this.h = h; this.tc = tc; } public void draw(Graphics g){ g.fillRect(x,y,w,h); } public Rectangle getRect(){ return new Rectangle(x,y,w,h); } }
1. 实验设计目的:
(1)掌握类的定义和使用; (2)掌握对象的定义; (3)掌握线程的使用。
2. 实验设计内容:
设计一款坦克大战游戏
3. 技术要点:
游戏中的图形的碰撞校验
4. 实验条件:
(1)主要设备: 586或更高机型,256MB或更高的内存,40G或更大的硬盘。 (2)主要软件:
①操作系统可为Windows9X、WinMe、Win2000或更高版本等; ②开发环境为jdk或者jcreator。 (3)参考书目: ①尹继平,张帆.java范例大全.机械工业出版社 ②施霞萍.java程序设计教程.机械工业出版社
g.setColor(Color.RED); g.drawRect(x,y-5, WIDTH,5); int w=WIDTH*life/100; g.fillRect(x, y-5, w, 5); g.setColor(c); } } private class BloodBar_B{ public void draw(Graphics g){
}
int x, y;
private static Random r = new Random();
private boolean bL = false, bU = false, bR = false, bD = false;
//enum Direction {L, LU, U, RU, R, RD, D, LD, STOP};
类是生成坦克的,wall是生成游戏中的墙体的。TankClient是这个游戏的主函数的 类,这里调用其他类,运行游戏。
程序源码: //TankClient类:
import java.awt.*; import java.awt.event.*; import java.util.*; import java.util.List; import java.util.ArrayList;
} } private class KeyMonitor extends KeyAdapter{
public void keyReleased(KeyEvent e) { myTank.KeyReleased(e);
}
@Override public void keyPressed(KeyEvent e) {
Color c=g.getColor(); g.setColor(Color.GREEN); g.drawRect(x,y-5, WIDTH,5); int w=WIDTH*life/100; g.fillRect(x, y-5, w, 5); g.setColor(c); } } public boolean isLive() { ret.draw(g); //enemyTank.draw(g); myTank.eat(b); w1.draw(g); w2.draw(g); b.draw(g);
} public void update(Graphics g) {
if(offScreenImage==null){ offScreenImage=this.createImage(GAME_WIDTH,GAME_HEIGHT);
public static void main(String[] args) { TankClient tc=new TankClient(); uchFrame();
} private class PaintThread implements Runnable{
public void run() { while(true){ repaint(); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } }
public void windowClosing(WindowEvent e) { System.exit(0); //super.windowClosing(e);
} });
this.addKeyListener(new KeyMonitor());
new Thread(new PaintThread()).start(); } Blood b=new Blood();
public class TankClient extends Frame{ public static final int GAME_WIDTH=800; public static final int GAME_HEIGHT=600;
Tank myTank=new Tank(700,500,true,Direction.STOP,this); //Tank enemyTank=new Tank(100,100,false,this);
myTank.keyPressed(e); } } }
//Wall类
import java.awt.*;
public class Wall {
int x, y, w, h; TankClient tc;
public Wall(int x, int y, int w, int h, TankClient tc) {
}
Graphics gOffScreen=offScreenImage.getGraphics(); Color c=gOffScreen.getColor(); gOffScreen.setColor(Color.GRAY); gOffScreen.fillRect(0, 0, GAME_WIDTH,GAME_HEIGHT); gOffScreen.setColor(c); paint(gOffScreen); g.drawImage(offScreenImage,0, 0,null); }
public int getLife() { return life;
}
public void setLife(int life) { this.life = life;
} private class BloodBar_G{
public void draw(Graphics g){ Color c=g.getColor();
public void setLive(boolean live) { this.live = live;
}
TankClient tc;
private boolean good;
private int oldX, oldY;
public boolean isGood() { return good;
public void paint(Graphics g) { g.drawString("子弹个数:"+missiles.size(),10,50); g.drawString("击中个数:"+explodes.size(),10,70); g.drawString("坦克数量:"+tanks.size(),10,90); g.drawString("生命值:"+myTank.getLife(),10,110); if(tanks.size()<=0){ for (int i=0;i<10;i++){ tanks.add(new Tank(100+40*i+1,100,false,Direction.D,this } }
5. 实验方法与步骤:
这个游戏的开发从1.0版本到2.8版本一共28个版本。从第一个版本的游戏 界面设计,到添加第一辆坦克,给坦克添加动作,再给坦克添加炮弹,添加游戏 中的墙体,生成敌军坦克,给游戏添加图片等。在最终版的程序中一共七个类如 图一所示
其中Blood类是控制坦克的生命值的,Direction用是enum是控制游戏中一切物体 运动方向。Explode是控制坦克被命中时爆炸的,Missile类是控制炮弹的。Tank
Wall w1 =new Wall(400,200,20,300,this),w2=new Wall(500,300,300,20, //Explode e=new Explode(70,80,this); List<Explode> explodes =new ArrayList<Explode>(); List<Missile> missiles =new ArrayList <Missile> (); List<Tank> tanks =new ArrayList <Tank> ();
for(int i=0;i<missiles.size();i++){ Missile m=missiles.get(i); m.hitTanks(tanks); m.hitTank(myTank); m.hitWall(w1); m.hitWall(w2); //m.hitTank(enemyTank); m.draw(g);
相关主题