关闭

java项目之——坦克大战26

标签: java项目
482人阅读 评论(0) 收藏 举报
分类:

本版本做最后的修正:敌人死光重新加入,主战坦克死掉F2重新开始。

1.主类中: 画方法里面判断,如果无敌方坦克,就添加。

		if(tanks.size()<=0){
			for(int i=0;i<10;i++){
				tanks.add(new Tank(50+40*(i+1),50,false,Tank.Direction.D,this));
			}
		}

2.坦克类中:按键监听里面,如果战亡,重新复活。

case KeyEvent.VK_F2: 
			if(!this.live){
				this.live = true;
				this.life= 100;
			}

本版本为最后一个版本,一个小坦克项目写了这么久也是不容易啊,希望以后多看,麻雀虽小五脏俱全,里面涉及到的java基础知识很多,面向对象,集合,泛型,内部类, 线程,监听,变量,数据,对象,构造方法,this等等的用法。还有做项目的思维,一步一步不能太急,再难的问题,分解下来就会很简单。


下一阶段:复习java知识,投递简历。

附tankClient的代码:

public class TankClient extends Frame {
	public static final int GAME_WIDTH =800;
	public static final int GAME_HEIGHT =600;
	
	Tank myTank = new Tank(50, 50,true,Tank.Direction.STOP,this);
    //Tank enemyTank = new Tank(100,100,false,this); 
	
	Wall w1 = new Wall(100, 200, 20, 150, this), w2 = new Wall(300, 100, 300, 20, this);
	
	Image offScreenImage = null;
	List<Missile> missiles = new ArrayList<Missile>();     //泛型  删加 效率相对高
	
	List<Explode> explodes = new ArrayList<Explode>();     
	
	List<Tank> tanks = new ArrayList<Tank>();
	
	Blood b =  new Blood(); 
	
	public void paint(Graphics g) {
		g.drawString("missiles count:"+missiles.size(), 10,50);
		//g.drawString("explodes count:"+explodes.size(), 10,70);
		
		if(tanks.size()<=0){
			for(int i=0;i<10;i++){
				tanks.add(new Tank(50+40*(i+1),50,false,Tank.Direction.D,this));
			}
		}
		
	    for (int i = 0; i < missiles.size(); i++) {
			Missile m = missiles.get(i);
			m.hitWall(w1);
			m.hitWall(w2);
			m.draw(g);
			m.hitTanks(tanks);
			m.hitTank(myTank);
		}
            
	    for (int i = 0; i < explodes.size(); i++) {
			Explode e = explodes.get(i);
			e.draw(g);
			
		}
	    
    	for(int i=0; i<10; i++){
	        Tank t = tanks.get(i);
	        t.collidesWithWall(w1);
	        t.collidesWithWall(w2);
	        t.collidesWithTanks(tanks);
	        t.draw(g);
	    }
    	b.draw(g);
    	w1.draw(g);
    	w2.draw(g);
		myTank.draw(g);	
		myTank.eat(b);
		
	}

	public void update(Graphics g) {
		if(offScreenImage == null){
			offScreenImage = this.createImage(GAME_WIDTH,GAME_HEIGHT);
		}
		Graphics gOffScreen = offScreenImage.getGraphics();
		Color c = gOffScreen.getColor();
		gOffScreen.setColor(Color.GRAY);
		gOffScreen.fillRect(0, 0, 800, 600);
		gOffScreen.setColor(c);
		print(gOffScreen);
		g.drawImage(offScreenImage, 0, 0, null);
	}

