联系方式: 微信:biyebang QQ: 629001810
java手机游戏堡垒的设计与开发源代码+LW 4手机游戏(堡垒)的开发 相信大家一定都在8位机机上玩过《冒险岛》这款游戏,非常有趣味性。 游戏中玩家通过不断的闯关,来解救公主。在每个关都很很多的怪物阻挡着你,所以需要运用各种机关或者秘籍来杀死它们。杀死他们的同时还可以获得各种奖励,加生命,加血等,增加了游戏的趣味性。 如图2所示: 图2 游戏截图 这款《冒险岛》游戏的实现相对于其他RPG或者网络版手机游戏稍简单一些,适合初学者作为练习,所以我决定编写一款类似的手机游戏。 由于之前对手机游戏的编程知识以及游戏的设计只有初步的了解,因此,我们在游戏的构架和思路上经历了几个阶段。 这款《冒险岛》游戏的实现相对于其他RPG或者网络版手机游戏稍简单一些,适合初学者作为练习,所以我决定编写一款类似的手机游戏。 由于之前对手机游戏的编程知识以及游戏的设计只有初步的了解,因此,我们在游戏的构架和思路上经历了几个阶段。 刚开始我们只对J2ME有初步的了解。这时我们只是模仿之前在PC上看到的游戏,用语言把游戏的实现感性的描述为几大部分: 游戏界面系统:包括游戏开始界面;游戏开局界面;游戏运行界面;游戏结束界面。 游戏元素:菜单类;画布类;人物类;排行榜类。 在进一步熟悉了J2ME知识后,对框架做出了一些修改,逐步把游戏的基本功能确定。游戏依次进入加载界面;主菜单;游戏运行界面;游戏结束界面。 具体实现的功能为: 1.主菜单,有如下选项: (1)开始游戏——进入游戏界面。 (2)声音——设置声音的有无选项。 (3)帮助——介绍游戏的玩法。 (4)排行榜——玩家所得分数的排行榜。 (5)关于——用来显示说明信息以及背景图片。 2.游戏运行界面,包括: 游戏界面;目前游戏得分;游戏关数;生命次数; 3.游戏结束界面:游戏结束后,显示一行说明信息,然后退回到菜单。 游戏的主要模块为: 1.游戏主MIDlet(GameMIDlet)——对游戏生命周期的判断;对画布类的调用;管理游戏程序中各个屏幕之间的转换。 2.游戏画布(MyGame)——对游戏所用变量,常量的设定;游戏的初始化;游戏中精灵运动轨迹的控制;精灵与砖块的碰撞检测以及砖块状态的控制;游戏中各关卡的基本设定;游戏中对按键状态的处理。 3.菜单类——游戏中菜单事件的处理。 4.GameOgre类——游戏中怪物的类。 5.GamePlayer类——玩家控制的精灵类。 6.GameRMS类——用于实现分数排行榜。 7.PlayMusic类——用于实现音乐的播放。 8.MySet类——声音大小的设置。 程序一共有8个主要类,其中菜单类负责各个屏幕的切换。程序的类结构如图3所示: 进入游戏菜单。初始情况下,游戏菜单有5个选项,它们分别是开始游戏、游戏说明和排行榜、设置、关于。选择开始新游戏则进入游戏,在游戏中如果按下非游戏键则中断游戏返回菜单,此时菜单中增加了一个继续游戏的选项,可以返回游戏也可以重新开始新的游戏。在菜单中选择游戏说明或者高分记录,则进入相应的屏幕,他们都能用“后退”软键返回菜单。菜单中的退出选项用于退出程序。游戏的流程如图4所示: 游戏一共实现了几个类,包括用于游戏外部的、菜单类、排行榜屏幕类、声音设置屏幕类、结束屏幕类,以及用于游戏本身的游戏画布类、声音效果类。 MIDlet是最核心的类。MIDlet程序有三种状态: 1.暂停状态 2.运行状态 3.销毁状态 J2ME程序都是从MIDlet类开始执行,系统在执行MIDlet程序时,首先构造一个MIDlet类型的对象,然后使程序进入到暂停状态,按照生命周期的规定,系统会自动调用MIDlet对象的startApp方法使程序进入到运行状态,开始程序的执行。 下图是运行时显示的画布对象: 首先,先要创建MIDlet类型的对象,下面我们来看对象的构造方法: 在这个构造器中,创建了一个Display对象用于显示,然后,把当前程序的引用传给菜单类中的静态变量。 Display类有两个最主要的作用: 1、 获得屏幕的属性。例如屏幕是否是彩色的,以及支持的颜色数量等信息。 2、 控制屏幕的显示。例如使屏幕显示某个指定界面或者获得当前的显示界面等。 其中,特别是第二个作用使用的更加频繁。 当程序启动的时候,则调用了程序的startApp方法,用来显示画面: 程序开始,打开数据库,如果数据库没有数据就添加10笔空白数据,最后关闭数据库,然后开始一个新的线程,启动菜单。 MIDP中的存储系统是实际为一个类似于数据库的系统,而并不是简单的文件系统,这个系统称为记录管理系统(Record Management System,RMS)。RMS实现数据的持久性管理,提供了数据存储的功能,可以在程序下次启动是再次使用。 记录存储是面向记录的数据库,可把一个记录存储看作一个数据库文件,由许多记录组合而成,这些记录将持久保存并支持跨多个MIDlet的请求。在系统平台的整个常规应用期间,包括重启,更换电池等,MIDlet的记录存储都由系统平台负责维护,系统会尽可能维持记录的完整性。 当调用destroyApp 这个方法的时候,则退出程序。 退出程序的时候,要实行垃圾回收,释放掉不再使用的内存。 2.屏幕切换,如图6: 菜单的图形切换采用的是流程控制器,非常方便,简洁的实现了屏幕画面的切换,下面是关键实现代码:
4.1游戏的的思路、构想
4.1.1游戏想法的产生
4.1.2对游戏设计的初步认识
4.1.3模块成型阶段
4.2 程序的类结构
4.3 游戏的流程图
4.4 游戏的实现
4.4.1主类GameMIDlet的实现
//主程序构造方法
public GameMIDlet()
{
rs = null;
RecordName = “GameRMS”;
GameMenu.display = Display.getDisplay(this) ;
GameMenu.midlet = this;
}
public void startApp()
{
//程序开始,打开数据库,如果数据库没有数据就添加10笔空白数据,最后关闭数据库
try {
rs = RecordStore.openRecordStore(RecordName,true);
} catch (Exception e)
{
System.out.println(“创建数据库失败”);
}
GameRMS rd = new GameRMS(“player”,0);
byte tem[] = rd.encode();
try
{
if(rs.getNumRecords()==0)
{
for(int i=1;i<=11;i++)
{
try
{
rs.addRecord(tem,0,tem.length);
}catch(Exception e)
{
System.out.println(“添加数据失败”);
}
}
}
}
catch (Exception e1)
{
System.out.println(“得到数据库大小失败”);
}
try
{
rs.closeRecordStore();
}catch(Exception e)
{
System.out.println(“关闭数据库失败”);
}
//将画面设为主画面MAIN SCREEN
new Thread(this).start();
}
public void destroyApp(boolean unconditional)
{
exit();
}
public void exit()
{
System.gc();
notifyDestroyed();
}
//导航器
//设置4个常量分别代表主画面,游戏画面,帮助画面和排行榜画面
final public static int MY_MENU = 1;
final public static int MY_GAME = 2;
final public static int MY_HELP = 3;
final public static int MY_RMS = 4;
final public static int MY_ABOUT = 5;
final public static int MY_SET = 6;
采用静态变量来对画面进行标识。
//流程执行,获得需要画面的对象,并显示在屏幕上
public static void show()
{
switch(current)
{
case MY_MENU:
display.setCurrent(MyMenu.getInstance());
break;
case MY_GAME:
display.setCurrent(MyGame.getInstance());
break;
case MY_SET:
display.setCurrent(MySet.getInstance());
break;
case MY_HELP:
display.setCurrent(MyHelp.getInstance());
break;
case MY_RMS:
display.setCurrent(MyRms.getInstance());
break;
case MY_ABOUT:
display.setCurrent(MyAbout.getInstance());
版权所有© 帮我毕业网 并保留所有权利