我所知道坦克大战(单机版)之 让子弹飞、让坦克控制子弹开炮
本篇文章目的
- 让子弹飞
- 让坦克控制子弹来发射
我们前面实现了让坦克动起来,这次我们需要让坦克进行开出炮弹的效果
一、让子弹飞
让子弹开炮,其实也就子弹,当我们发射的时候,其实也相当于是一个圆在不听的动
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 整理
我所知道坦克大战(单机版)之 让子弹飞、让坦克控制子弹开炮相关推荐
- 微信小游戏制作坦克大战(五)敌方坦克可以发射炮弹
微信小游戏制作坦克大战(五)敌方坦克可以发射炮弹 在资源管理器中复制炮弹,重命名为敌人坦克的炮弹. 修改敌方坦克的积木 给敌方坦克炮弹添加事件 现在,敌方坦克已经可以自动发射炮弹啦. 下一篇文章:微信 ...
- java之详解坦克大战_Java之详解坦克大战游戏(一)
相信大家小时候一定玩过坦克大战游戏,躲避敌方坦克,炸毁敌方坦克,不断向前进攻直逼敌方基地-这次,我们来实现一个简单版的坦克大战,我想学Java的人都有想到以前的按键手机里那菜单点开"Java ...
- html5坦克大战游戏,HTML5游戏《坦克大战》完整源码
[实例简介] HTML5游戏<坦克大战>完整源码 请不要商用,仅限学习使用 [实例截图] [核心代码] HTML5<坦克大战>完整源码 └── HTML5<坦克大战> ...
- java 坦克大战 教程_[Java教程]坦克大战(一)
[Java教程]坦克大战(一) 0 2016-09-16 08:00:05 坦克大战(一) 相信大家对坦克大战都不陌生,并且网上也有很多用java实现的小程序,最近用了几天时间将其使用javaScri ...
- python坦克大战游戏_Python开发的坦克大战游戏
python开发的坦克大战游戏importpygamefrom pygame.sprite importSpriteimportsysimporttimeimportrandom SCREEN_WID ...
- 初学java 第一个java程序 坦克大战单机版
网上坦克大战的游戏并不少,包括单机版,网络版.然而,作为一名程序员,学一门语言的最好方式莫过于写程序.在写的过程中,你会遇到很多的问题,这个时候你再去找原因,查帮助文档,谷歌百度等等,你的能力才会进步 ...
- Java 坦克大战单机版 源代码
尚学堂版本的修改版 玩法: 方向键:控制走动 Ctrl:控制发弹 A:超级子弹 X:八方向发弹 =:添加敌方坦克 F2:重新开始 其他功能: 在头上实时显示血条 吃到血块时能补血 自动积分 敌方坦克过 ...
- java坦克大战的总结_《坦克大战》总结心得
这几天跟着马士兵的视频写出了<坦克大战>单机版,在此基础上我还修改了几个小版块,比如敌方的坦克全部被我军歼灭后,战争级数上升一级,我军的战斗值恢复到满值,自动生成一批坦克,每次敌军新增的坦 ...
- c语言课程设计坦克大战,funcodec++课程设计_坦克大战
<funcodec++课程设计_坦克大战>由会员分享,可在线阅读,更多相关<funcodec++课程设计_坦克大战(24页珍藏版)>请在人人文库网上搜索. 1.课程设计一 坦克 ...
- java 坦克大战_java课程设计之坦克大战
本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...
最新文章
- PyTorch 笔记(15)— 分别使用 tensor、autograd、torch.nn 搭建简易神经网络
- 【linux命令】readelf工具中英文说明
- 我使用过的Linux命令之trap - 在脚本中处理信号
- Servlet和JAVA BEAN 分析探讨
- js中bind、call、apply函数的用法
- 快速打开unity manual的方式
- Android4.4KitKat支持u盘功能
- tcga癌症亚型获取_亚型多态性应用于元组的危险
- 单反相机内部光线反射原理
- 笨方法“学习python笔记之列表
- “双减”后首份半年报 新东方在线营收亏损双减
- 玩转 Springboot 2 之热部署(DevTools)
- 用户节点cdn有什么用处
- cover 在html中的作用,Cover
- Android CheckBoxPreference设置默认值会触发持久化以及其内部实现逻辑
- vue项目PC端字体大小自适应
- IM即时通讯综合消息系统的架构
- linux端口共享打印机,linux如何共享打印机
- dayjs 计算两个日期差
- 3.6.2数据库系统-范式判断:范式分类、第一范式、第二范式、第三范式、BC范式