Ubuntu运行坦克大战
stackoverflow看到那个java处处运行的笑话,一点都不好笑。
运行环境ubuntu12。代码参照马士兵老师,后面再自己完善的一些小功能。
运行 ubuntu,进行vsftpd,ssh,jdk等等一系列的安装和配置。
本来是写实验报告的,当是对jse的复习把整个大致的流程重新写了一次。
1.
使用awt这个抽象窗口工具,先画出基本的边框,再画出一个小方块,对键盘进行监听,上下左右按下时分别更,改了小方块的坐标,新建一个线程类实现runnable接口,键盘一旦敲入便启动线程,repaint画布,调用repaint()方法时,系统会自动调用update()方法,update方法为的是将背景和图片重画。
2.
新建坦克类,用枚举类型存入八个方向,斜方向还有上下左右。还有停止。主要增加键盘按钮的抬起和按下。
3.
新建一个炮弹类,cannon,其实和坦克一个道理 ,按下z键之后炮弹沿着下方向发射,就是线程启动之后不停的repaint。
4.
画出炮管,只要根据红色方块的坐标和方向,将坦克的方向作为一个参数传入大炮cannon类,这样发出的大炮的方向就和坦克方向一致了。
5。
如果为了不让让炮弹连发,可以在键盘抬起的时候再发射,左上角
g.drawString("Cannon Number:"+cannons.size(), 20, 50);
在左上角记录发射过的炮弹的数目。用个集合arraylist存取new出来的炮弹对象即可,拿到arraylist的size即为坦克发射炮弹数目。
6.
之前的坦克是可以穿过窗口,因为坐标没有限制,当坦克靠触碰到窗口后,把坦克的坐标定格在窗口的坐标减去坦克自身的长宽即可。
还有炮弹的数目不是一直计算,当炮弹越界后应当不用计算,所以添加坐标判断,remove掉炮弹对象。
敌人坦克颜色应该和我方区别,这样在类中可以加入一个boolean变量,再传入构造方法中,根据这个变量画出不同颜色。
炮弹打到坦克消失,当时想了好久,没想到有个封装的很好的touch方法,要让坦克和炮弹同时消失,那就要多一个变量,live,如果变量为false,在paint的时候就将其remove掉。
<span style="font-size:18px;">public Rectangle touch(){return new Rectangle(x,y,length,width);
}public boolean whetherhit(Tank tank){if(this.touch().intersects(tank.touch())&& tank.isLive()){tank.setLive(false);this.setLive(false);return true;}return false;}</span>
7.
添加explore类,爆炸,boom!!!
爆炸效果的模拟,可以用从小到大再变小的圆模拟,就在碰撞的时候,new出explore,画出不同的圆圈。
8.
New出10辆敌方坦克,
新建wall墙类,同样利用碰撞,敌方不能穿墙,这里有个很美妙的算法,单纯写碰撞后,坦克就贴在墙上不动了,所以我们要记录撞墙前一刻的坐标,撞上后进行返回,
分配随机参数,使得坦克随机发炮。
而边框的话已经限制了坐标,所以随机改变坐标之后是不会粘在边框上的。
而让坦克间不相互撞上,和撞墙一个道理,只要让坦克之间进行碰撞的检测即可,遍历一下所有的坦克。
<span style="font-size:18px;">public boolean tanktank(List<Tank> tanks ){for(int i = 0; i<tanks.size();i++){Tank t = tanks.get(i);if(this != t){if(this.touch().intersects(t.touch())&& t.isLive() && this.live){//this.fantan();t.fantan();return true;}} }returnfalse;}</span>
9。
还记得小时候红白机的坦克有很强的炮弹还有不止一条命。我们给自己的坦克添加血条blood这个变量。定义为100,中一弹扣10点血。
绝招的话,因为可以朝八个方向放出炮弹,所以直接让它一次性发出。
10.
扣血之后,一旦死掉就不好玩了,可以加一个礼物,吃完补血,画出一个小方块,利用touch方法,吃到之后blood变回100.
改进:
死掉之后可以F1可以原地复活。
同时增加关数这个变量,一共三关,同时,每加一关,增加一辆坦克,增加难度。
当敌方全消灭时,把所有炮弹去除,进入下一关。
三关结束后出现Victor,按F2退出游戏。
死掉后:
胜利!
11.
最终的图片版。其实就是在原有图形的基础上覆盖上图片。
g.drawImage(m.get("ld"), x, y,null);
由于图片素材大小切得不好,经过细节的一些调整还是可以调节的比较好的。
平台只是取巧罢了,当时主要还是学习jse的很多东西。虽然这不是自己写的东西,但是确实自己一路敲过来的,改进之后,对编程的喜爱又多了一大截。
之后懂得图形界面的使用之后便自己写个俄罗斯方块了。
最后是失败了,思路错了。。。。
项目结果:
Ubuntu运行坦克大战相关推荐
- win10使用C语言运行坦克大战游戏(转载)
转自:C语言坦克大战 运行效果 注:本游戏win7可完美运行,win10的话,小坦克和子弹的打印会略有鬼畜(变形,只打印半边等).win10完美运行方案:点击屏幕左下角"开始"界面 ...
- 经典坦克大战1990--Windows下源码编译运行,培养编程兴趣,提高项目经验和能力
1 介绍 ✨ 该经典坦克大战1990版,由C/C++编写,源码来自于GitHub的大佬krystiankaluzny,本文仅提供Windows下的编译&运行详细步骤,以供爱好者在此基础上进行开 ...
- html5+javascript+css实现---网页版坦克大战---无需运行环境
html5+javascript+css实现-网页版坦克大战-无需运行环境,只需一个浏览器,重拾少年情. 运行环境-除老版IE浏览器都可以: 源码需要请:点赞留言邮箱: 可以跳关,回退关卡.支持双人坦 ...
- 坦克大战----Ubuntu终端游戏
还是为了更好对学习的知识进行巩固,所以又基于ubuntu的终端写了坦克大战的游戏.此坦克大战只有一张地图,玩家的坦克需要击败所有敌方的坦克才能胜利,而敌方杀死玩家坦克或者大本营被敌方攻克玩家都算失败. ...
- 我所知道坦克大战(单机版)之解决坦克出界问题、添加机器坦克、将机器坦克击毙...
本章目的 解决坦克出界问题 让坦克发射多发炮弹问题 一.解决坦克出界问题 我们发现现在当前版本,如果控制这个坦克一直往左或者往右的话是会移出边界的 那么怎么解决这个问题呢?其实与子弹有异曲同工之处 p ...
- 我所知道坦克大战(单机版)之添加多个机器坦克、让机器坦克动起来、让坦克智能起来...
本章目的 添加多个机器坦克 让机器坦克动起来 让坦克智能起来 一.添加多个机器坦克 目前我的坏阵营的坦克只有一个,是我们手动创建出来的 但是我们现在想要玩的过瘾,杀的痛快就要创建多个坦克,也需要使用一 ...
- 【跟我一起学Unity3D】做一个2D的90坦克大战之AI系统
对于AI,我的初始想法非常easy,首先他要能动,而且是在地图里面动. 懂得撞墙后转弯,然后懂得射击,其它的没有了,基于这个想法,我首先创建了一个MyTank类,用于管理玩家的坦克的活动,然后创建AI ...
- 坦克大战java_java版坦克大战游戏源码
[java]代码库package tankwar; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; imp ...
- javascript写坦克大战
无意间浏览到别人写的js坦克大战,这是我这段时间看过最复杂的代码了(相对而言),作者博文链接:http://blog.whlcsj.com/js-tankwar.html github链接:https ...
- c语言课程设计坦克大战,funcodec++课程设计_坦克大战
<funcodec++课程设计_坦克大战>由会员分享,可在线阅读,更多相关<funcodec++课程设计_坦克大战(24页珍藏版)>请在人人文库网上搜索. 1.课程设计一 坦克 ...
最新文章
- mount 挂载磁盘报错 mount: wrong fs type, bad option, bad superblock on
- python组成不重复的三位数是多少_Python输出由1,2,3,4组成的互不相同且无重复的三位数...
- linux下使用tar命令
- Springboot+JdbcTemplate +thymeleaf 页面 做迷你版的bug系统
- 【华为云技术分享】云图说 | Dubbo框架应用也可以使用Istio服务网格
- mysql5.5删除干净_MySql5.5 安装及卸载
- php解析命令行参数选项,PHP 命令行参数解析工具类的示例代码
- 开源数字媒体资产管理系统:Razuna
- placeholder在某些浏览器下不垂直居中问题
- 显示和隐藏Mac隐藏文件的命令
- 拓端tecdat|Python Monte Carlo K-Means聚类实战研究
- html语言 图片大小,html如何设置图片大小
- 解决 iphone6sp 换电池 电池胶断问题
- 一篇文章彻底搞懂JVM常见垃圾收集器算法、常见收集器、CMS三色标记等(深度剖析)
- php fatal error解决,这是为什么 Fatal Error,该怎么解决
- 箭杆织布机计算机控制系统,高速喷水织布机单片机控制系统设计 毕业设计论文.doc...
- 字符串全排列算法_C#版_剑指OFFER
- Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别
- Underscore源码阅读极简版入门
- 转 c#性能优化秘密