5.3 游戏的功能流程图 进入游戏后,首先显示的是菜单,有2个命令选项:进入游戏和操作说明;一个按钮:退出程序。选择进入游戏这个命令,则进入到用户登录窗口,如果登录成功,则跳转到游戏界面,如果登录失败,则跳出警告窗口,3秒后返回到登录窗口。也可以从登录窗口退出程序。如果选择操作说明命令,则显示操作说明界面,按返回按钮,又回来主菜单。游戏的功能流程如图所示 内容来自论文无忧网 www.paper51.com
内容来自论文无忧网 www.paper51.com 图4功能流程图 http://www.paper51.com
5.4 游戏的实现 内容来自论文无忧网 www.paper51.com 5.4.1 主类Omok的实现 内容来自论文无忧网 www.paper51.com MIDlet是最核心的类。MIDlet程序有三种状态: http://www.paper51.com 1、 暂停状态 copyright paper51.com 2、 运行状态 内容来自www.paper51.com 3、 销毁状态 内容来自论文无忧网 www.paper51.com J2ME程序都是从MIDlet类开始执行。系统在执行MIDlet程序时,首先构造一个MIDlet类型的对象,然后使程序进入到暂停状态,按照生命周期的规定,系统会自动调用MIDlet对象的startApp方法使程序进入到运行状态,开始程序的执行。 内容来自论文无忧网 www.paper51.com
内容来自www.paper51.com 图5 开始界面 paper51.com
首先,先要创建MIDlet类型的对象,下面来看对象的构造方法: 内容来自论文无忧网 www.paper51.com public Omok() { copyright paper51.com startCmd = new Command("Start", Command.SCREEN, 2); http://www.paper51.com exitCmd = newCommand("Exit", Command.EXIT, 3); 内容来自www.paper51.com theCanvas = new OmokCanvas(); 内容来自www.paper51.com theOne=new main(); 内容来自论文无忧网 www.paper51.com display=Display.getDisplay(this); 内容来自www.paper51.com help=new Help(this); copyright paper51.com logo=new Logo(this); 内容来自www.paper51.com instance=this; http://www.paper51.com } 内容来自www.paper51.com 在这个构造器中,创建了一个Display对象用于显示,然后,又创建了一个画布的实例。 http://www.paper51.com
Display类有两个最主要的作用: 内容来自论文无忧网 www.paper51.com
1、 获得屏幕的属性。例如屏幕是否是彩色的,以及支持的颜色数量等信息。 内容来自www.paper51.com 2、 控制屏幕的显示。例如使屏幕显示某个指定界面或者获得当前的显示界面等。 paper51.com 其中,特别是第二个作用使用的更加频繁。 copyright paper51.com 当程序启动的时候,则调用了程序的startApp方法,用来显示画面: http://www.paper51.com public void startApp() { paper51.com theCanvas.addCommand(startCmd); 内容来自论文无忧网 www.paper51.com theCanvas.addCommand(exitCmd); 内容来自论文无忧网 www.paper51.com theCanvas.setCommandListener(this); paper51.com
display.setCurrent(theOne); 内容来自论文无忧网 www.paper51.com } 内容来自论文无忧网 www.paper51.com 这个方法的作用是把在构造器中创建的画布对象设置为当前屏幕上需要显示的画面。 http://www.paper51.com 当调用destroyApp 这个方法的时候,则退出程序。 内容来自论文无忧网 www.paper51.com
public void destroyApp(boolean unconditional) copyright paper51.com { 内容来自论文无忧网 www.paper51.com exit(); copyright paper51.com } http://www.paper51.com public void exit() paper51.com { 内容来自www.paper51.com
System.gc(); paper51.com notifyDestroyed(); copyright paper51.com } http://www.paper51.com
退出程序的时候,要实行垃圾回收,释放掉不再使用的内存。 内容来自论文无忧网 www.paper51.com 5.4.2 游戏登录界面以及操作说明界面的实现 内容来自论文无忧网 www.paper51.com 这两个类的实现都是继承了Form类,来添加各种组件的。下面是效果图: 内容来自论文无忧网 www.paper51.com
paper51.com 图6 Form界面效果图 内容来自论文无忧网 www.paper51.com
下面先来分析logo类: 内容来自www.paper51.com class Logo extends Form implements CommandListener 内容来自论文无忧网 www.paper51.com 这是类的声明,它继承了Form类,同时派生了一个接口,用来产生按钮事件。 内容来自www.paper51.com Logo(Omokmidlet) http://www.paper51.com { copyright paper51.com super(""); http://www.paper51.com this.midlet = midlet; paper51.com UserName=newTextField("用户名","",9,TextField.ANY); http://www.paper51.com UserPassword=newTextField("密 码","",9,TextField.PASSWORD); copyright paper51.com try{ 内容来自www.paper51.com img=newImageItem("",Image.createImage("/1.png"),ImageItem.LAYOUT_CENTER,"imageexplorer");} http://www.paper51.com catch(java.io.IOException e){} http://www.paper51.com
append(img); copyright paper51.com
append(UserName); http://www.paper51.com append(UserPassword); 内容来自www.paper51.com backCommand = new Command("登录", Command.BACK, 1); 内容来自www.paper51.com exit = new Command("退出", Command.EXIT, 1); copyright paper51.com addCommand(backCommand); copyright paper51.com //addCommand(exit); http://www.paper51.com setCommandListener(this); copyright paper51.com } 内容来自www.paper51.com 这是他的构造方法,创建了2个输入框,并添加到Form上,并且还加上了2个按钮。 paper51.com
Help类的实现和它类似,因此不再详细介绍。 内容来自www.paper51.com 5.4.3游戏画布类的实现 paper51.com
在J2ME游戏编程中,Canvas类是最常用的类之一,该类提供了获得手机屏幕属性、绘制界面以及事件处理等很多实用的功能。 内容来自论文无忧网 www.paper51.com Canvas类是Displayable的子类,在实际的使用过程,一般都通过继承Canvas来利用该类提供的功能。Canvas类是一个抽象类,继承该类的时候必须覆盖paint方法。来看游戏画面: 内容来自www.paper51.com
内容来自论文无忧网 www.paper51.com 图7 游戏运行效果图 copyright paper51.com
首先先看下它的构造方法: copyright paper51.com
public OmokCanvas() { http://www.paper51.com board = new OmokBoard();//创建画板 paper51.com cursor = new Cursor();//创建光标 内容来自论文无忧网 www.paper51.com connector = new ServerConnector(this); copyright paper51.com
setGameMode(INIT);//设置模式 内容来自www.paper51.com } http://www.paper51.com
在它里面,创建了画板,光标、连接器。并且设置了模式。 paper51.com
然后来看具有流程控制作用的setGameMode方法: http://www.paper51.com private voidsetGameMode(int gameMode) { http://www.paper51.com this.gameMode = gameMode; 内容来自www.paper51.com
switch(gameMode) { 内容来自www.paper51.com
case INIT : http://www.paper51.com
id0= id1 = -1;//设置标记变量初始值 内容来自论文无忧网 www.paper51.com row = col = 6;//初始化棋盘大小 paper51.com board.init(); copyright paper51.com
break; http://www.paper51.com case CONNECT : paper51.com Threadcthread = new Thread() http://www.paper51.com { 内容来自论文无忧网 www.paper51.com publicvoid run() http://www.paper51.com { 内容来自论文无忧网 www.paper51.com repaint(); http://www.paper51.com if(islogin) copyright paper51.com {connect(); copyright paper51.com
} copyright paper51.com else 内容来自论文无忧网 www.paper51.com {loginGame(); copyright paper51.com } http://www.paper51.com } 内容来自论文无忧网 www.paper51.com
}; copyright paper51.com cthread.start(); paper51.com
break; paper51.com case TURN0: 内容来自论文无忧网 www.paper51.com cursor.setLocation(row, col); 内容来自www.paper51.com break; paper51.com
case TURN1 : 内容来自论文无忧网 www.paper51.com
connector.receiveData(id0); 内容来自www.paper51.com break; 内容来自论文无忧网 www.paper51.com } copyright paper51.com
repaint(); 内容来自www.paper51.com } 内容来自论文无忧网 www.paper51.com 在这里面,定义了4种状态时所要处理的事件,在这个程序中的别的方法里,当满足一定条件的时候,就开始设置那些状态变量,从而实现了流程的控制。 paper51.com |