欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

Java项目--坦克大战1,java--坦克大战

来源: javaer 分享于  点击 11723 次 点评:194

Java项目--坦克大战1,java--坦克大战


前言

我们既然要做这个游戏,首先我们必须知道这个游戏里面应该有什么成员,成员都有什么属性。

成员:

1、游戏界面的面板

关卡

难度

总成绩

2、自己的英雄坦克

方向

子弹

生命值

3、敌军坦克

方向随机

总数量,单次数量

4、子弹

5、记录成绩以及生命值


如图:


坦克类 

所有的坦克都有的属性 方向 颜色 速度 生命 所以我们将上面几种功能封装成函数如下:
//定义一个坦克类
class Tank
{
	//b表示坦克的横坐标x 和纵坐标y
	int x=0;
	int y=0;
	// 定义方向  0表示向上 1表示右, 2表示下 3表示左
	int direct=0;
	//坦克颜色
	int color=0;
	//坦克速度 活着
	//boolean isLive=true;
	int speed=5;
	public Tank(int x, int y)
	{
		this.x=x;
		this.y=y;
	}
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	public int getDirect() {
		return direct;
	}
	public void setDirect(int direct) {
		this.direct = direct;
	}
	public int getSpeed() {
		return speed;
	}
	public void setSpeed(int speed) {
		this.speed = speed;
	}
	public int getColor() {
		return color;
	}
	public void setColor(int color) {
		this.color = color;
	}
	//public boolean isLive() {
	//	return isLive;
	//}
	//public void setLive(boolean isLive) {
	//	this.isLive = isLive;
	//}
}

自己的坦克:

方向 速度 子弹 它的生命值要通过敌人发出的子弹进行判断然后做出相应的变化,如果判断击中则死亡复活生命值减1,所以不在自己的坦克里进行判断

定义自己的坦克

//我的坦克
class Hero extends Tank
{
	 //Shot s=null;
	//定义子弹容器
	 //Vector<Shot> ss=new Vector<Shot>();
	public Hero(int x, int y)
	{
		super(x,y);
	}
	/*public void shotEnemy()
	{
		
		switch(this.direct)
		{
		case 0:
			s=new Shot(x+10,y ,0);
			ss.add(s);
			break;
		case 1:
			s=new Shot(x+30,y+10, 1);
			ss.add(s);
			break;
		case 2:
			s=new Shot(x+10,y+30, 2);
			ss.add(s);
			break;
		case 3:
			s=new Shot(x,y+10, 3);
			ss.add(s);
			break;
		}
		//创建线程并启动
		Thread t=new Thread(s);
		t.start();
	}  */
	//坦克向上移动  
	public void moveUp()
	{
		y-=speed;
	}
	//坦克向右移动
	public void moveRight()
	{
		x+=speed;
	}
	//向下移动
	public void moveDown()
	{
		y+=speed;
	}
	//向左边移动
	public void moveLeft()
	{
		x-=speed;
	}
}

重绘

通过键移动,坦克得做出相应的调整,炮筒得朝着相应的方向吧!重新绘制坦克。代码如下:
	//重写paint
	public void paint(Graphics g)
	{
		super.paint(g);
		//设置图像的背景色
		g.fillRect(0, 0, 400, 300);
		//绘制坦克参数传错绘制的坦克也是错的
		this.drawTank(hero.getX(), hero.getY(), g, hero.direct, 1);
	}
	//绘制坦克的函数
	public void drawTank(int x, int y, Graphics g, int direct, int type)
	{
		switch(type)
		{
		case 0:
			g.setColor(Color.cyan);
			break;
		case 1:
			g.setColor(Color.yellow);
			break;
		}
		// 判断方向
		switch(direct)
		{
		case 0:   // 向上
			
			//画出我的坦克(到时候会封装成一个函数)
			//1:画出左面的矩形
			//设置画笔的颜色,绘制矩形
			//1:绘制左边的矩形<span >			</span>//这里是相关参数介绍
			g.fill3DRect(x, y, 5, 30,false);        //g.fill3DRect(x, y, width, height, raised);
			//2:绘制右边的矩形
			g.fill3DRect(x+15,y, 5, 30,false);
			//3:绘制中间矩形
			g.fill3DRect(x+5, y+5,10, 20,false);
			//4:画出圆形
			g.fillOval(x+5, y+10, 10, 10);<span >		</span>//g.fillOval(x, y, width, height);
			//5:绘制炮筒
			g.drawLine(x+10, y+15, x+10, y);	//g.drawLine(x1, y1, x2, y2);
			break;
		case 1:			//向右
			//绘制左边的矩形
			g.fill3DRect(x, y, 30, 5, false);
			//绘制右边的矩形
			g.fill3DRect(x, y+15, 30, 5, false);
			//绘制中间矩形
			g.fill3DRect(x+5, y+5, 20, 10,false);
			//画出圆形
			g.fillOval(x+10, y+5, 10, 10);
			//绘制炮筒
			g.drawLine(x+15, y+10, x+30, y+10);
			break;
		case 2:			//向下
			g.fill3DRect(x, y, 5, 30, false );
			g.fill3DRect(x+15, y, 5, 30, false);
			g.fill3DRect(x+5, y+5, 10, 20, false);			
			g.fillOval(x+5, 10+y, 10, 10);
			g.drawLine(x+10, 15+y, x+10, 30+y);
			break;
			
		case 3:			//向左
			g.fill3DRect(x, y, 30, 5, false);
			g.fill3DRect(x, y+15, 30, 5, false);
			g.fill3DRect(x+5, y+5, 20, 10,false);
			g.fillOval(x+10, y+5, 10, 10);
			g.drawLine(x+15, y+10, x, y+10);
			break;
		}
		
		
	}

移动

//键按下处理a s w d 
	public void keyPressed(KeyEvent e){
		if(e.getKeyCode()==KeyEvent.VK_W){
			//向上
			//这是在方向上重新绘制坦克,炮筒和方向相对应
			this.hero.setDirect(0);
			this.hero.moveUp();
		}else if (e.getKeyCode()==KeyEvent.VK_D)
		{
			//向右
			this.hero.setDirect(1);
			this.hero.moveRight();
		}else if (e.getKeyCode()==KeyEvent.VK_S)
		{
			this.hero.setDirect(2);
			this.hero.moveDown();
		}else if (e.getKeyCode()==KeyEvent.VK_A)
		{
			this.hero.setDirect(3);
			this.hero.moveLeft();
		}
		//重新绘制窗口
		this.repaint();
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}	

小结:首先我们要有一个全局观,里面需要什么角色,需要什么对象(主坦克、敌人坦克、子弹等),我们需要知道;其次各个对象有什么功能动作得展示出来(上下左右运动、发射子弹等);再者就是代码的实现,通过判断以及函数的封装调用等来使我们的功能得以实现。



相关文章

    暂无相关文章

用户点评