[java]代码库
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
public class TankClient extends JFrame{
Image OffScrennImage = null; //双缓冲内存图片存储
/*游戏大小*/
public static final int GAME_WIDTH = 800; //界面宽
public static final int GAME_HEIGTH = 600; //界面高
Tank myTank = new Tank(500,400,true,Color.red,Tank.Direction.STOP, this);//我方坦克类
List<Missile> missiles = new ArrayList<Missile>();//子弹的集合
List<Explode> explode = new ArrayList<Explode>();//爆炸集合
List<Tank> tanks = new ArrayList<Tank>(); //坦克集合
Wall wall1 = new Wall(150,200,20,300,this); //墙1
Wall wall2 = new Wall(250,500,300,20,this); //墙2
Wall wall3 = new Wall(650,200,20,300,this); //墙2
Wall wall4 = new Wall(250,300,300,20,this); //墙2
Wall wb = new Wall(750,550,40,40,this); //墙2
Blood b = new Blood(); //血类
public static void main(String[] args) {
TankClient tc=new TankClient();
tc.lauchFrame();
}
private void lauchFrame() {
for (int i = 0; i < 10; i++){
tanks.add(new Tank(50+40*(i+1), 50, false,Color.blue,Tank.Direction.D, this));
}
this.setLocation(100, 100); //窗口初始坐标点
this.setSize(GAME_WIDTH, GAME_HEIGTH); //窗口初始大小
this.setTitle("TankWar"); //窗口名称
/*窗口监听*/
this.addWindowListener(new WindowAdapter() {
/*点退出叉之后运行*/
public void windowClosing(WindowEvent e) {
System.exit(0); //退出
}
});
this.addKeyListener(new KeyMoniton()); //设置键盘监听
this.setVisible(true); //设置窗口显现
this.setResizable(false); //设置窗口不可改变大小
this.getContentPane().setBackground(Color.green); //设置窗口前景色为绿色
new Thread(new PaintThread()).start(); //开始运行PaintThread类run
}
public void paint(Graphics g) {
//Graphics为画笔类
super.paint(g);
myTank.draw(g);
wall1.draw(g);
wall2.draw(g);
wall3.draw(g);
wall4.draw(g);
wb.draw(g);
b.draw(g);
myTank.eatBlood(b);
myTank.hitWall(wall1);
myTank.hitWall(wall2);
myTank.hitWall(wall3);
myTank.hitWall(wall4);
/*循环子弹集合*/
for (int i = 0; i < missiles.size(); i++){
Missile m = missiles.get(i); //获取当前子弹
m.hitTanks(tanks); //自己子弹打死敌方坦克
m.hitWall(wall1); //子弹与墙
m.hitWall(wall2);
m.hitWall(wall3);
m.hitWall(wall4);
m.hitTank(myTank);//敌人子弹打击自己的坦克
m.draw(g); //画子弹
}
for (int i = 0; i < explode.size(); i++){
explode.get(i).draw(g); //画爆炸
}
for (int i = 0; i < tanks.size(); i++){
Tank t = tanks.get(i);
t.draw(g); //画敌方坦克
t.hitTanks(tanks);
t.hitWall(wall1); //坦克与墙
t.hitWall(wall2);
t.hitWall(wall3);
t.hitWall(wall4);
}
//g.setFont(new Font("宋体",Font.BOLD,20));
g.drawString("missiles count:"+missiles.size(), 10, 50);//显示
g.drawString("explode count:"+explode.size(), 10, 80);//显示
g.drawString("tanks count:"+tanks.size(),10, 110);
g.drawString("myTank Life:"+myTank.getLife(), 10, 130);
g.drawString("回血:", 750, 540);
g.drawString("方向键移动方向;E:释放移动血快", 10, 590);
g.drawString("z:发射东风-31;a:发射东风-41;", 10, 570);
g.drawString("F2:复活;F3:敌方复活(对多20)", 10, 550);
g.drawString("R:位置还原;Q:血量加满", 10, 530);
}
@Override
/*repaint-〉update->paint*/
public void update(Graphics g) {
super.update(g);
if(OffScrennImage == null)
OffScrennImage = this.createImage(GAME_WIDTH, GAME_HEIGTH);
Graphics goffscrenn = OffScrennImage.getGraphics(); //设置一个内存画笔颜色为前景图片颜色
Color c = goffscrenn.getColor(); //还是先保存前景颜色
goffscrenn.setColor(Color.green); //设置内存画笔颜色为绿色
goffscrenn.fillRect(0, 0, GAME_WIDTH, GAME_HEIGTH); //画成图片,大小为游戏大小
goffscrenn.setColor(c); //还原颜色
g.drawImage(OffScrennImage, 0, 0, null); //在界面画出保存的图片
paint(goffscrenn); //把内存画笔调用给paint
}
private class PaintThread implements Runnable{
public void run() {
while(true){
repaint(); //运行顺序repaint->update->paint
try{
Thread.sleep(50); //每隔50毫秒刷新画面一次
}catch(Exception e){
e.printStackTrace();
}
}
}
}
/*键盘响应*/
private class KeyMoniton extends KeyAdapter{
/*摁下键盘响应*/
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
myTank.KeyPressed(e);
}
/*抬起键盘响应*/
public void keyReleased(KeyEvent e) {
super.keyReleased(e);
myTank.keyReleased(e);
}
}
}
初级程序员
by: 想要吃掉柠檬 发表于:2018-07-05 22:38:24 顶(0) | 踩(0) 回复
感觉java比c++要火好多,c++那都快要成为鬼区了
回复评论