刚刚做完坦克大战的游戏,不能说做完,功能还很简单,还有一些Bug。花了两个下午,一个晚上,因为时间很紧张,(主要怪自己,在别人工作的时候,我在去杭州了,不过,玩得很开心,虽然来了"梅超风"),这里只是简单的一些总结,整理一下自己的思路,Bug,以后会慢慢修复。
写一个游戏,首先要定义的自己的规则,搞清楚自己到底要实现的东西有哪些。然后,一点一点理清自己的思路。搞清楚,为了达到目的,我要做哪些事情,先后顺序是什么。
一开始突然要写坦克,作者也是一头蒙。后来,静下心来,慢慢分析,先学会玩坦克大战这个游戏,搞清楚了游戏规则,然后开始模仿。要写这个游戏,首先,要有一个JFrame。要有自己的坦克和敌方坦克。坦克要会发射子弹。坦克要能够在JFrame上运动。要判断输赢,那么还要自己定义输赢标准。 这些是主干,其他的可以一点一点的加。
一:界面,800*700的JFrame。
背景图片是我截取的一个游戏的,然后一小块,一小块拼起来的,足足拼了400多块(因为这个背景图片很有战场的感觉)。
然后,就是设计地图了。创建一个Map文件,用数字来表示地图上的事物。然后,读取文件,用到了前几天的文件的读取,将字符串转换成数组元素,用数组来存储。遍历数组,数组不同的元素,则绘制相对应的事物。
//根据数组,画出地图
public void createMap(int[][] array,Graphics g){
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
if(array[i][j]==1){
g.drawImage(Config.Wall.getImage(),35*(j),35*(i),null);
}
if(array[i][j]==2){
g.drawImage(Config.Stone.getImage(),35*(j),35*(i),null);
}
if(array[i][j]==3){
g.drawImage(Config.CantDie.getImage(),35*(j),35*(i),null);
}
}
}
}
JFrame双缓冲:借鉴了chang0501的blog,在这里附上地址:http://chang0501.iteye.com/blog/1027663
在这里就不多说了。真是牛人多多,要多多学习。
二:己方坦克
实现的功能:四个方向移动,发射子弹,判断障碍物,当被敌方坦克打中后,自动生成一个新的。游戏结束的标准是:敌方坦克被全部消灭或者己方坦克的基地被毁灭。己方坦克的作用就是保护基地不被毁,可以不断再生,直到游戏结束。
用键盘来控制坦克的方向,需要添加键盘监听器:addKeyListener,用四个boolean变量来记录键盘的按键情况,按下键,相对应的值变为true,那么此时前进的方向就确定了,释放为false。
/**
* 判断前进方向
*/
public void directionToHead() {
if (dir == e.VK_RIGHT) {
right = true;
currentDirection = "right";
}
if (dir == e.VK_LEFT) {
left = true;
currentDirection = "left";
}
if (dir == e.VK_UP) {
up = true;
currentDirection = "up";
}
if (dir == e.VK_DOWN) {
down = true;
currentDirection = "down";
}
}
三:敌方坦克
其实,敌方坦克类里有许多和己方坦克相同的方法,比如,判断是否被打中,是否碰到障碍物。敌方坦克不同的是,被打中后,消失,直到全部被打中消失,那么,游戏结束,己方胜利。敌方坦克的运动方向和位置是随机的。前,后,左,右,四个方向随机选择。
/**
* 随机选择前前进的方向
*/
public void initDirection() {
Random ran = new Random();
int dir = ran.nextInt(4);
if (dir == 0) {
up = true;
}
if (dir == 1) {
down = true;
}
if (dir == 2) {
left = true;
}
if (dir == 3) {
right = true;
}
}
四:子弹类
己方子弹,和敌方子弹,创建方法时相同的,里面实现的方法也有很多相同的地方,其实可以合并写在一个类里。但,一开始的时候,我为了理清自己的思路,把他们一一的分开了。
子弹的运动方向和位置的定义,是与坦克运动方向,位置相关的,因此可以用坦克的坐标来表示子弹的坐标,坦克的方向就是子弹的方向。子弹类里,会有一些方法,比如,子弹击中了墙,那么墙就要消失;子弹击中对方坦克,坦克消失,等等。
五:实现爆炸效果
爆炸的实现其实就是连续的绘制图片。将图片保存在数组里,然后遍历绘制。爆炸的产生是在子弹打中坦克的情况的产生的,因此,此时的子弹是setLive(false)的,调用爆炸方法即可。
六:Config类
因为要绘制很多图片,为了方便,可以将要用到的素材放到Config类里。
以上只是我暂时的结果。还有很多要完善的地方,比如,敌方坦克不可以重合,由于敌方坦克运动方向是随机的,坦克可能会原地打转的问题,等等,很多。我会继续完善的。
- 大小: 257.7 KB
分享到:
相关推荐
《Java编写的单机版坦克大战游戏详解》 在编程世界中,游戏开发是一项充满挑战与乐趣的任务,尤其是在Java平台上。本文将详细解析一个名为"java写的单机版坦克大战@version2.6"的游戏项目,它是一款基于Java语言...
在计算机编程领域,尤其是游戏开发中,使用Java语言实现的单机版坦克大战是一个经典的案例,它涉及到图形用户界面(GUI)、事件处理、对象和类的运用等多个核心知识点。本文将深入解析这段源代码,帮助读者理解其...
《用Java实现的坦克大战游戏》是一款基于Java编程语言开发的单机版坦克大战游戏,其特点是使用纯代码构建,具备详细的注释,方便开发者理解并进行二次开发或学习。这个游戏不仅展示了Java在游戏开发中的应用,也提供...
总结起来,Java坦克大战单机版的学习涵盖了Java GUI编程、事件处理、多线程、对象设计、游戏逻辑及文件I/O等多个核心知识点。通过实际开发这个游戏,开发者不仅可以巩固Java基础知识,还能提升解决问题和设计复杂...
本文档旨在对 Java 版坦克大战游戏的开发技术要点进行总结,通过对游戏的开发背景、游戏的研究现状、开发环境和相关技术的介绍,来总结出 Java 版坦克大战游戏的开发技术要点。 开发背景 -------- 坦克大战是童年...
在这个坦克大战游戏中,Canvas用于渲染游戏场景,包括地形、坦克、子弹等元素,通过JavaScript的绘图函数如`fillRect()`、`strokeRect()`、`beginPath()`、`moveTo()`、`lineTo()`等进行动态绘制。 2. JavaScript...
在坦克大战游戏中,这些API被用来绘制游戏场景、坦克、子弹以及碰撞检测。 游戏的核心部分通常包括以下几个模块: 1. 游戏逻辑:这是游戏的“大脑”,处理玩家输入、坦克移动、射击、碰撞检测等事件。这部分通常用...
《Java单机坦克大战图片版》是一款基于Java J2SE技术开发的经典游戏,它将传统的坦克大战游戏与图像元素相结合,提供了丰富的视觉体验。通过这个项目,我们可以学习到许多Java编程的基础知识,以及如何利用Java进行...
“坦克大战”是一款经典的策略游戏,本项目旨在通过Java编程语言实现该游戏,不仅涵盖了单机模式还拓展了联机对战功能,旨在为玩家提供更加丰富的游戏体验。该项目由马士兵老师进行指导教学,覆盖了从0.1到2.9章节的...
下面将详细介绍这款HTML版坦克大战游戏所涉及的技术点。 1. HTML基础结构:HTML(超文本标记语言)是网页内容的基础,用于定义页面结构。在这个游戏中,HTML元素被用来创建游戏界面的基本布局,如游戏区域、菜单、...
论文通过总结和分析JAVA游戏的开发流程和代码框架的设计,开发了一款基于J2SE架构的游戏——局域网坦克大战,该游戏主要分为场景类、子弹类、坦克类、敌方坦克类、我方坦克类等几个类,能够实现敌方坦克和子弹的智能...
在本文中,我们将深入探讨这款基于MFC框架实现的90坦克大战的移植版,它提供了单机版的游戏体验。MFC,全称Microsoft Foundation Classes,是微软为Windows应用程序开发提供的C++类库,它简化了窗口、对话框、控件等...
8.坦克大战游戏设计:本设计主要实现的功能是让坦克能向八个方向移动,并且打出炮弹,子弹击中敌人坦克,子弹和敌人坦克同时消失,产生爆炸,CPU坦克能智能的移动并且打出炮弹。 Java 2 Standard Edition(J2SE)的...
- **研究意义**:开发PC版《墨水坦克大战》游戏旨在满足不同用户群体的需求,特别是那些因手机屏幕小或配置低而难以充分体验游戏乐趣的玩家。此外,通过该项目的设计与开发,开发者可以将理论知识与实际操作相结合,...
TankWar单机版的设计灵感来源于经典的坦克大战游戏,玩家通过控制坦克在地图上移动,击败敌方坦克以赢得胜利。游戏的核心在于策略和反应速度,同时,它也展现了Java编程语言在实时交互和图形渲染方面的应用能力。 ...