这个坦克大战实现了我方坦克(玩家控制)以及敌方坦克(程序随机控制)的对战,当击毁所有敌方坦克之后玩家获胜,当我方坦克生命

一、功能描述:

这个坦克大战实现了我方坦克(玩家控制)以及敌方坦克(程序随机控制)的对战,当击毁所有敌方坦克之后玩家获胜,当我方坦克生命值被消耗完毕后失败。游戏中,敌方坦克分为两类:一是快速的黄色坦克,二是有两点生命值的慢速坦克。玩家坦克的生命值一共为三。其中键盘的w、s、a、d分别控制坦克上下左右四个方向的移动,点击鼠标之后为发射子弹。其中要注意的是,当子弹击中对方坦克或碰到障碍物消失之后才能发射下一个子弹。游戏过程中还会随机出现加速道具,获取之后玩家坦克的速度提升为初始的两倍。下面便是游戏的图片展示 :

游戏界面

右下角的生命值:

出现的加速道具:

游戏结束:

二,技术分析:

在坦克大战的编写中,技术上不同于前面项目主要用到了两点,,一个是多线程的应用,另一个是界面加载图形的处理,即双缓冲技术。下面来进行分析:

(一)多线程的处理:

在这个游戏中,最为核心的技术便是多线程的应用,我方坦克,敌方的十辆坦克、我方发射的子弹以及敌方坦克发射的子弹均为独立的线程,因此,在线程的控制上有了一定的难度,由于在弹球游戏的开发中,计时线程与小球线程同时受一个主类里面变量的控制并在某个时候需同时对其进行修改,因此,会出现抢占CPU时间片的情况从而使得程序的运行结果出现意想不到的结果。基于这个经验,我在这次的设计中将控制变量设置在某一个线程中,并且修改的动作只发生在一个线程内,这样的话便比较有效的解决类上述的问题。当然,有的同志也许会说用线程同步synchronized来控制,但是这个的话会使的程序的复杂度更加加大,以至于你对每一个控制细节牢记于心。

(二)双缓冲技术:

当框设计好之后,我信心满满的加上了仰慕已久的图片,结果却令我抓狂,因为屏幕上已经在不停的闪烁了,找到高手求教之后才明白这里涉及到双缓冲的问题,关于双缓冲的详细理解将在以后的技术博客中谈及,这里的话简单介绍一下,就是通过重写窗体的upData()方法,将窗体的写入缓冲区内,具体的相关代码如下 // 重写update方法,先将窗体上的图形画在图片对象上,再一次性显示 public void update(Graphics g) { if (offScreenImage == null) { offScreenImage = this.createImage(WIDTH, HEIGHT); } Graphics gImage = offScreenImage.getGraphics(); Color c = gImage.getColor(); gImage.setColor(Color.BLACK); gImage.fillRect(0, 0, WIDTH, HEIGHT); gImage.setColor(c); paint(gImage); g.drawImage(offScreenImage, 0, 0, null); }

其中需要注意的一点是我在查找资料的时候发现有介绍双缓冲机制主要用于awt之中,而在swing中已经自动实现,因此我继承了Frame类,改为swing组件中就没有预定的效果了。因此我在想是否swing中已经很好的处理了双缓冲的问题了呢。

