石头 发布的文章

《数独》
这个写了两个版本的。
一个是利用回溯算法生成的地图,没有进行唯一解的验证,所以最终的解可能不是唯一,最大的缺点是生成数独地图的过程在真机上非常慢,硬件性能的限制吧。
另外一个是利用几个种子地图,然后转换矩阵行列,生成新的地图,这个算是伪数独,好处是生成速度很快,而且有唯一解,可惜只是个随机性不强。
截图是回溯算法的。
sudoku.png

《迷宫》
地图是使用PRIM算法生成。所以生成速度在真机上比较慢,地图越大速度越慢。然后添加了三个模式分别为普通,探索和迷雾。在探索和迷雾模式中有可视范围的选择。分为普通,近视和盲人。地图大小可选择,最小伪16x16,最大为22x22。
maze0.png

maze1.png

maze3.png

普通模式
maze2.png

探索模式
maze4.png

迷雾模式
maze5.png

《五子棋》-支持人机对战
这个五子棋不支持人人对战,只是支持人机对战。然后电脑只是简单的评估当前盘面的落子位置权值,然后根据权值落子,没有进行后续的搜索计算。但是即便这样,我这个菜鸟级别的五子棋也是很难赢到的。为了增加趣味性,如果同时存在几个最高权值落子位置,会随机抽取一个位置进行落子,避免电脑下棋的刻板化。然后可以选择先后手。

wzq0.png
wzq.png

给定四个数字,然后根据提示来猜,猜的次数越少,得分越高。四个数字无重复,不限猜的次数,当然后越少的次数猜对越好,需要一点的逻辑思考。然后加入了提示随机格中某个数字是几的功能,当然尽量不要用,不然就没意思了。也算是比较有意思的智力游戏。
guessnum.png

guessnum.txt

根据百科上的解释,是一款消除类游戏。大体玩法跟跳棋类似,选择当前棋子,隔一个棋子跳到对面的空格子中,中间的那个棋子就会被消除。中间如果没有棋子是没法移动的,也就没法消除棋子。玩到没有可消除的棋子的时候游戏结束,看剩余的棋子个数。剩余越少评价越高。自己玩的时候最好也就是剩余两个,一个从来没有达到过。看大家有没有高手啊。
评价根据百科的解释:

最后剩下6只或以上棋子是“一般”;
剩下5只棋子是“颇好”;
剩下4只棋子是“很好”;
剩下3只棋子是“聪明”;
剩下2只棋子是“尖子”;
剩下1只棋子是“大师”;
最后剩下1只,而且在正中央是“天才”。

peg1.png

peg.txt

  经典的俄罗斯小方块,这个小游戏的实现,用了不少时间,得有两天吧。期间中进行了各种试错,方块的旋转平移,边界检测,行的消除。
  期间遇到点问题,比如控制下落时间用的是WAIT()函数,但是会发现一个问题,在WAIT的时间段中,按键是没有任何响应的,是一个阻塞。也就是说,控制方块的变换和平移的按键在这个时间段按下的话,是没有任何反应的,而是等到WAIT时间段完成后,再去反应,这难免感觉有点卡顿,虽然不是真的卡顿。时间短会感觉不出来,如果等待1秒的话,卡顿感是很明显的。不得已用了一个FOR循环去替代WAIT函数,循环中检测按键值,如果没有按键按下,那继续循环,直到设置的循环次数。如果有按键按下直接跳出循环,进行方块平移和变换得到操作。虽然不太正规,但至少没有了卡顿感。

代码如下:(第281行)

FOR I FROM 1 TO 15000-t*130 DO
IF key≠-1 THEN BREAK;
ELSE
GETKEY►key;
END;
END;

代码中的15000是最高的循环次数,在模拟器中是没有问题的,如果到这真机上需要改成1500左右,这样不会等待很长时间再下落。

elluosi2.png
eluosi1.png
TETRIS.txt

这是自己编写的第二个小游戏,贪吃蛇。分为四个难度,移动的速度依次是加快的。有纪录最高分的功能。然而没有加入暂停功能,所以还是不太完善。如果遇到运行缓慢的情况,重启一下计算器就好了。这是第二个编写的小游戏,因为对编程语言还不是太熟悉,所以同样没有经过什么优化,所幸体积是比较小的,不过20k的大小。

snake.png

snake1.png

snakeY.txt