三子棋程序的讲解(4)

发布时间:2023年12月18日

? ? ? ? 前几期已经给大家讲解了怎么在三子棋中实现棋盘的格式化(清除)和棋盘的输出,并且在上一篇博客已经为大家讲解了怎么控制玩家进行移动,这篇博客主要给大家讲解一下电脑的移动。因为其实是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来控制(只要电脑产生的随机数在数组中的位置,没有被占用(就是那里的元素正好是空格),那么就修改为不同于玩家的元素),这样之后,每次调用,电脑都能在棋盘上面随机产生一个“棋子”,然后后面就可以通过玩家和电脑的棋子来判断胜负了。

? ? ? ? 但是这样明显电脑是十分弱智的,没有什么挑战性,但先不管,我们先让电脑弱智,当整个程序能够跑起来之后,再对电脑进行优化。

文章来源:https://blog.csdn.net/Aishangyuwen/article/details/135061508
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。