`
Chang0501
  • 浏览: 24135 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

坦克大战游戏的设计

阅读更多

一、功能描述:

      这个坦克大战实现了我方坦克(玩家控制)以及敌方坦克(程序随机控制)的对战,当击毁所有敌方坦克之后玩家获胜,当我方坦克生命值被消耗完毕后失败。游戏中,敌方坦克分为两类:一是快速的黄色坦克,二是有两点生命值的慢速坦克。玩家坦克的生命值一共为三。其中键盘的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中已经很好的处理了双缓冲的问题了呢。

 

 

三、总结分析

   其实坦克大战游戏设计的目的并不是想要单纯的做一个小游戏,二是为了加强对多线程的掌握,这一点我想应该可以通过游戏时一共运行二十二个线程来证实吧。尽管初衷比较单纯,但是设计过程之中却感觉自己收获了不少的东西,在此想和大家一起分享一下。

 

1、程序编写的框架十分重要,在程序编写的初期,我尽量的规范自己的代码,虽然有些麻烦,但是后来的经历却让我庆幸这一点上的功夫,在加载一些障碍物图片之后,坦克以及子弹线程的控制从碰到墙壁这一简单判断增加要对障碍物也进行判断,由于各个线程的设计思路相似,因此我在玩家坦克类中成功测试石头小河等障碍物后,比较轻松得就将判断移植到其他的线程之中了。

 

2、在遇到新的一些问题,比如说双缓冲,应当有独立解决的能力,通过前面一些牛人的经验,网上的相关资料通过已学到的知识自己摸索这个问题,而不是让老师一句一句的解释。这对于以后的发展是极为重要的。学到的知识总是有限的,更为重要的是掌握获取知识的方法。

 

     其实,在这个坦克大战中还有一些缺陷,比如说功能道具太单调,不能直接重启结束后的游戏。但是我想对于java学习初期的我来说,更重要的是学会熟练掌握其中的基本知识与技能,而不是项目本身有多绚。因此今后自己还要更加得努力,与大家一起进步。

 

  • 大小: 68.6 KB
  • 大小: 4.6 KB
  • 大小: 3.2 KB
  • 大小: 6.3 KB
  • 大小: 57 KB
21
8
分享到:
评论
9 楼 liuyar 2011-05-09  
我做过一个j2me的,
上下左右四个板子反弹小球打气泡,气泡破了有分数,
还有其他一些效果,

一个线程就够了。
8 楼 Chang0501 2011-05-05  
fwgforce 写道
碰撞有问题!其它不错,还有就是按键反应有点慢!

表示同意,这就是每个对象一个线程之间的一个很大的bug,如果每两个线程之间的碰撞再考虑进去的话,估计就一片大乱的,以后再程序设计中一定注意这个问题。谢谢兄台!!!
7 楼 fwgforce 2011-05-05  
碰撞有问题!其它不错,还有就是按键反应有点慢!
6 楼 王者之剑 2011-04-27  
清楚明了
5 楼 zhsq_java 2011-04-27  
一个线程等人操作,一个线程走子弹和电脑坦克。
4 楼 Chang0501 2011-04-25  
lzyzizi 写道
感觉你思路不对,
“(一)多线程的处理”每个坦克,每个子弹一个线程,那子弹稍微多一点你机器不挂?
其实你要做的只是在一帧的时间内计算完所有的子弹和坦克的位置和动作,一个线程即可。

兄台说的很有道理,但是我有说过之所以使用这么多的线程只是为了通过这个设计去进一步掌握多线程,说的难听点是刻意在跟自己过不去,这一点我觉得远比这个坦克游戏本身重要。只是不知道采取这种方法是否合理。很感谢你提出意见~~
3 楼 lzyzizi 2011-04-25  
感觉你思路不对,
“(一)多线程的处理”每个坦克,每个子弹一个线程,那子弹稍微多一点你机器不挂?
其实你要做的只是在一帧的时间内计算完所有的子弹和坦克的位置和动作,一个线程即可。
2 楼 francis.xjl 2011-04-24  
很不错啊,我以前也做过一个类似的呢~~~ 
1 楼 itcrown2005 2011-04-24  
很好很强大

相关推荐

    Java坦克大战游戏设计介绍

    【Java坦克大战游戏设计】是一个基于Java编程语言开发的经典坦克战斗游戏项目,旨在为用户提供一个轻松娱乐的平台,缓解工作压力。游戏设计文档详尽地介绍了各个模块的设计和实现,便于开发者理解和构建。 1. **...

    基于c#的坦克大战游戏设计

    《基于C#的坦克大战游戏设计》是一款使用C#编程语言开发的电子游戏,它将经典的游戏模式——坦克大战——与现代编程技术相结合,为玩家提供了丰富的游戏体验。本项目涵盖了软件工程的多个方面,包括需求分析、设计、...

    Java语言坦克大战游戏设计(附有代码和图片).pdf

    Java语言坦克大战游戏设计 本资源是一个基于Java语言的坦克大战游戏设计项目,旨在开发一个完整的坦克大战游戏。该项目的设计目标是使用Java语言开发一个坦克大战游戏,实现游戏的基本功能,包括游戏窗口的创建、...

    基于C#.NET的坦克大战游戏的设计与实现

    ### 基于C#.NET的坦克大战游戏的设计与实现 #### 1. 项目背景与概述 在当今数字化时代,游戏开发已成为一种流行的技术应用领域。本项目旨在利用C#.NET这一现代化的编程框架来设计并实现一款经典的坦克大战游戏。...

    Funcode编程C++实现坦克大战游戏课程设计

    Funcode编程C++实现坦克大战游戏课程设计 1.内容 在一个战场上,玩家控制坦克,消灭敌方坦克,并防止敌方坦克摧毁我方基地。 2.任务和要求 1).游戏有一个初始游戏页面。 2).按下任意键开始游戏,玩家控制坦克在...

    基于FPGA实现坦克大战游戏 basy3

    本设计是基于Xilinx Basys3的坦克大战游戏,通过Basys3板卡控制“坦克”的移动和射击,由拨码开关控制游戏的开始、模式选择等。游戏分为经典模式和无尽模式,经典模式中有4辆“敌方坦克”追击“己方坦克”,被击中后...

    大学毕业论文-—基于java的游戏坦克大战.doc

    在本论文中,我们将对坦克大战游戏的总体架构和游戏流程进行设计,讨论游戏的总体设计理念和实现方法。 游戏详细设计 游戏详细设计是游戏开发的重要步骤,我们需要对游戏的每个模块和组件进行详细设计。在本论文中...

    基于改进遗传算法的坦克大战游戏设计.pdf

    【标题】与【描述】提及的是一个基于改进遗传算法设计的坦克大战游戏项目,旨在解决传统遗传算法在处理复杂游戏环境时效率低下的问题。这个项目结合了遗传算法和行为树技术,以优化游戏AI的训练过程,提高游戏的可玩...

    基于Java的坦克大战游戏的设计与实现

    《基于Java的坦克大战游戏设计与实现》 Java作为一种跨平台、面向对象的编程语言,因其强大的性能和丰富的类库,常被用于开发各种类型的应用程序,包括游戏。本项目"基于Java的坦克大战游戏"就是一个很好的实例,它...

    基于Java的坦克大战游戏设计源码

    本项目为“基于Java的坦克大战游戏设计源码”,包含463个文件,其中包括390个Java源文件、43个GIF图像文件、8个JPG图像文件、6个PNG图像文件、4个WAV音频文件、3个Properties配置文件、3个Markdown文档、1个...

    Java坦克大战游戏设计说明书.doc

    Java坦克大战游戏设计说明书 本文档主要介绍了 Java坦克大战游戏的设计说明书,涵盖了游戏的基本规则、主要实现思想和算法、游戏软件系统的设计、程序关键类的实现等方面。 游戏的基本规则包括坦克种类的分为敌方...

    java毕业设计——网络版坦克大战游戏的设计与实现(论文+答辩PPT+源代码+数据库).zip

    java毕业设计——网络版坦克大战游戏的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——网络版坦克大战游戏的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——网络版坦克大战游戏的设计与...

    期末作业课程设计使用java开发的坦克大战小游戏源码.zip

    期末作业课程设计使用java开发的坦克大战小游戏源码期末作业课程设计使用java开发的坦克大战小游戏源码期末作业课程设计使用java开发的坦克大战小游戏源码期末作业课程设计使用java开发的坦克大战小游戏源码期末作业...

    基于安卓坦克大战游戏设计与实现.doc

    【基于安卓坦克大战游戏设计与实现】 在设计和实现基于安卓平台的坦克大战游戏中,主要涉及以下几个关键知识点: 1. **面向对象设计**:游戏的核心是面向对象编程思想的运用,将游戏中的每个元素(如坦克、子弹、...

    基于Unity3D的坦克大战游戏设计与实现.pdf

    基于Unity3D的坦克大战游戏设计与实现 本文旨在介绍基于Unity3D的坦克大战游戏设计与实现,旨在提高游戏的趣味性和仿真效果。下面将详细介绍游戏设计和实现的主要内容。 游戏引擎 Unity Unity是一款跨平台的游戏...

    Java语言坦克大战游戏设计编程资料

    【Java语言坦克大战游戏设计编程资料】是一份关于利用Java编程语言进行游戏开发的本科毕业设计,主要由吉首大学信息科学与工程学院的一名学生完成。这份资料详细阐述了如何利用Java语言来构建一款坦克大战游戏,涵盖...

    Java语言坦克大战游戏设计附有代码和图片.doc

    【标题】:“Java语言坦克大战游戏设计附有代码和图片.doc” 【描述】:这个文档是一个关于使用Java语言设计和实现坦克大战游戏的本科毕业设计项目,其中包含了代码和相关图片。 【标签】:无 【部分内容】:该...

    基于C++语言开发的坦克大战游戏源代码(含exe可执行文件)

    基于C++语言开发的坦克大战游戏源代码(含exe可执行文件) 基于C++语言开发的坦克大战游戏源代码(含exe可执行文件) 基于C++语言开发的坦克大战游戏源代码(含exe可执行文件) 基于C++语言开发的坦克大战游戏源代码(含exe...

    JAVA实现的坦克大战-课程设计

    【JAVA实现的坦克大战-课程设计】是一款基于Java编程语言开发的坦克战斗游戏,它旨在帮助学生或初学者深入理解面向对象编程、游戏逻辑构建以及图形用户界面(GUI)的设计。游戏提供了两个版本:V1和V2,分别代表了...

    C++ 控制台版本坦克大战游戏

    C++ 控制台版坦克大战游戏简介 内容概要 C++ 控制台版坦克大战游戏是一款基于C++编程语言开发的经典射击游戏。 通过键盘控制坦克移动攻击,躲避敌方坦克的攻击,同时消灭它们以完成关卡任务,支持地图编辑。 适用...

Global site tag (gtag.js) - Google Analytics