博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java项目之——坦克大战11
阅读量:2380 次
发布时间:2019-05-10

本文共 3319 字,大约阅读时间需要 11 分钟。

功能:1.根据主战坦克的方向和位置,打出子弹,Ctrl键的按键处理
            2.根据“坦克打出一发子弹”这句话,来确定
Tank
中的方法
fire
,其返回值为
Missle
            3.根据
Tank
方向和位置设定子弹的方向和位置并
new
出来,然后返回(
fire
方法的实现)
1.在按键监听里面加ctrl按键处理,代码如下
public Tank(int x, int y, TankClient tc) {          //tc是为了能够调用fire		this(x, y);		this.tc = tc;	}
       
tc.m=fire();也是创建tc的目的(持有对方的引用,用构造方法进行初始化),主类里面也要进行改动
Missile m = null;	Image offScreenImage = null;		public void paint(Graphics g) {  		if(m!=null)  m.draw(g);		myTank.draw(g);	}
       如果没有则不打出子弹(下一个版本将要解决的问题)
case KeyEvent.VK_CONTROL:tc.m = fire();break;                          //case穿透,如果不加的话
2.坦克里面fire方法(坦克要打出子弹)  返回子弹对象m(子弹应该在中点位置打出,还有静止的时候,子弹也静止打出)
添加常量:高度与宽度
坦克
public static final int WIDTH =30;public static final int HEIGHT =30;
子弹
public static final int WIDTH =10;public static final int HEIGHT =10;
坦克打出的位置计算:
public Missile fire() {		int x = this.x + Tank.WIDTH/2 - Missile.WIDTH/2;		int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2;		Missile m = new Missile(x, y, dir);		return m;	}
总结:本版本最主要对象是子弹,子弹打出及方向控制,位置等等。tc的创建,应该重  点理解,持有对方引用,然后通过构造方法初始化,然后赋值 tc.m = fire();
下一版本:创建炮筒,解决禁止子弹无运动方向的问题。
附上坦克类的代码(本版本主要改到类)
public class Tank {   public static final int XSPEED =5;   public static final int YSPEED =5;      public static final int WIDTH =30;   public static final int HEIGHT =30;      TankClient tc;   int x,y;   private boolean bL=false,bU=false,bD=false,bR=false;   enum Direction {L,LU,U,RU,R,RD,D,LD,STOP};   private Direction dir = Direction.STOP;      public Tank(int x,int y){	   this.x=x;	   this.y=y;	      }      public Tank(int x,int y,TankClient tc){	   this(x,y);	   this.tc=tc;	      }      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;	   }	      }   public void draw(Graphics g) {	    Color c = g.getColor();		g.setColor(Color.RED);		g.fillOval(x, y, WIDTH, HEIGHT);		g.setColor(c);		move();   }		   public void keyPressed(KeyEvent e) {		int key = e.getKeyCode();		switch(key){		case KeyEvent.VK_CONTROL:  tc.m = fire();  break;		case KeyEvent.VK_LEFT:  bL=true;  break;		case KeyEvent.VK_UP:    bU=true;  break;		case KeyEvent.VK_RIGHT: bR=true;  break;		case KeyEvent.VK_DOWN:  bD=true;  break;		}		locateDirection();	}      public void keyReleased(KeyEvent e) {	   int key = e.getKeyCode();	    switch(key){		case KeyEvent.VK_LEFT:  bL=false;  break;		case KeyEvent.VK_UP:    bU=false;  break;		case KeyEvent.VK_RIGHT: bR=false;  break;		case KeyEvent.VK_DOWN:  bD=false;  break;		}		locateDirection();	}			void locateDirection(){		if(bL && !bU && !bR && !bD)dir=Direction.L;		else if(bL && bU && !bR && !bD)dir=Direction.LU;		else if(!bL && bU && !bR && !bD)dir=Direction.U;		else if(!bL && bU && bR && !bD)dir=Direction.RU;		else if(!bL && !bU && bR && !bD)dir=Direction.R;		else if(!bL && !bU && bR && bD)dir=Direction.RD;		else if(!bL && !bU && !bR && bD)dir=Direction.D;		else if(bL && !bU && !bR && bD)dir=Direction.LD;		else if(!bL && !bU && !bR && !bD)dir=Direction.STOP;			}			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, dir);				return m;	}}

转载地址:http://clrxb.baihongyu.com/

你可能感兴趣的文章
在linux内核中操作文件的方法
查看>>
Linux下Socket编程
查看>>
Linux内核和用户空间通信的方式— proc文件和mmap共享内存
查看>>
基于DSP/BIOS和NDK的嵌入式网络操作系统设计方案
查看>>
CCS开发环境搭建小结
查看>>
DM642 gel文件和.cmd文件参考
查看>>
DSP软件优化小实验
查看>>
DSP/BIOS 介绍
查看>>
多线程编程之重点--使用DSP/BIOS时选择线程类型的参考方法
查看>>
DSP/BIOS在嵌入式数据采集系统中的应用
查看>>
基于DSP/BIOS和NDK的嵌入式网络操作系统设计方案
查看>>
迅雷C++试题及解答
查看>>
Linux 中断学习之小试牛刀篇
查看>>
中断之原理篇
查看>>
高内聚 低耦合
查看>>
GUI开发之DirectFB
查看>>
GTK/DirectFB两个闪烁的问题
查看>>
《Linux内核修炼之道》 之 高效学习Linux驱动开发
查看>>
编写可移植C/C++程序的要点
查看>>
DirectFB代码导读
查看>>