关闭

java项目之——坦克大战14

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

上一个版本:坦克打出多发子弹;

功能:解决炮弹不消亡的问题,解决坦克出界问题。

           子弹打中对方坦克或者出界,定义一个控制生死的变量。

1.定义变量:live

private boolean live =true;      //炮弹是否在界面的变量
2.定义tc 并且判断islive, 如果 没有存在就调用移除方法。

  private TankClient tc;
  public boolean isLive() {          //调用isLive()来判断
         return live;
         }

public void draw(Graphics g){
        
		if(!live){
        	tc.missiles.remove(this);     //如果不在界面则移除
                return;
        }
		Color c = g.getColor();
		g.setColor(Color.BLACK);
		g.fillOval(x, y, WIDTH,HEIGHT);
		g.setColor(c);
		
		move();
	}
3.重写构造方法,tc来传入fire。	
public Missile(int x, int y,Tank.Direction dir,TankClient tc) {
		this.x = x;
		this.y = y;
		this.dir = dir;
		this.tc = tc;
	}
4.判断是否在界面内。
if(x<0||y<0||x>TankClient.GAME_WIDTH||y>TankClient.GAME_HEIGHT){         //数学上不在界面的表达
			live = false;
		}
5.坦克类中修改。
public Missile fire(){
		int x=this.x+Tank.WIDTH/2-Missile.HEIGHT/2;
		int y=this.y-Missile.WIDTH/2+Tank.HEIGHT/2;
		Missile m = new Missile(x, y, ptDir,this.tc);           //this.tc 是使用对方的引用,对子弹进行控制
		tc.missiles.add(m);
		return m;
	}

6.坦克的出界问题相对简单一些:不让坦克出界,在move中添加代码:
void move(){
	   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;
	   }	  
	   
	   if(this.dir!=Direction.STOP){
	       this.ptDir = dir;
	   }
	   //不让坦克出界代码
	   if(x < 0) x=0;
	   if(y<0) y=0;
	   if(x+Tank.WIDTH>TankClient.GAME_WIDTH) x=TankClient.GAME_WIDTH-Tank.WIDTH;
	   if(y+Tank.HEIGHT>TankClient.GAME_HEIGHT) y=TankClient.GAME_HEIGHT-Tank.HEIGHT;
   }

总结:子弹出界和坦克出界两个问题不同处理,再次理解持有对方引用的解决问题的方法。

下一版本:制造出敌方坦克。


0
0
查看评论

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

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

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

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

java项目之——坦克大战06

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

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
  • 455

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
  • 347

java项目之——坦克大战12

解决坦克停下来也可以打出炮弹:画出炮筒,在fire中把子弹方向给炮筒 1.创建坦克炮筒常量并初始化: private Direction ptDir = Direction.D;2.在draw方法里面画出炮筒 public void draw(Graphics g) { ...
  • chdyiboke
  • chdyiboke
  • 2016-08-14 11:45
  • 224

java项目之——坦克大战08

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

java项目之——坦克大战21

本版本:坦克不可相互穿越:                和墙类似,撞到时stay; 1.主方法中: t.collidesWithTanks(tanks)...
  • chdyiboke
  • chdyiboke
  • 2016-08-29 20:39
  • 208

java项目之——坦克大战22

本版本:超级炮弹,抬起一个键,八个方向发出子弹。 private void superFire() { Direction[] dirs = Direction.values(); //拿到数组 for(int i=0; i<8; i++) { fire(dirs[i])...
  • chdyiboke
  • chdyiboke
  • 2016-08-29 20:50
  • 347

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
  • 306
    个人资料
    • 访问:69681次
    • 积分:1815
    • 等级:
    • 排名:千里之外
    • 原创:116篇
    • 转载:16篇
    • 译文:0篇
    • 评论:15条
    最新评论