该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
【新手进阶教程】贪吃蛇,黑白棋,五子棋,扫雷的思路。
以上我只做过贪吃蛇,看过《C语言入门经典》的黑白棋(具体玩法上网搜搜)的代码,不过,个人认为五子棋,扫雷和这些都差不多。最重要的一点,那就是先计划好,再做。
先说黑白棋:
虽然我没做过这个,不过我看过代码,要做一个笨一点的AI不难。《C语言入门经典》教的只搜了一层,一个叫楼天成的搜了10层,李开复和别人合作的14层,要做出这些搜多层的AI可就不是一般的难了,估计要个几万行代码,因为是数据量是指数爆炸的。
一个项目要分成好多个问题解决,问题下面又要分好多个小问题。这样问题就不难了。
个人觉得流程图非常适合来思考这些问题,顺序是按着自上往下的思路。
一个黑白棋的程序,包含:
1.初始化
2.判断人是否有有效格子下子
3.人下子
4.判断是否有效
5.判断电脑是否有有效格子下子
6.电脑下子
7.判断是否有效
8.是否已满或者两人都无法继续下棋
9.结束游戏或再玩一次。
以上是顺序的流程。然后看横向:
0.
a)声明各种记录棋盘信息的全局变量。C语言入门经典用的是二维数组,0代表空,1代表 人,2代表电脑。PS:请善用#define。方便查看。
b)还有人子的符号,电脑子的符号。PS:请善用#define。方便日后修改。
c)棋盘行列数。PS:请善用#define。方便日后修改。
d)#define TRUE 和 FALSE,我是用的,你看着办。
e)(其他暂时想不到)
1.初始化
a)欢迎信息
b)打印表格
c)一开始的4个棋子
d)(其他暂时想不到)
2.判断是否有有效格子下子
a)游戏规则是在对手的棋子周围下子。
插播:怎么表示周围呢,很简单。用坐标表示,引进一个概念“步”(注:不是专业名 词,只是方便阐述),当前位置加上(步x=0,y=0)表示当前位置,上面那一格是当前位 置加上(步x=0, y =-1),右下面那一格是当前位置加上(步x=1,y=1)。(注:这里 的xy是行和列,跟数学上的y方向相反了。)
那怎么遍历周围呢?就把步像二维数组一样遍历就行了。弄个嵌套循环就搞定了,这样 就搜寻了一下周围的格子。注意:不要越过棋盘边界。
这个步的概念在贪吃蛇也能用上。五子棋也要用,扫雷也要用的。
b)所以思路很容易就出来了,要找到有效的格子,只要扫描棋盘所有对手棋子,然后遍历 周围(注意边界),是否有空格,有则统计数加一(暂时想不到统计有啥用,不过以后 可能有用),扫描棋盘很容易,因为棋盘是二维数组记录的,所以只要弄个嵌套循环就 可以了,所以貌似会出现四层的嵌套但是不难理解。(插播:如何跳出多层嵌套?要么 用return,如果不行就另外弄一个isbreak的变量,然后在每层嵌套后面,添加验证是 否跳出。还有一种就是使用goto语句,不过不推荐使用,因为goto用得太多,容易让程 序难以理解。以上是在《C和指针》《C程序设计语言》学来的,嘿嘿~)
各位给点评价,如果写得好,我就继续写下去,如果写得不好,俺就不写了,我也想偷懒啊~~