猜数字 想来大部分人都玩过,就是设定四个数字去猜测,最多八次机会。四个数字在0--1之间,互不重复。数字位置均正确记一个a,数字正确位置不正确记一个b。结果 就是xaxb,4a0b时玩家胜利。
猜数字的算法很简单,看看源代码就明白了,不行我的blog还有另一篇专门说算法的。这篇主要说其在midp上的实现。
midp通常是由事件驱动的(动态游戏例外),此游戏也不例外。通过用户选择按钮,游戏做出相应的事件处理,完成功能。
1.form和command
作为高级api,midp的displayable派生出两个类:screen和form。前者占据整个屏幕,如textbox等;后者则相当于一个容器,容器中可以装不限量的“内容”——item。本游戏使用form。
而command类表示按钮。按钮可以被看作标识物,是不会显示在displayable所占据的屏幕上的,而是在手机屏幕的另外的区域——一般用过手机的都知道,在左下脚和右下脚,分别由两个按钮控制。command的用法是:
a.先声明:
command c = new command("进入",command.ok,0);
“进入”是command的表面文字,ok是command的类型,0是其优先级。后两个参数是提供给midp的实现者来确定按钮的位置的(屏幕太小,要省着用)。
b.然后将command添加到某个displayable上:
displayable.addcommand(c);
这样在这个dispalayable显示时,就会出现该命令了。
c.最重要的设定某个监听程序,对按下command的事件做出相应的响应。
displayable.setcommandlistener(commandlistener);
commandlistener是个接口,方便起见通常都直接用midp实现它,要实现的方法只有一个:
public void commandaction(command,displayable){}
其原理是:由displayable指定某个程序来监听按钮事件,当该displayable上有按钮事件发生时,就调用指定的事件处理程序来处理(未添加到任何displayalbe上的command当然不会被点击到)。
这里command有一个特点,它是相对独立的,即其实并不依附于任何一个displayable,结果一个command就可以同时添加到多个displayable上了——commandaction的两个参数才能决定一个独一无二的事件,因为一个commandaction可以同时监听多个displayable,因此仅凭command不一定能确定发生了哪个事件。
2.游戏的实现
弄清楚了form,command,游戏的流程就容易了:设定若干个form,每个显示相应的游戏阶段的信息,然后配上需要的command,在事件处理函数commandaction中做一一对应的处理。
这些在源代码中都写得很清楚,不再冗述。
值得一提的是游戏界面和逻辑层是分开的,即逻辑层的两个类可以用到其他界面中去(如swing),或者更好看些的midp(如gamecanvas)。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!


