关闭

java项目之——坦克大战20

标签: java项目
361人阅读 评论(1) 收藏 举报
分类:
</pre><p>本版本:添加两堵墙。</p><p>1.在主类中:墙对象</p><p></p><pre name="code" class="html">Wall w1 = new Wall(100, 200, 20, 150, this), w2 = new Wall(300, 100, 300, 20, this);
        hitWall()子弹打墙
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<10; i++){
	        Tank t = tanks.get(i);
	        t.collidesWithWall(w1);
	        t.collidesWithWall(w2);
	        //t.collidesWithTanks(tanks);
	        t.draw(g);
	    }
    	w1.draw(g);
    	w2.draw(g);
		myTank.draw(g);	
		

2.在子弹类中:hitwall() 如果子弹撞上墙,则不存活。

public boolean hitWall(Wall w) {
		if(this.live && this.getRect().intersects(w.getRect())){
			this.live = false;
			return true;
		}
		return false;
		
	}



3.在坦克类中:

为了解决坦克撞墙后的运动问题:设置两个变量记录坦克前一位置,每次撞上墙后,坦克会找到前一个位置,然后离开。

private int oldX,oldY;

修改构造方法

	public Tank(int x,int y,boolean good){
       this.x=x;
       this.y=y;    
       
       this.oldX=x;
       this.oldY=y;
       this.good=good;
   }
//在移动前给前位置坐标赋值

move()中在开始给oldX和oldY赋值

void move(){
       this.oldX=x;
       this.oldY=y;
       switch(dir){
       case L: x -= XSPEED;break;
       case LU: x -= XSPEED; y -= XSPEED;break;
       case U: y -= XSPEED;break;
       case RU: x += XSPEED;y -= XSPEED;break;
       case R: x += XSPEED;break;
       case RD: x += XSPEED;y += XSPEED;break;
       case D: y += XSPEED;break;
       case LD: x -= XSPEED;y += XSPEED;break;
       case STOP: break;
       } 


坦克撞墙的方法 ,一旦撞上就会调用stay()

public boolean collidesWithWall(Wall w) {
        if(this.live && this.getRect().intersects(w.getRect())){
            this.stay();
            return true;
        }        
        return false;
    }   


stay()方法即是返回上一位置的方法

private void stay() {
        
        x = oldX;
        y = oldY;
        
    } 


总结:对于墙的处理:首先创建,然后子弹对墙,最后坦克对墙。坦克对墙的处理,使用了stay() 运用上个位置让子弹运动离开的方法很合理。

下个版本:坦克不能相互穿越。


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Java学习总结之坦克大战项目(完结版)

V1.0:
  • u011648768
  • u011648768
  • 2013-09-20 12:21
  • 2398

C++实战项目:坦克大战(一)

对坦克大战情有独钟是因为大学时候第一次参加程序设计比赛就做的这个游戏。当时用的语言是Java,那个比赛让我悟出了面向对象的强大之处,我也是从那时开始接触设计模式的。对我而言,坦克大战有着非同寻常的意义...
  • qq_26046771
  • qq_26046771
  • 2017-03-26 08:54
  • 8687

【Java_项目篇<1>】--JAVA实现坦克大战游戏--坦克发射子弹(三)

前期相关文章【Java_项目篇】–JAVA实现坦克大战游戏–画出坦克(一) 【Java_项目篇】–JAVA实现坦克大战游戏–坦克移动+添加敌方坦克(二)一、任务需求添加hero坦克子弹并且发射。二、...
  • qq_24653023
  • qq_24653023
  • 2016-08-20 21:33
  • 8367

java项目之——坦克大战14

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

java项目之——坦克大战26

本版本做最后的修正:敌人死光重新加入,主战坦克死掉F2重新开始。 1.主类中: 画方法里面判断,如果无敌方坦克,就添加。 if(tanks.size()<=0){ for(int i...
  • chdyiboke
  • chdyiboke
  • 2016-08-30 10:25
  • 383

java项目之——坦克大战10

实现了坦克的移动,现在要实现坦克可以打出炮弹: 功能:添加子弹类,添加方法和参数。 1.位置和方向属性 int x,y; Tank.Direction dir; 2.构造方法...
  • chdyiboke
  • chdyiboke
  • 2016-08-13 21:34
  • 364

java项目之——坦克大战24

图形化表示主战坦克的生命值 a.我们在坦克里面创造内部类: private BloodBar bb= new BloodBar(); b.根据不同 的life值来显示,吧它放在坦克的上面...
  • chdyiboke
  • chdyiboke
  • 2016-08-29 22:04
  • 311

java项目之——坦克大战19

本版本:让敌人的坦克更加智能(人工智能) 1.首先让它动起来:方向(move) 然后 随机数产生器 a.坦克中加方法: public Tank(int x,int y,Boolean good,...
  • chdyiboke
  • chdyiboke
  • 2016-08-29 14:02
  • 291

java项目之——坦克大战08

功能:然坦克向八个方向行走。(以前只有四个方向)。 内容:添加代表方向的量(枚举)             添加记录按键状态的布尔量     &...
  • chdyiboke
  • chdyiboke
  • 2016-08-12 19:51
  • 323

java项目之——坦克大战05

功能:代码重构(设置常量,比较简单) 内容:需要多处改变的量定义为常量。 public static final int GAME_WIDTH =800; public static final ...
  • chdyiboke
  • chdyiboke
  • 2016-08-12 16:36
  • 145
    个人资料
    • 访问:62675次
    • 积分:1633
    • 等级:
    • 排名:千里之外
    • 原创:105篇
    • 转载:16篇
    • 译文:0篇
    • 评论:15条
    最新评论