1.操作方法与说明
操作:W:上 A:左 S:下 D:右 J:发子弹 K:大招
说明:红色坦克为自己的坦克,蓝色为敌方坦克,我防坦克右100血,每次被攻击到就会减少10血,直至死亡,我方坦克阵亡后,按F2可以重新开始。
2.坦克大战程序
将以下Class,放在一个包内,运行TankWarClient即可
效果图
/**
* 坦克游戏主客户端,负责响应机制与主要操作等
*/
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
public class TankWarClient extends Frame {
private static final long serialVersionUID = 1L;
Tank MyTank=new Tank(50,50,true,this);//创建我方坦克
List<Missile> missiles=new ArrayList<Missile>();//子弹容器
List<Explode> explodes =new ArrayList<Explode>();//爆炸容器
List<Tank> tanks =new ArrayList<Tank>();//坦克容器
List<Wall> walls=new ArrayList<Wall>();//墙
List<Blood>bloods=new ArrayList<Blood>();//血块
Random r=new Random();
Image offImage=null;
public static final int GAME_WEITH=800;
public static final int GAME_HEIGHT=600;
public void paint(Graphics g) {
g.drawString("missiles count:"+missiles.size(), 10, 50);//显示出子弹个数
g.drawString("explodes count:"+explodes.size(), 10, 70);//爆炸个数
g.drawString("tanks count:"+tanks.size(), 10, 90);//坦克个数
g.drawString("tank life:"+MyTank.getGlife(), 10, 120);//坦克的剩余生命
//画出血块
for(int i=0;i<bloods.size();i++){
Blood bl=bloods.get(i);
bl.hitTanks(tanks);//血块碰撞坦克检测
bl.draw(g);
}
for(int i=0;i<missiles.size();i++){
Missile Mi=missiles.get(i);
Mi.hitTanks(tanks);
Mi.hitWalls(walls);
Mi.draw(g);
}
for(int i=0;i<explodes.size();i++){
Explode Ex=explodes.get(i);
Ex.draw(g);
}
for(int i=0;i<tanks.size();i++){
Tank tan=tanks.get(i);
tan.hitWalls(walls);
tan.hitTanks(tanks);
tan.draw(g);
}
for(int i=0;i<walls.size();i++){
Wall wa=walls.get(i);
wa.draw(g);
}
int ra=r.nextInt(400);
if(ra==10){
//随机加入血块
bloods.add(new Blood(200,200,this));
}
}
//设置双缓冲,防止图片闪烁
public void update(Graphics g) {
if(offImage==null){
offImage=this.createImage(GAME_WEITH,GAME_HEIGHT);
}
Graphics goff=offImage.getGraphics();
Color c=goff.getColor();
goff.setColor(Color.white);
goff.fillRect(0, 0, GAME_WEITH,GAME_HEIGHT);
goff.setColor(c);
paint(goff);
g.drawImage(offImage, 0, 0, null);
}
void launchFram(){
//增加10个对方坦克
for(int i=0;i<10;i++){
tanks.add(new Tank(200+50*i,200+50*i,false,this));
}
walls.add(new Wall(200,300,100,20,this));
walls.add(new Wall(400,150,20,200,this));
tanks.add(MyTank);
this.setBounds(100, 100, GAME_WEITH,GAME_HEIGHT);
this.setVisible(true);
this.setTitle("TankWar");
this.setResizable(false)