此游戏程序 及 源码在以下地址下载:
http://www.j2medev.com/bbs/dispbbs.asp?boardID=11&ID=2758&page=1
猜数字 想来大部分人都玩过,就是设定四个数字去猜测,最多八次机会。四个数字在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)。