SuDoku游戏开发

来源:互联网 发布:卡尔加里 知乎 编辑:程序博客网 时间:2024/04/30 18:12
开发时间:2006-6-15到2006-6-16
SuDoku介绍:
数独游戏,一种世界流行的数字排列游戏。在9*9的表格中填入1~9的数字,使每一行中没有重复的数字,每一列没有重复的数字,而且在被分成9个3*3的小表格中也没有重复的数字。

步骤[4]:

1. 设计界面

画出9*9的表格,因为采用GameCanvas,所以所有的界面全部要写在run()函数中,又因为这部分代10c6e3a3ef6.jpg码比较长,所以写到一个新的函数中drawScreen(Graphics g)。画出SuDoku数据集合,分成两种:作为条件给出的部分数据,用户玩游戏过程中设定的剩余数据。用户操纵的当前移动块,通过方向键进行控制。提示信息块,提示游戏过程中的一些状态。菜单控制块。

2. 产生合理SuDoku数据

高效合理的SuDoku数据产生算法没有找到,于是在随机和高效中求得了一个折衷,采用部分随机后的回溯算法。下面简单介绍一下算法思想:设置三个Boolean数组,availableX[9][9],availableX[9][9],availableBox[3][3][9],分别用来存储当前状态下的某行某列某小表格的可获得数据的集合,例如availableX[i][j]=true表示第i行中的j是一个可以获得数。首先随机获得第一行的随机数,接着从第二行的第一个方框开始作回溯算法,确定一个方框的数后,修改被它影响到的行,列,小表格的可获得数据集合。如果当前方框没有可以获得的数,则退回到前面一个方框,并进行相关修改。直到9*9的所有方框都分配正确的数据。接着,按照所要求的显示出来的数的数量,根据当前的SuDoku数据集合,随机给出,即得到高度随机的SuDoku产生器。

3. 处理命令

由于采用GameCanvas,所以可以有两种方式的命令处理:通过keyReleased等从Canvas类中继承下来的底层处理事件;GameCanvas的新函数getKeyStates(),它可以直接获得事件内容,只要放在run()函数中的循环体中即可。本游戏中需要处理的命令有三类:方向控制,在9*9的方框中进行移动;1~9的数字输入;菜单的处理,比如游戏的开始,Level选择,游戏完成。

4. 检验结果

需要检验的也是三部分,每一行是否存在相同的数字,每一列是否存在相同的数字,每一个3*3小表格中是否存在相同的数字。

类结构:

1. SudokuGameCanvas extends GameCanvas implements Runnable 2. SudokuMIDlet extends MIDlet implements CommandListener 在SudokuMIDlet中建立一个SudokuGameCanvas对象,并实例化