效果:

代码:

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界面坦克大战游戏相关推荐

  1. python游戏开发步骤_详解Python GUI版24点游戏制作过程

    本文作者为浙江温州永嘉县教师发展中心应根球老师,电子邮箱:ycicada@163.com. 传统用扑克牌算24点游戏用于小学低中段学生训练四则运算效果不错,也可用于防止老年痴呆.本项目模拟传统扑克24 ...

  2. [源码和文档分享]基于Java的带GUI界面猜数字游戏

    一 需求分析 完成一个猜数字的GUI游戏. 开始游戏后,产生一个没有重复数字的4位随机数,用户每猜一个数字,显示出"完全猜中的数字个数"和"猜中数字但位置错误的数字个数& ...

  3. JAVA GUI界面美化 使用Quaqua仿MAC(苹果)主题LookAndFeel经验分享

    刚在课程实训中写完了一个JAVA调用c++dll动态链接库的程序之后,想要对GUI界面进行美化,于是到网上搜了一圈各种jar包,发现了这个仿MAC主题的Quaqua,但是果不其然这个是开发给MAC系统 ...

  4. Java GUI AWT如何搭建一个基本的GUI界面.

    Java :swing and AWT 抽象窗口工具组(Abstract Window Toolkit=AWT) 一.AWT 1.包含很多类和接口GUI 2.元素:窗口,按钮,文本框- 3. java ...

  5. python猜数字1001untitled_如何利用Matlab GUI制作猜数字游戏

    第二堂课布置了一个Mission Impossible:如何利用Matlab GUI制作猜数字游戏 这个任务对很多人来说会非常困难,首先要面对的是 Matlab GUI的机制,这是完全未知的机制,在面 ...

  6. 自制的MATLAB拼图游戏GUI界面版详解(上篇)

    摘要:这篇博文在早前本人写的介绍拼图游戏的基础上推出带有GUI用户界面的增强版,这里将通过上.中.下三篇博文详细介绍利用MATLAB GUI设计的拼图游戏完整实现过程,每篇都会附上相应代码及解释.上篇 ...

  7. java 坦克重叠_Java实现支持双黑两人激战的 坦克大战源码(经典游戏)

    写这个游戏已经有一段时间了,一直在实现各种新功能,从最开始的地图上只有坦克,发子弹还是一个大问题到现在可以两个人一起玩,还是花了不少心思的,现在坦克的速度更快,电脑坦克也不会撞墙.虽然游戏性没有经典坦 ...

  8. java案例-实现斗地主游戏案例

    java案例-实现斗地主游戏案例 1.需求分析: 模拟斗地主游戏,利用集合,Map实现斗地主的逻辑,并且可以看分派好的牌 2.具体实现: (1)在牌盒(字符串数组)存储四个花色: String[] c ...

  9. ioGame 网络游戏服务器框架 (java)、java游戏服务器、netty 集群分步式的网络游戏服务器

    ioGame 国内首个基于蚂蚁金服 SOFABolt 的 java 网络游戏服务器框架:无锁异步化.事件驱动的架构设计 通过 ioGame 可以很容易的搭建出一个集群无中心节点.有状态多进程的分步式游 ...

最新文章

  1. 深度优先搜索找迷宫的出路
  2. js移除某个样式_js中如何移除css样式?
  3. 堆排序时间复杂度_堆排序算法
  4. 案例二十、自动化运维-代码上线
  5. 项目背景介绍及文件系统基本概念简介
  6. 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流
  7. C语言编写工资管理系统类似学生管理系统
  8. 简单却实用的的例子:Jquery获取 radio 选中后的文字
  9. java中局部变量和成员变量
  10. 中国PaaS/SaaS市场研究(2021)
  11. tomcat架构分析(容器类)
  12. 余额宝收益冻结是什么意思?
  13. 加速你的企业数字化转型,首先做到这一步!
  14. HDU 5768 Lucky7 (中国剩余定理+容斥)
  15. java rfid 写入_怎么使用java来读取外接RFID数据
  16. Linux下的围棋软件,在Linux下和电脑下围棋
  17. RMS TO EAP通过MQTT简单实现
  18. 电子商务网站设计中信息安全防御
  19. 253短信发送(国内短信)
  20. 六Elasticsearch之中文分词器插件es-ik的热更新词库

热门文章

  1. 用苹果CMS搭建电影网站教程
  2. 交通银行计算机岗位薪资,交通银行员工年终奖
  3. 使用weui调用年月日时分
  4. BUUCTF misc 专题(61)黑客帝国
  5. Docker架构和原理
  6. mysql force作用_mysql force index 用途
  7. 彻底卸载 .NET 框架 -- .NET Framework Cleanup Tool
  8. 统一身份认证简单对接流程
  9. 达梦数据库DCA认证培训经历
  10. newifi_dts