毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

J2ME基于手机平台的智能客户端游戏设计 第5页

更新时间:2007-11-14:  来源:毕业论文

2.6 玩家一(人)流程图

启动游戏,然后进行初始化,然后由庄家先出牌,接着按顺时针的顺序拿牌,出牌。对于玩家一的流程,首先在初始化的时候判断是否是庄家,如果是,那就首先出牌,如果不是,继续监听是否该轮到玩家一拿牌了,如果是,那就由玩家一拿牌,不是,那就由玩家一继续监听是否有吃碰杠,有的话,就提示玩家一是否要执行。玩家一一直处于一种监听状态,首先监听是否是他拿牌了,其次监听是否有吃碰杠,根据得到不同的动作,玩家一再进行操作,比如拿牌,或者进行吃碰杠。然后再在拿到牌以后判断是否能和牌,如果有的话那就进行提示,没有的话就出牌。最后,若玩家能和牌了,再有系统提示是否要开始新一轮的游戏,如果开始新一轮的游戏的话,那么庄家就是赢家,如果按退出的话,那就关闭游戏。接下来是其他玩家(电脑)的流程图,如图2.7所示

2.7 电脑玩家流程图

由于让电脑玩家考虑是否应该和牌实现起来比较复杂,所以本文在功能实现上决定,放弃追求麻将的番数,一旦有和牌的机会,就让电脑玩家和牌,这样在人工智能上就实现起来就方便了很多。其他流程跟玩家一(人)完全一样。

2.4 系统功能模块设计

2.4.1 麻将属性

本文把麻将写成一个类,这样就有效地实现了封装,以方便调用。属性分别是花色和点数,另外包括以下两种情况,一是财神,本文把它的值定义为-1;二是白板,本文把它替代为原财神,这是杭州麻将的规则。

2.4.2 程序初始化

MID设备上运行的Java程序被称为MIDlet。这些MIDlet在底层CLDC的支持下,通过MIDP中提供的包获得更多的功能(其中包括UI、网络、永续性存储等)。MIDlet可以直接使用MIDP本身提供的类库以及MIDPCLDC中继承的那部分APIMIDlet程序的运行是由startApp()pauseApp()destroyApp()3个方法控制的。它们都在Javax.microedition.midlet.MIDlet中定义,所有的MIDlet都必须实现这3个方法[12]

程序初始化主要是针对J2ME运行机制作出的一些处理。初始化MIDlet时,必须写上三个方法:startApp()pauseApp()destroyApp()startApp()方法具体实现如下:

public void startApp() {

             Display.getDisplay(this).setCurrent(form);

             conn = new Connection(this); // 初始化网络

      }

表示将在游戏启动时运行Form表单,同时进行网络的初始化操作。

J2ME用户界面编程分为高级UI编程和低级UI编程。Screen类属于高级图形用户界面组件,Canvas是低级图形用户界面组件[13]。在同一时刻,只能有唯一一个Screen或者Canvas类的子类显示在屏幕上,可以调用DisplaysetCurrent()的方法来将前一个画面替换掉,必须自行将前一个画面的状态保留起来,并自己控制整个程序画面的切换[14]Form表单是属于Screen的派生类,它是属于高级图形用户界面组件,然后再用Command类对按键进行监听。运行表单后,这样就可以进行不同的按键选择了。

2.4.3 网络传输

网络的传输本文用两个类来实现。第一个类进行网络连接初始化,第二个类是客户端对服务器端进行发包收包操作,并进行响应的包解析。

2.4.4 主游戏模块

主游戏模块是整个程序的核心,它继承了Canvas类,是低级用户界面组件,用Keypress进行按键响应[15]。如图2.8所示,是主游戏启动后的界面。

 

2.8 游戏启动后界面

在上述体系结构的基础上,主要分为以下几个模块:初始化游戏模块、绘画机制模块、检测吃碰杠模块、和牌模块、电脑玩家出牌模块。

2.4.5 初始化游戏模块

初始化游戏需要作以下工作:首先是财神的选定,本文采用随机的方法来选定财神,然后是庄家的选定,本文这样规定庄家,如果是第一局,就规定玩家一(人)是庄家,如果不是第一局的话,那么就由上一局是赢家的那家作为庄家。然后对四家发牌,采用随机发牌;最后是对四家手上的牌进行排序,初始化完毕。

2.4.6 绘画机制模块

绘画机制在整个程序中起到很重要的一块,在游戏设计中尤为重要。绘画模块大致可以分为两个模块:第一是初始化模块,第二是运行时模块。当游戏启动时,本文把画布设成全屏模式,加载一些图片,画出财神,以及一些为了美观作的修饰,等等,这些都是初始化模块需要做的工作;在运行时模块中,本文必须在run()函数中调用repaint()函数,以便能够在每次执行其他操作后进行刷新或者重画。比如,每次取了牌,必须得将手中的牌刷新一次,有人打出了牌,也得重新画一次,遇到吃,碰,杠,和,或者提示,都得进行绘画。

2.4.7 检测吃碰杠模块

本文分别用三个函数eat()bump()gang()来检测吃、碰、杠。本文根据花色相同,点数相连来进行吃的检测;根据花色相同,点数相同来进行碰的检测;当然如果有四张牌点数花色都一样的话那就是杠了。

2.4.8 和牌模块

和牌模块算是整个游戏设计中的一个难点,本文采用列举的方法把各种和牌的模式归纳性的罗列了出来。可以把和牌大致分为以下两类:一类是特殊的,一类是普通的。

特殊的一类是七对子,即手中的14张牌都是一对一对的,总共七对(当然,也可以用财神替代)。这种牌如果和了的话就是四番。

普通的一类就是平时和的那种牌,即多个顺子,一副对。这种和牌可以考虑从对里面入手,可以分两种情况:一种是有对的,一种是没对的。如果有对的话,那可以把对子拿出来进行判断剩下的牌是否都是一顺一顺的(可以用一张财神来抵消任何一顺差一张牌的类型)。如果没有对的话,那就要看有没有财神,如果没的话,直接返回,表示不能和,如果有的话,可以用财神跟任何一张牌来搭配充当一对,然后对剩下的牌进行判断,是否都是一顺一顺的。

2.4.9 电脑玩家出牌模块

电脑出牌涉及到人工智能方面的问题,由于人工智能并非本文研究的课题,所以只简单地实现了电脑出牌的人工智能。本文采用积分的方法来实现,对于每一张牌,都会赋予不同的积分,然后对于积分最小的牌,就认为该牌最没有价值,最后将该牌打出。

具体赋予该牌的积分规则如下:根据牌值的大小赋予不同的值,越是中心牌,那么积分越大,但是不超过5分;如果是财神的话,赋予50分;如果是一顺的话,那么该顺子的每张牌都赋予20分;如果是相邻的牌或者是一对的话,那每张牌赋予10分,如果是相间的话,那每张牌赋予5分。最后再根据积分的大小

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页

J2ME基于手机平台的智能客户端游戏设计 第5页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。