	public void lauchFrame(){
		for(int i=0;i<10;i++){
			tanks.add(new Tank(50+40*(i+1),50,false,Tank.Direction.D,this));
		}
		this.setSize(GAME_WIDTH,GAME_HEIGHT);
		this.setTitle("TankWar");
		this.setLocation(80, 60);
		this.setVisible(true);
		this.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e) {
			    System.exit(0);	
			}
		});
		this.setResizable(false);
		new Thread(new paintThread()).start();
		this.addKeyListener(new KeyMonitor());
	}
	public static void main(String[] args) {
		TankClient tc = new TankClient();
		tc.lauchFrame();
	}
	private class paintThread implements Runnable {   //线程 内部类 为此线程服务

		public void run() {
			while(true){
				repaint();
				try {
					Thread.sleep(50);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		
	}
	private class KeyMonitor extends KeyAdapter{
		
		public void keyReleased(KeyEvent e) {
			myTank.keyReleased(e);
		}

		public void keyPressed(KeyEvent e) {
			myTank.keyPressed(e);
		}
	}	
}


0
0
查看评论

Java之详解坦克大战游戏(四)

目前我们的坦克能发子弹,但是只能发一颗,而且打到敌人坦克敌人还不会消失,本篇我们就来解决这个问题…子弹要想做到连发,就得初始化多个子弹,这个时候我们仍然还是跟定义敌人的坦克组一样用Vector集合..class Hero extends Tank { //子弹 Vector<S...
  • lxjstudyIT
  • lxjstudyIT
  • 2016-07-23 22:37
  • 1825

【Java_项目篇<1>】--JAVA实现坦克大战游戏--画出坦克(一)

为什么选择这个项目? 1.好玩,有趣 2.涉及到java基础的各个方面的技术: 面向对象思想、多线程、IO、绘图技术、监听事件、数据库、界面编程 3.巩固旧的知识 黑色框为JFrame 红色框为JPanel ,由于JFrame不提供画图方法,所以我们只能在JPanel里画图,最后把JPa...
  • qq_24653023
  • qq_24653023
  • 2016-08-16 22:43
  • 8941

java项目之——坦克大战06

功能:让坦克运动由我们来控制 内容:添加键盘监听类keyMonitor。            TankClient添加键盘监听器。      ...
  • chdyiboke
  • chdyiboke
  • 2016-08-12 17:43
  • 237

java项目之——坦克大战20

本版本:添加两堵墙。 1.在主类中:墙对象 Wall w1 = new Wall(100, 200, 20, 150, this), w2 = new Wall(300, 100, 300, 20, this); for (int i = 0; i < missiles.size(); i...
  • chdyiboke
  • chdyiboke
  • 2016-08-29 20:26
  • 501

java项目之——坦克大战15

在15版本之前解决了坦克和炮弹的问题,现在,开始写敌方坦克的代码。 1.加入区别敌我的量bGood(也可以建一个敌方坦克类,在这没有必要) private boolean good; 2。修改构造方法 public Tank(int x,int y,boolean good){ th...
  • chdyiboke
  • chdyiboke
  • 2016-08-28 08:56
  • 381

java项目之——坦克大战01

功能:产生一个窗口。 知识点:主类继承Frame类 import java.awt.Frame; public class TankClient extends Frame { public void lauchFrame(){ this.setSize(400,300); t...
  • chdyiboke
  • chdyiboke
  • 2016-08-08 20:01
  • 307

java项目之——坦克大战16

版本:一颗子弹击中敌方坦克——面向对象思维分析            是否打中:hatTank方法;(游戏中碰撞检测,有些复杂,一般直接调用库方法)在这里我们应用碰撞类:getRect(返回值Rec...
  • chdyiboke
  • chdyiboke
  • 2016-08-28 10:19
  • 292

java项目之——坦克大战23

本版本:主战坦克的生命值。 加入表示生命值的量:life 1.坦克类中:定义变量life private int life = 100;产生getlife和setlife方法 public int getLife() { return life; } public voi...
  • chdyiboke
  • chdyiboke
  • 2016-08-29 21:32
  • 354

java项目之——坦克大战14

上一个版本:坦克打出多发子弹; 功能:解决炮弹不消亡的问题,解决坦克出界问题。            子弹打中对方坦克或者出界,定义一个控制生死的变量。
  • chdyiboke
  • chdyiboke
  • 2016-08-28 08:01
  • 402

java项目之——坦克大战12

解决坦克停下来也可以打出炮弹:画出炮筒,在fire中把子弹方向给炮筒 1.创建坦克炮筒常量并初始化: private Direction ptDir = Direction.D;2.在draw方法里面画出炮筒 public void draw(Graphics g) { ...
  • chdyiboke
  • chdyiboke
  • 2016-08-14 11:45
  • 229
    个人资料
    • 访问:70876次
    • 积分:1824
    • 等级:
    • 排名:千里之外
    • 原创:116篇
    • 转载:16篇
    • 译文:0篇
    • 评论:15条
    最新评论