本篇文章目的


  • 让子弹飞
  • 让坦克控制子弹来发射

我们前面实现了让坦克动起来,这次我们需要让坦克进行开出炮弹的效果

一、让子弹飞


让子弹开炮,其实也就子弹,当我们发射的时候,其实也相当于是一个圆在不听的动

class Missle{int x;//子弹的x坐标int y;//子弹的y坐标Tank.Direction dir;//方向枚举public Missle(int x, int y, Tank.Direction dir) {this.x = x;this.y = y;this.dir = dir;}
}

同时当我们坦克按下发射键的时候发射子弹,那么就需要将这个子弹画出来

class Missle{//省略其他关键性代码.......//添加方法完成子弹的绘画public void draw(Graphics g) {//获取默认的颜色ColorColor c = g.getColor();//将子弹颜色为红色g.setColor(Color.black);//画一个子弹的大小g.fillOval(x, y, 10, 10);//将原颜色填充回g.setColor(c);   }
}

以及当我们发射子弹的时候,子弹是根据坦克的方向进行发射移动,那么也需要move方法

class Missle{//省略其他关键性代码.......//每次移动x坐标的步骤距离public static final int XSPEED = 10;//每次移动y坐标的步骤距离public static final int YSPEED = 10;//添加方法完成子弹的绘画public void draw(Graphics g) {//省略其他关键性代码.......//让坦克动起来move();}void move() {switch (dir) {case L:x -= XSPEED;break;case LU:x -= XSPEED;y -= YSPEED;break;case U:y -= YSPEED;break;case RU:x += XSPEED;y -= YSPEED;break;case R:x += XSPEED;break;case RD:x += XSPEED;y += YSPEED;break;case D:y += YSPEED;break;case LD:x -= XSPEED;y += YSPEED;break;}}
}

那么我们这时根据思路new一个子弹出来,让它飞起来

public class TankClient extends Frame {//省略其他关键性代码.......//创建子弹对象Missle missle = new Missle(50,50, Tank.Direction.R);@Overridepublic void paint(Graphics g) {//画出坦克....mytank.draw(g);//画出子弹....missle.draw(g);}
}

步骤思路总结

  • ✧添加Missile类
  • ✧添加x,y,dir等属性以及常量
  • ✧添加构造方法,draw方法等必要方法
  • ✧根据不同方向,进行不同的运动
  • ✧在TankClient中模拟一颗子弹
  • ✧new 一颗子弹出来并让他动起来

二、让坦克开炮

刚刚我们成功让子弹在界面上飞起来了,但是它是不听指挥的

那么我们如何完成当我们按下某个键的时候,根据坦克方向发射子弹呢?

第一步:坦克添加发射步骤的方法

public class Tank {//省略其他关键性代码.......//坦克发射子弹.....public Missle fire(){//根据坦克的坐标位置、方向、传给子弹Missle missle =new Missle(x,y,dir);return missle;}
}

第二步:添加Client关联坦克的发射子弹

之前我们的子弹是固定的,现在我们的子弹应该是由坦克来创建发射的

所以我们这里的坦克需要获取到Client,并将创建的子弹传递绘画出来

public class Tank {TankClient tc;public Tank(int x, int y, TankClient tc) {this(x,y);this.tc = tc;}//省略其他关键性代码.......
}

并且要由我们的坦克按下Ctrl键,创建子弹时我们从才进行绘画

public class TankClient extends Frame {//省略其他关键性代码.......Tank mytank = new Tank(50,50,this);//创建子弹对象Missle missle = null;@Overridepublic void paint(Graphics g) {//画出坦克....mytank.draw(g);//画出子弹....if(missle != null){missle.draw(g)}}
}

第三步:添加坦克键盘按下Ctrl处理事件

public class Tank {//省略其他关键性代码.......//坦克键盘按下监听器public void keyPressed(KeyEvent e) {int key = e.getKeyCode();switch (key) {case KeyEvent.VK_CONTROL:tc.missle = 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();}
}

这下我们的子弹可以由坦克按下Ctrl键进行发射出来了

