? ? ? ? 前几期已经给大家讲解了怎么在三子棋中实现棋盘的格式化(清除)和棋盘的输出,并且在上一篇博客已经为大家讲解了怎么控制玩家进行移动,这篇博客主要给大家讲解一下电脑的移动。因为其实是3*3的一个相对而言比较小的棋盘,所以说写的也相对简单,所以说电脑也十分的弱智,先看代码:
void AlphaGO(char board[ROW][COL], int row, int col)
{
printf("Alpha go->\n");//提示,现在是电脑在走
while (1)//只要电脑没找到合适的地方落子,就会一直循环,直到找到地方来落子
{
int x, y;
x = rand() % row;//产生行的随机值
y = rand() & col;//产生列的随机值
if (board[x][y] == ' ')//只要棋盘上面的某行某列是空的就
{
board[x][y] = '$';//修改那里的元素,然后相当于电脑落子了
break;//电脑落子之后就结束循环
}
}
}
? ? ? ? 这里就必须给大家讲一个东西了,就是关于rand函数来产生随机值的这一点,rand函数产生的是“伪随机数”,其并非真正的随机数。为了解决rand函数生成的“伪随机数”的问题,我们可以引入srand函数和time函数,rand和srand函数的头文件都是<stdlib.h>。
? ? ? ? 通过rand()%row和rand()%col,我们就可以产生一些随机的数字,这些数字都是介于输入的行列的值的(其实就是数组的行列),所以说电脑会随机在这3*3的棋盘内生成数字,然后我们用一个if来控制(只要电脑产生的随机数在数组中的位置,没有被占用(就是那里的元素正好是空格),那么就修改为不同于玩家的元素),这样之后,每次调用,电脑都能在棋盘上面随机产生一个“棋子”,然后后面就可以通过玩家和电脑的棋子来判断胜负了。
? ? ? ? 但是这样明显电脑是十分弱智的,没有什么挑战性,但先不管,我们先让电脑弱智,当整个程序能够跑起来之后,再对电脑进行优化。