现在的手机作为一种娱乐性的电子通信设备,早已超出原先的通话、短信息等基本通信功能,越来越多的娱乐、休闲性软件如手机游戏、电子书、音乐编辑、拍照与图象处理等也都流行于当今各种品牌的手机。其中,游戏软件占有相当大的比重。既然我们已经掌握了手机软件的开发过程,为什么不自己开发一个个性化的手机游戏呢?本文将介绍一个简单的图象化手机游戏--"花皮猫大战流氓兔"的制作过程。花皮猫自然是笔者养的爱猫了,感兴趣的读者也完全可以让自己喜欢的阿猫阿狗担当游戏中的主角,充分展示DIY的魅力!
游戏的设计
手机游戏的开发首先需要规划好整体流程和具体的游戏规则(或游戏剧本),然后才能根据此剧本进行具体的编码实现。受文章篇幅限制,本游戏剧本设计不能太复杂。首先将游戏定位为人机对弈类游戏,程序运行开始首先显示本游戏的封面画面,停留几秒后自动转入角色选择画面,在玩家选择某一角色后开始游戏。游戏开始时随机决定哪一方先行。人机分别在3乘3大小的棋盘网格中交替落子(双方棋子图案是有区别的),而且只允许在没有落过子的空网格中下子。只要有一方所落棋子在横、竖、斜任何一方向上的总数达到三颗即获胜。如棋盘被填满时双方均未在上述方向达到三颗棋子则该局为平局。无论结果如何,在每局结束后均显示当局胜负结果与总比分。玩家可以选择退出或是重新开始新的一局。以上便是本游戏的主体框架和基本游戏规则,随后进行的编码工作便以此为依据。
游戏框架的搭建
![]() 图1 |
首先建立项目并新建一Midlet TicTacToe加入其中,继续添加ChoosePieceScreen、GameScreen和Game三个类到项目。作为一款游戏,如果仍拿文字来作软件封面显得也太不专业了。如果要在J2ME程序中使用图片,必须预先将其转换为png格式图片然后在项目上点击鼠标右键,从新建菜单下选择文件菜单项将弹出如上所示对话框。刚开始下半部分是隐藏的,需要通过点击高级按钮将其显示出来。选中链接至文件系统中的文件并通过浏览对话框指定要添加的图片路径。最后在文件名一栏输入图片的文件名并点击完成,将图片添加到项目。下面只须在startApp()中通过如下代码装载图片并通过信息框将其显示出来即可:
| Image logo = null; try { logo = Image.createImage("/logo.png"); }catch (IOException e) {} Alert splashScreen = new Alert(null, "郎锐2004年作\n版权所有(c)\n2004--2005", logo, AlertType.INFO); splashScreen.setTimeout(4000); // 延迟4秒 |
![]() ![]() ![]() ![]() 图2 图3 图4 图5 |
在持续显示图2四秒后进入角色选择界面(图3):
| choosePieceScreen = new ChoosePieceScreen(this); Display.getDisplay(this).setCurrent(splashScreen, choosePieceScreen); |
此任务在ChoosePieceScreen类中实现,主要的功能有对角色图标的装载显示、对选定角色的确认等。在其构造函数中首先指定当前界面为列表选择方式,然后通过append()将装载的图象与相应的列表文字建立关联。最后,为了响应用户的输入选择还必须调用setCommandListener()来检测按键事件的发生,并在commandAction()方法中实现对选定角色的确认:
| super("请选择:", List.IMPLICIT); // 设置列表选择 this.midlet = midlet; append(CAT_TEXT, loadImage("/cat.png")); // 添加图象选项到列表 append(RABBIT_TEXT, loadImage("/rabbit.png")); setCommandListener(this); // 侦听按键响应 …… public void commandAction(Command arg0, Displayable arg1) { if (arg0 == List.SELECT_COMMAND){ // 检测是否为列表按键响应 // 检测用户选中的选项 boolean isPlayerCat = getString(getSelectedIndex()).equals(CAT_TEXT); midlet.choosePieceScreenDone(isPlayerCat); // 进入游戏画面 } } |
这里是通过检测用户选择的列表项文字来判断玩家选择的是花皮猫还是流氓兔并通过变量isPlayerCat来标识,在choosePieceScreenDone()方法中新建一个GameScreen对象并将其作为当前显示界面来开始一局新的游戏。GameScreen类负责游戏界面的绘制,如对棋盘和双方棋子的绘制以及对光标移动的处理等工作。