步骤思路总结

  • ✧增加对Ctrl键的按键处理
  • ✧根据坦克发射子弹的思路,创建方法fire,其返回值为Missle
  • ✧添加构造方法,draw方法等必要方法
  • ✧根据不同方向,进行不同的运动
  • ✧在TankClient中模拟一颗子弹
  • ✧new 一颗子弹出来并让他动起来

但是有没有发现我们的子弹是由坦克的坐标左上角x,y的位置出发的

那么能不能由坦克的正中间出发呢?

三、优化坦克控制子弹开炮


将子弹、坦克的高度、宽度都设置为成员变量,给予固定

public class Tank {//坦克的宽度public static final int WIDTH = 30;//坦克的高度public static final int HEIGHT = 30;//添加方法完成坦克的绘画public void draw(Graphics g) {//省略其他关键性代码.......g.fillOval(x, y, WIDTH, HEIGHT);}//省略其他关键性代码.......
}
class Missle{//子弹的宽度public static final int WIDTH = 10;//子弹的高度public static final int HEIGHT = 10;//添加方法完成坦克的绘画public void draw(Graphics g) {//省略其他关键性代码.......g.fillOval(x, y, WIDTH, HEIGHT);}//省略其他关键性代码.......
}

修改坦克的fire方法,重新定位子弹的起始位置

public class Tank {//坦克发射子弹.....public Missle fire(){//根据坦克的坐标位置、方向、传给子弹int x = (this.x + WIDTH / 2) - Missle.WIDTH/2;int y = (this.y + HEIGHT / 2) - Missle.HEIGHT/2;Missle missle =new Missle(x,y,dir);return missle;}//省略其他关键性代码.......
}

参考资料


尚学堂:坦克大战(马士兵老师)


http://www.taodudu.cc/news/show-2378741.html

相关文章:

  • Unity坦克大战完整源码
  • C语言实现多人坦克大战
  • 坦克大战Java项目四
  • 游戏开发 | 基于 EasyX 库开发经典90坦克大战游戏
  • java坦克大战登录界面设计_JAVA课程设计——坦克大战
  • 坦克世界因计算机丢失,坦克世界新版本上线在即,玩家必须知道的几件事。
  • java小程序坦克大战,小程序经典游戏,微信欢乐坦克大战攻略
  • java坦克大战爆炸效果_用java做坦克大战--主要类和基本功能实现
  • java如何让坦克动起来_[笔记]基于java的坦克大战游戏实现思路
  • 飞机大战python_飞机大战python
  • python飞机大战类_python飞机大战
  • java坦克大战互相碰撞_加强版坦克大战(java版)
  • java开发坦克大战小游戏
  • C语言编写飞机大战程序,C语言实现简单飞机大战
  • 坦克大战(二)
  • html坦克游戏,HTML5+JS实现坦克大战小游戏
  • html飞机大战游戏实验报告,JavaScript原生编写《飞机大战坦克》游戏完整实例
  • python-坦克射击飞机
  • Windows10邮件添加qq邮箱已过期问题
  • Windows10 Windows许可证即将过期
  • Windows提示:您的许可证即将过期
  • windows 11系统提示windows许可证即将过期(仅限正版)
  • win11提示windows许可证即将过期
  • 新买的电脑 Windows10/Windows11即将过期怎么办
  • Fiddler证书过期解决
  • Windows_Server_2016 远程桌面120天授权过期
  • windows10序列号即将过期解决办法
  • Windows Knowledge
  • SmartGit一个月试用期过期的解决方法
  • Windows Redis 整理

我所知道坦克大战(单机版)之 让子弹飞、让坦克控制子弹开炮相关推荐

  1. 微信小游戏制作坦克大战(五)敌方坦克可以发射炮弹

    微信小游戏制作坦克大战(五)敌方坦克可以发射炮弹 在资源管理器中复制炮弹,重命名为敌人坦克的炮弹. 修改敌方坦克的积木 给敌方坦克炮弹添加事件 现在,敌方坦克已经可以自动发射炮弹啦. 下一篇文章:微信 ...

  2. java之详解坦克大战_Java之详解坦克大战游戏(一)

    相信大家小时候一定玩过坦克大战游戏,躲避敌方坦克,炸毁敌方坦克,不断向前进攻直逼敌方基地-这次,我们来实现一个简单版的坦克大战,我想学Java的人都有想到以前的按键手机里那菜单点开"Java ...

  3. html5坦克大战游戏,HTML5游戏《坦克大战》完整源码

    [实例简介] HTML5游戏<坦克大战>完整源码 请不要商用,仅限学习使用 [实例截图] [核心代码] HTML5<坦克大战>完整源码 └── HTML5<坦克大战> ...

  4. java 坦克大战 教程_[Java教程]坦克大战(一)

    [Java教程]坦克大战(一) 0 2016-09-16 08:00:05 坦克大战(一) 相信大家对坦克大战都不陌生,并且网上也有很多用java实现的小程序,最近用了几天时间将其使用javaScri ...

  5. python坦克大战游戏_Python开发的坦克大战游戏

    python开发的坦克大战游戏importpygamefrom pygame.sprite importSpriteimportsysimporttimeimportrandom SCREEN_WID ...

  6. 初学java 第一个java程序 坦克大战单机版

    网上坦克大战的游戏并不少,包括单机版,网络版.然而,作为一名程序员,学一门语言的最好方式莫过于写程序.在写的过程中,你会遇到很多的问题,这个时候你再去找原因,查帮助文档,谷歌百度等等,你的能力才会进步 ...

  7. Java 坦克大战单机版 源代码

    尚学堂版本的修改版 玩法: 方向键:控制走动 Ctrl:控制发弹 A:超级子弹 X:八方向发弹 =:添加敌方坦克 F2:重新开始 其他功能: 在头上实时显示血条 吃到血块时能补血 自动积分 敌方坦克过 ...

  8. java坦克大战的总结_《坦克大战》总结心得

    这几天跟着马士兵的视频写出了<坦克大战>单机版,在此基础上我还修改了几个小版块,比如敌方的坦克全部被我军歼灭后,战争级数上升一级,我军的战斗值恢复到满值,自动生成一批坦克,每次敌军新增的坦 ...

  9. c语言课程设计坦克大战,funcodec++课程设计_坦克大战

    <funcodec++课程设计_坦克大战>由会员分享,可在线阅读,更多相关<funcodec++课程设计_坦克大战(24页珍藏版)>请在人人文库网上搜索. 1.课程设计一 坦克 ...

  10. java 坦克大战_java课程设计之坦克大战

    本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...

最新文章

  1. PyTorch 笔记(15)— 分别使用 tensor、autograd、torch.nn 搭建简易神经网络
  2. 【linux命令】readelf工具中英文说明
  3. 我使用过的Linux命令之trap - 在脚本中处理信号
  4. Servlet和JAVA BEAN 分析探讨
  5. js中bind、call、apply函数的用法
  6. 快速打开unity manual的方式
  7. Android4.4KitKat支持u盘功能
  8. tcga癌症亚型获取_亚型多态性应用于元组的危险
  9. 单反相机内部光线反射原理
  10. 笨方法“学习python笔记之列表
  11. “双减”后首份半年报 新东方在线营收亏损双减
  12. 玩转 Springboot 2 之热部署(DevTools)
  13. 用户节点cdn有什么用处
  14. cover 在html中的作用,Cover
  15. Android CheckBoxPreference设置默认值会触发持久化以及其内部实现逻辑
  16. vue项目PC端字体大小自适应
  17. IM即时通讯综合消息系统的架构
  18. linux端口共享打印机,linux如何共享打印机
  19. dayjs 计算两个日期差
  20. 3.6.2数据库系统-范式判断:范式分类、第一范式、第二范式、第三范式、BC范式

热门文章

  1. 控制系统伯德图、带宽及动态响应的关联性
  2. python就业方向有哪些?
  3. PHP 对接建行龙支付
  4. 大数据杀熟?还是??
  5. 中华文本库c语言题答案,大学计算机基础试题题库及答案(精编).doc
  6. 【数据库】解剖式学习无损分解
  7. MongoDB——explain执行计划详解
  8. as常用固定搭配_as...as的结构和固定搭配都有什么
  9. swift5函数和Collection
  10. power apps 里 嵌套 html