昨天晚上看了一下,已经看明白了,提几个建议:
1 用枚举替代“12345”(格子的类型)
2 用列表保存已经走过的点,替代递归(算法复杂时,栈容易满)
3 用std::vector替代数组,这样大小不会受到限制
4 如果要生成1到4的随机数,使用max = 4; min =1; ((double)rand()/(double)RAND_MAX)*(max - min) + min; 替代 do l = rand(); while(l<1||l>4);(效率太低)
5 注意变量名命名规范,比如l应该是指最大步长,可以取名叫m_maxStep;
6 减少面向过程的编程,你可以把游戏抽象成几个类来处理,避免使用全局函数和全局变量
7 复杂的判断条件,可以用N个函数来分别表示,比如代码中的:
(m[i][j+1]!=1||m[i][j+2]!=1||m[i+1][j+1]!=1||m[i-1][j+1]!=1||j+1>=WIDTH-1)
可以写为:NotBlock(i,j+1)||NotBlock(i,j+2)||NotBlock(i+1,j+1)||NotBlock(i-1,j+1)||j<=WIDTH-2
而这个判断实际可以写在一个函数里TestForNode(i,j+1);这样就不用去关心底层实现,类似的,一些难理解的判断都应该封装好。
8 findway这个函数我还没看懂,尽量在编程中避免使用递归(可以用循环代替),如果楼主有兴趣的话可以看看A*算法。效率会更高
祝早日写出新版本!
[[it] 本帖最后由 beyondlwm 于 2008-11-15 16:29 编辑 [/it]]