java坦克大战总体功能设计_Java编程:坦克大战游戏的设计相关推荐

  1. java坦克大战总体功能设计_Java坦克大战设计报告.doc

    Java坦克大战设计报告.doc <语言设计> 设计报告 信息工程学院专业班级:::指导老师:2011年7月22日 目录 目录2 题目一 坦克大战4 1.1题目简介4 1.2设计的内容.要 ...

  2. java坦克大战总体功能设计_java课程设计——坦克大战

    ##一.团队课程设计博客链接: ##二.个人负责模块或任务说明: ###模块:GUI设计(游戏面板,登录面板,主窗体,显示关卡面板) ##三.自己的代码提交记录截图 ##四.自己负责模块或任务详细说明 ...

  3. java 打印一棵树_java编程题之从上往下打印出二叉树

    本文实例为大家分享了java从上往下打印出二叉树的具体代码,供大家参考,具体内容如下 import java.util.ArrayList; import java.util.Stack; /** * ...

  4. 少儿编程:玩游戏不如设计游戏!

    当手机成为必须品之后,不仅是成人开始对它产生依赖,作为下一代的孩子,也深受其影响.手机.平板电脑取代了洋娃娃小汽车在孩子们心中的位置,游戏.动画成为日常,家长在感叹孩子聪明的同时,又担心孩子会&quo ...

  5. java转换ip地址格式转换_Java编程IP地址和数字相互转换代码示例

    最近才知道,将ip地址转换成十进制.八进制.十六进制同样可以访问网站. IP转为数字(第二种算法.用左移.按位或实现.效率更高.): public long ipToLong(String ipAdd ...

  6. java最全基础知识_Java编程入门,计数排序(Counting Sort)怎么做?

    计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中. 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数. 计数排序(Counting sort)是一种稳定的排 ...

  7. java卡片布局源码_Java编程使用卡片布局管理器示例【基于swing组件】

    本文实例讲述了Java编程使用卡片布局管理器.分享给大家供大家参考,具体如下: 运行效果: 完整示例代码: package com.han; import java.awt.BorderLayout; ...

  8. java最全基础知识_Java编程入门,选择排序(Selection Sort)怎么做?

    表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧.理论上讲,选择排序可能也是平时排序一般人想到的 ...

  9. java一个方法排他调用_Java编程实现排他锁代码详解

    一 .前言 某年某月某天,同事说需要一个文件排他锁功能,需求如下: (1)写操作是排他属性 (2)适用于同一进程的多线程/也适用于多进程的排他操作 (3)容错性:获得锁的进程若Crash,不影响到后续 ...

最新文章

  1. fast软件_自媒体者遇见喜欢好听的视频背景音乐,用一款软件就可以把它提取...
  2. windows wim
  3. CentOS7.0 安装 tomcat-9.0
  4. 使用python game写一个贪吃蛇游戏
  5. Shell编程进阶 1.3data命令
  6. 世界银行开放数据目录:后宫数据集三千个,人生赢家就是你
  7. 记一次DNS运维排错
  8. android医疗管理软件,智能医疗信息管理系统(医院版)
  9. python机器人仿真软件_RoboDK(机器人仿真软件)软件下载_RoboDK(机器人仿真软件)v4.2.3 官方版 - Windows10系统之家...
  10. 3D机器学习(4):pytorch入门3:张量的拼接与拆分、张量的运算、张量的统计
  11. 保证金监控中心保证期货开户和交易记录
  12. 纯html5的树形菜单,一个简单的js树形菜单
  13. 计蒜客信息学3月普及组模拟赛
  14. 电脑提示vcruntime140_1.dll丢失的正确修复方法
  15. javascript call用法及好处
  16. Cakephp分组查询
  17. 【CEGUI】CEGUI入门篇之初始化(一)
  18. 数据分析的基本流程和方法
  19. SketchUp:SketchUp草图大师软件使用技巧总结(视图操作,绘图环境优化,缩放/镜像/对齐/桌边倒圆角案例)
  20. English_00000

热门文章

  1. 洛谷 U28036 Nagisa loves Tomoya(推式子) 题解
  2. 交通银行计算机岗位薪资,交通银行员工年终奖
  3. 立创开源 单节锂电池充电板电路图(基于TP4056)
  4. deficit记忆_一个多动症儿童是如何成为记忆天才的?!
  5. 对乔布斯影响最大的13个人
  6. python数组加入值_python一维数组怎么添加元素
  7. android lr 输出分辨率设置,Resolume Arena输出分辨率怎么调 设置分辨率的方法介绍...
  8. No mapping for GET /swagger-ui.html Springboot+swagger2 报错解决方法
  9. python弹钢琴_用mpython x玩转掌控板——音乐钢琴
  10. HTML5期末大作业:静态购物网站设计——静态购物网站模板11页(前台+后台) HTML+CSS+JS