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运行坦克大战相关推荐

  1. win10使用C语言运行坦克大战游戏(转载)

    转自:C语言坦克大战 运行效果 注:本游戏win7可完美运行,win10的话,小坦克和子弹的打印会略有鬼畜(变形,只打印半边等).win10完美运行方案:点击屏幕左下角"开始"界面 ...

  2. 经典坦克大战1990--Windows下源码编译运行,培养编程兴趣,提高项目经验和能力

    1 介绍 ✨ 该经典坦克大战1990版,由C/C++编写,源码来自于GitHub的大佬krystiankaluzny,本文仅提供Windows下的编译&运行详细步骤,以供爱好者在此基础上进行开 ...

  3. html5+javascript+css实现---网页版坦克大战---无需运行环境

    html5+javascript+css实现-网页版坦克大战-无需运行环境,只需一个浏览器,重拾少年情. 运行环境-除老版IE浏览器都可以: 源码需要请:点赞留言邮箱: 可以跳关,回退关卡.支持双人坦 ...

  4. 坦克大战----Ubuntu终端游戏

    还是为了更好对学习的知识进行巩固,所以又基于ubuntu的终端写了坦克大战的游戏.此坦克大战只有一张地图,玩家的坦克需要击败所有敌方的坦克才能胜利,而敌方杀死玩家坦克或者大本营被敌方攻克玩家都算失败. ...

  5. 我所知道坦克大战(单机版)之解决坦克出界问题、添加机器坦克、将机器坦克击毙...

    本章目的 解决坦克出界问题 让坦克发射多发炮弹问题 一.解决坦克出界问题 我们发现现在当前版本,如果控制这个坦克一直往左或者往右的话是会移出边界的 那么怎么解决这个问题呢?其实与子弹有异曲同工之处 p ...

  6. 我所知道坦克大战(单机版)之添加多个机器坦克、让机器坦克动起来、让坦克智能起来...

    本章目的 添加多个机器坦克 让机器坦克动起来 让坦克智能起来 一.添加多个机器坦克 目前我的坏阵营的坦克只有一个,是我们手动创建出来的 但是我们现在想要玩的过瘾,杀的痛快就要创建多个坦克,也需要使用一 ...

  7. 【跟我一起学Unity3D】做一个2D的90坦克大战之AI系统

    对于AI,我的初始想法非常easy,首先他要能动,而且是在地图里面动. 懂得撞墙后转弯,然后懂得射击,其它的没有了,基于这个想法,我首先创建了一个MyTank类,用于管理玩家的坦克的活动,然后创建AI ...

  8. 坦克大战java_java版坦克大战游戏源码

    [java]代码库package tankwar; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; imp ...

  9. javascript写坦克大战

    无意间浏览到别人写的js坦克大战,这是我这段时间看过最复杂的代码了(相对而言),作者博文链接:http://blog.whlcsj.com/js-tankwar.html github链接:https ...

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

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

最新文章

  1. mount 挂载磁盘报错 mount: wrong fs type, bad option, bad superblock on
  2. python组成不重复的三位数是多少_Python输出由1,2,3,4组成的互不相同且无重复的三位数...
  3. linux下使用tar命令
  4. Springboot+JdbcTemplate +thymeleaf 页面 做迷你版的bug系统
  5. 【华为云技术分享】云图说 | Dubbo框架应用也可以使用Istio服务网格
  6. mysql5.5删除干净_MySql5.5 安装及卸载
  7. php解析命令行参数选项,PHP 命令行参数解析工具类的示例代码
  8. 开源数字媒体资产管理系统:Razuna
  9. placeholder在某些浏览器下不垂直居中问题
  10. 显示和隐藏Mac隐藏文件的命令
  11. 拓端tecdat|Python Monte Carlo K-Means聚类实战研究
  12. html语言 图片大小,html如何设置图片大小
  13. 解决 iphone6sp 换电池 电池胶断问题
  14. 一篇文章彻底搞懂JVM常见垃圾收集器算法、常见收集器、CMS三色标记等(深度剖析)
  15. php fatal error解决,这是为什么 Fatal Error,该怎么解决
  16. 箭杆织布机计算机控制系统,高速喷水织布机单片机控制系统设计 毕业设计论文.doc...
  17. 字符串全排列算法_C#版_剑指OFFER
  18. Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别
  19. Underscore源码阅读极简版入门
  20. 转 c#性能优化秘密

热门文章

  1. 概率图模型之贝叶斯网络的理解与应用
  2. 直播http-flv原理
  3. ArcGIS10从入门到精通系列实验视频教程合集(持续更新)
  4. python爬虫教材推荐 豆瓣_学习python爬虫推荐书籍
  5. windows 搭建kms服务器激活_自建KMS激活服务器的技巧
  6. ads s参数拟合_在ADS仿真或者查看S参数的方法
  7. plecs使用C-Script模块实现线性插值算法
  8. 【图像压缩】基于PCNN实现图像的压缩重建附matlab代码
  9. 很详细的解决Tomcat乱码问题
  10. Tomcat启动页面中文乱码解决方法