失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java——【案例】Java坦克大战游戏[版本1]能控制移动的GUI界面坦克大战游戏

Java——【案例】Java坦克大战游戏[版本1]能控制移动的GUI界面坦克大战游戏

时间:2021-05-08 23:27:59

相关推荐

Java——【案例】Java坦克大战游戏[版本1]能控制移动的GUI界面坦克大战游戏

效果:

代码:

1、主方法

(调用、显示面板,画图形)

//主方法,调用、显示面板,画图形import javax.swing.*;import java.util.EventListener;public class HspTankGame02 extends JFrame implements EventListener {Mypanel mp = null;public static void main(String[] args) {HspTankGame02 hspTankGame01 = new HspTankGame02();}public HspTankGame02(){//构造器mp = new Mypanel();this.add(mp);//面板(即游戏绘图区域)this.setSize(1000,750); //面板大小this.addKeyListener(mp);//让窗口JFrame添加监听mp的键盘事件this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //点击面板的叉×程序会停止this.setVisible(true); //可显示}}

2、面板类。

(设置面板要画的一些图形)

import javax.swing.*;import java.awt.*;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Vector;public class Mypanel extends JPanel implements KeyListener {//继承面板;实现监听(为了监听键盘事件)//定义我的坦克Hero hero = null;//定义敌人的坦克,放入到VectorVector<EnemyTank> enemyTanks = new Vector<EnemyTank>();int enemyTankSize = 3; //初始化一个敌人坦克数量public Mypanel(){hero = new Hero(100,100);//初始化自己的坦克//初始化敌人坦克for (int i = 0; i < enemyTankSize; i++) {enemyTanks.add(new EnemyTank((100 * (i + 1)),0)); //往集合里放坦克}}public void paint(Graphics g){super.paint(g);g.fillRect(0,0,1000,750); //填充矩形(默认黑色)//画自己的坦克-(为便于调用已封装成方法)drawTank(hero.getX(), hero.getY(), g,hero.getDirect(),0);//画敌人的坦克,遍历Vectorfor (int i = 0; i < enemyTanks.size(); i++) {//取出坦克EnemyTank enemyTank = enemyTanks.get(i);//返回给定索引在Vector中存在的对象drawTank(enemyTank.getX(),enemyTank.getY(),g,enemyTank.getDirect(),1);}}//画坦克方法//参数:x、y坦克的左上角坐标,g:画笔, direct:坦克方向,type:坦克类型,考虑到自己和敌人的坦克public void drawTank(int x,int y,Graphics g,int direct,int type){//判断坦克类型,设置不同颜色switch (type){case 0: //设定0为我的坦克,1为敌人的坦克g.setColor(Color.yellow);break;case 1:g.setColor(Color.cyan);break;}//判断方向,绘制对应的坦克//设定0123分别为坦克向上右下左switch (direct){case 0: //0设定为方向向上g.fill3DRect(x,y,10,60,false); //画坦克左轮子g.fill3DRect(x + 30,y,10,60,false); //画坦克右轮子g.fill3DRect(x + 10,y + 10,20,40,false);//画坦克盖子g.fillOval(x + 10,y + 20,20,20);//画坦克圆形盖子g.setColor(Color.ORANGE);//画炮筒前改变画笔颜色g.drawLine(x+20,y+30,x+20,y);//画坦克炮筒break;case 1: //1设定为方向向右g.fill3DRect(x,y,60,10,false); //画坦克左轮子g.fill3DRect(x ,y + 30,60,10,false); //画坦克右轮子g.fill3DRect(x + 10,y + 10,40,20,false);//画坦克盖子g.fillOval(x + 20,y + 10,20,20);//画坦克圆形盖子g.setColor(Color.ORANGE);//画炮筒前改变画笔颜色g.drawLine(x + 30,y + 20,x+60,y + 20);//画坦克炮筒break;case 2: //1设定为方向向下g.fill3DRect(x,y,10,60,false); //画坦克左轮子g.fill3DRect(x + 30,y,10,60,false); //画坦克右轮子g.fill3DRect(x + 10,y + 10,20,40,false);//画坦克盖子g.fillOval(x + 10,y + 20,20,20);//画坦克圆形盖子g.setColor(Color.ORANGE);//画炮筒前改变画笔颜色g.drawLine(x+20,y+30,x+20,y + 60);//画坦克炮筒break;case 3: //1设定为方向向左g.fill3DRect(x,y,60,10,false); //画坦克左轮子g.fill3DRect(x ,y + 30,60,10,false); //画坦克右轮子g.fill3DRect(x + 10,y + 10,40,20,false);//画坦克盖子g.fillOval(x + 20,y + 10,20,20);//画坦克圆形盖子g.setColor(Color.ORANGE);//画炮筒前改变画笔颜色g.drawLine(x + 30,y + 20,x,y + 20);//画坦克炮筒break;default:System.out.println("暂时未设置");}}@Overridepublic void keyTyped(KeyEvent e) {}//按下键盘事件方法(按wsda)@Overridepublic void keyPressed(KeyEvent e) {if(e.getKeyCode() == KeyEvent.VK_W){//按W键坦克方向改变为向上hero.setDirect(0);//让坦克动起来——>改变坦克坐标hero.moveUp();}else if(e.getKeyCode() == KeyEvent.VK_S){hero.setDirect(2);hero.moveDown();}else if(e.getKeyCode() == KeyEvent.VK_D){hero.setDirect(1);hero.moveRight();}else if(e.getKeyCode() == KeyEvent.VK_A){hero.setDirect(3);hero.moveLeft();}this.repaint();//每次按键改变方向,让面板重绘}@Overridepublic void keyReleased(KeyEvent e) {}}

3、坦克类

(定义坦克的一些属性、方法)

//定义坦克的一些属性、方法public class Tank {private int x;//坦克横坐标private int y;//坦克纵坐标private int direct = 0;//声明坦克方向变量(0123分别为上右下左)private int speed = 1; //设置速度变量(把移动改变的数值定义为变量)//封装坦克(上下左右)移动的方法public void moveUp(){y -= speed;}public void moveRight(){x += speed;}public void moveDown(){y += speed;}public void moveLeft(){x -= speed;}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;}}

4、我的坦克类

坦克子类——我的坦克(多态性)

//定义我的坦克public class Hero extends Tank {public Hero(int x, int y) {super(x,y);}}

5、敌人坦克类

坦克子类——敌人的坦克(多态性)

package Hsp.Chapter16.Tankgame2;public class EnemyTank extends Tank{public EnemyTank(int x, int y) {super(x, y);}}

如果觉得《Java——【案例】Java坦克大战游戏[版本1]能控制移动的GUI界面坦克大战游戏》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。