Java项目--坦克大战1,java--坦克大战
分享于 点击 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
}
小结:首先我们要有一个全局观,里面需要什么角色,需要什么对象(主坦克、敌人坦克、子弹等),我们需要知道;其次各个对象有什么功能动作得展示出来(上下左右运动、发射子弹等);再者就是代码的实现,通过判断以及函数的封装调用等来使我们的功能得以实现。
相关文章
- 暂无相关文章
用户点评