J2ME-MIDP1.0游戏完整实现-双人扫雷1.0(一)
2008-02-23 10:09:21来源:互联网 阅读 ()
2005年2月
前言
我的上一篇也是第一篇文章《J2ME-MIDP1.0小游戏入门-五子棋》贴出以后,有好多的朋友发邮件、加QQ、加MSN和我聊有关J2ME的内容,我很开心也很感慨,开心并不是因为自己文章写得如何如何而有很多人联系我,而是有这么多的朋友在学J2ME,我原来以为现在已经没有人再会联系文章的作者,看来我错了;感慨是因为,我知道我的第一篇文章其实很差的,从大家的反应,我能感觉出网上的原创资料的缺乏,官方或者书籍虽然权威且,但总感觉学的时候和实际的情况有点距离,我在看这些资料的时候,也经常会想,实际游戏开发公司里为怎么处理、会怎么写这个代码、程序的结构流程会怎么样等等。原创文章的最大有点就是它包含了作者的经验,实际开发中的经验。介于大家对我的支持并且网上原创文章有限,我非常乐意继续写一些自己的经验和技术,充实我们的中文资源。所以我接着写了这篇文档,文档内容即程序的开发过程都是真实的,不是为写文章而写文章,完全是近一段时间里先完成的程序,现在再把它写成教学文章。愿大家学J顺利,多多交流(MSN:yinowl@163.com QQ:47599318 E-mail:yinowl@163.com)
注意
平台:这个游戏我是在 Nokia 的平台上设计的,也就是说使用了 FullCanvas 类以及针对Nokia-60系列(7650)的屏幕设计的,稍作修改就能运行在其他型号的手机上(我已经制作了 Siemens-C65 ,Nokia-7210 ,以及所有支持标准midp1.0/2.0、屏幕128 x 128的手机的几个移植版本,有需要可以和我联系)
代码:同我的前一篇文章《J2ME-MIDP1.0小游戏入门-五子棋》一样,代码列出解释的形式仿照《J2ME Game Programming》一书,按照程序功能思路给出相关代码,一个文件的代码会根据功能在不同的小节给出,文章结束了,代码也就完整了。这不同于通常书中的代码以文件为单位一次全部给出,我认为这样更有助于让大家了解一个程序从设计到最后完成的思路。
游戏介绍
扫雷这个游戏大家一定再熟悉不过了,但这个双人扫雷游戏的扫雷新玩法大家可能就没见过了,其实这就是MSN软件中的一个网络联机小游戏,大家每天在使用MSN,但都很少注意或玩MSN中的游戏吧,可以说我就是把MSN上的联机双人扫雷移植到的手机上,一模一样。如果你现在不方便上网或者没有人和你联机看一下这个游戏的界面和玩法,没关系,我现在就来介绍一下,游戏区(雷区)中一共有 16 x 16 共256个格子,其中有52颗雷,操作除了上下左右键(当然电脑上是用鼠标点的)只需要一个挖雷键,你要做的是挖出雷,而不是用另一个键去标示雷。两个玩家,一方开始挖雷,如果挖到(点到)雷,则加一分,没挖到,就和经典的扫雷一样,显示这个位置周围一圈有几个雷,如果一个雷都没有,和经典的扫雷一样,会把和这一格相连的所有周围没有雷的格子和再外面一圈格子打开,然后另一位玩家挖雷,谁先挖到半数以上(大于26颗)的雷谁就获胜,其实很简单吧,游戏的界面如下:
游戏逻辑设计
数据结构:这个游戏属于二维棋类游戏,所以我们自然而然想到设计一个 Bomb 类表示每一颗雷位,用一个Bomb类型的二维数组表示整个雷区的所有雷位,每一个雷位(即每一个Bomb实例)包含一个表示该雷位是否是雷的boolean类型的变量,一个表示该雷位是否已被挖的boolean类型的变量,一个表示是否是被玩家一挖的boolean类型的变量(否表示是被玩家二挖),一个表示该雷位周围八个雷位共有几颗雷的int类型变量。这样整个雷区的状态就完全被描述出来了,然后就根据这个二维表来绘制游戏界面
游戏流程:整个游戏只使用唯一一个 FullCanvas 类,用唯一一个表示状态的变量来控制整个游戏的状态,整个游戏也只使用本身的唯一线程
玩家切换:用一个boolean类型的变量来表示当前执行的玩家,用游戏的外框颜色及右下角的旗子颜色来表示出来
接下来就开始详细介绍并列出游戏程序的各部分代码,文章的结束,整个游戏也就完成了
应用程序类:MiningMIDlet.Java
首先就是一个MIDlet类。 MiningMIDlet 类继承自MIDlet类,用于连接设备的应用程序管理器(Application Manager),通过方法startApp,pauseApp,destroyApp来通知游戏的开始,暂停和销毁结束。源代码如下:
package com.imy.yinowl.miningscroll;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
public class MiningMIDlet extends MIDlet {
MiningCanvas miningCanvas;
//定义游戏界面的FullCanvas类MiningCanvas的对象miningCanvas
public MiningMIDlet() {
display=Display.getDisplay(this);
miningCanvas=new MiningCanvas(this);
//生成MiningCanvas类的对象miningCanvas
}
protected void startApp(){
MiningMIDlet.display.setCurrent(miningCanvas);
//在屏幕上绘出游戏见面miningCanvas
}
protected void pauseApp(){
}
protected void destroyApp(boolean arg0){
notifyDestroyed();
}
}
地雷类:Bomb.java
Bomb 类定义了二维雷区内每一个雷位的所有信息,这样用一个Bomb类型的二维表就能完全描述整个雷区的状态。我在Bomb类中,用了三个boolean型变量和一个int型变量来描述一个雷位:boolean型变量isBomb:描述这个位置是否是雷;boolean型变量hasFound:描述这个位置是否已被挖掘;boolean型变量isPlayer1:描述如果这个位置是雷,而且已经被挖掘,那么是否是玩家一挖掘,如果值是false,表示是被玩家二挖掘,只有在isBomb和hasFound都为true时,这个变量的值才有意义;int型变量bombaround:描述此位置周围八个位置共有几颗雷,这个变量除了用来告诉玩家周围雷数还可以用来打开成片的非雷区域。通过这四个变量配合不同的图片就可以把整个雷区的不同状态的图形界面呈现在玩家面前。Bomb类的源代码如下:
package com.imy.yinowl.miningscroll;
public class Bomb {
int bombaround;
boolean isPlayer1;
boolean hasFound;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- J2ME-MIDP1.0游戏完整实现-双人扫雷1.0(二) 2008-02-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash