搜索内容

有一个问题?

如果您有任何疑问,可以在下面询问或输入您要寻找的!

对C语言实现三子棋小游戏中电脑下棋算法的优化

生成海报
sun@0225SUN
sun@0225SUN 2021-02-05 21:43
阅读需:0

  上篇blog对三子棋游戏开展了升級,但仅是拓展到多子棋,电脑上优化算法选用的還是伪随机数的方式 ,电脑上還是个憨憨的。
  那麼今日就对三子棋游戏中电脑上下象棋优化算法开展一次提升吧,多子棋算法优化更改相对控制模块标准就可以完成


文章内容文件目录

  • 游戏测试
  • 电脑上是不是能赢
  • 游戏玩家是不是能赢
  • 新的ComputerMove涵数
  • 新的game涵数
  • 详细程序流程
  • 写在后面


游戏测试

****************************************
*****1.进入游戏          0.退出游戏*****
****************************************

提示信息:挑选:>>>1

  1   2   3
1   |   |
 ---|---|---
2   |   |
 ---|---|---
3   |   |

提示信息:请请输入要下的座标:>>>1 2

  1   2   3
1   | * |
 ---|---|---
2   |   |
 ---|---|---
3   |   |

电脑上:我踏过啦!!!到你啦!!!

  1   2   3
1   | * |
 ---|---|---
2   |   |
 ---|---|---
3   |   | #

提示信息:请请输入要下的座标:>>>2 2

  1   2   3
1   | * |
 ---|---|---
2   | * |
 ---|---|---
3   |   | #

电脑上:我踏过啦!!!到你啦!!!

  1   2   3
1   | * |
 ---|---|---
2   | * |
 ---|---|---
3   | # | #

提示信息:请请输入要下的座标:>>>3 1

  1   2   3
1   | * |
 ---|---|---
2   | * |
 ---|---|---
3 * | # | #

电脑上:我踏过啦!!!到你啦!!!

  1   2   3
1   | * | #
 ---|---|---
2   | * |
 ---|---|---
3 * | # | #

提示信息:请请输入要下的座标:>>>2 3

  1   2   3
1   | * | #
 ---|---|---
2   | * | *
 ---|---|---
3 * | # | #

电脑上:我踏过啦!!!到你啦!!!

  1   2   3
1   | * | #
 ---|---|---
2 # | * | *
 ---|---|---
3 * | # | #

提示信息:请请输入要下的座标:>>>1 1

  1   2   3
1 * | * | #
 ---|---|---
2 # | * | *
 ---|---|---
3 * | # | #

平手!!!恩啊,你早已非常好了,但也要给油哦!

****************************************
*****1.进入游戏          0.退出游戏*****
****************************************

提示信息:挑选:>>>1

  1   2   3
1   |   |
 ---|---|---
2   |   |
 ---|---|---
3   |   |

提示信息:请请输入要下的座标:>>>2 2

  1   2   3
1   |   |
 ---|---|---
2   | * |
 ---|---|---
3   |   |

电脑上:我踏过啦!!!到你啦!!!

  1   2   3
1   |   |
 ---|---|---
2   | * |
 ---|---|---
3   | # |

提示信息:请请输入要下的座标:>>>1 1

  1   2   3
1 * |   |
 ---|---|---
2   | * |
 ---|---|---
3   | # |

电脑上:我踏过啦!!!到你啦!!!

  1   2   3
1 * |   |
 ---|---|---
2   | * |
 ---|---|---
3   | # | #

提示信息:请请输入要下的座标:>>>1 3

  1   2   3
1 * |   | *
 ---|---|---
2   | * |
 ---|---|---
3   | # | #

电脑上:我踏过啦!!!到你啦!!!

  1   2   3
1 * |   | *
 ---|---|---
2   | * |
 ---|---|---
3 # | # | #

你输了!!!emmm,但是没事儿,终究你是人们哇!

****************************************
*****1.进入游戏          0.退出游戏*****
****************************************

提示信息:挑选:>>>1

****************************************
*****1.进入游戏          0.退出游戏*****
****************************************

提示信息:挑选:>>>1

  1   2   3
1   |   |
 ---|---|---
2   |   |
 ---|---|---
3   |   |

提示信息:请请输入要下的座标:>>>2 2

  1   2   3
1   |   |
 ---|---|---
2   | * |
 ---|---|---
3   |   |

电脑上:我踏过啦!!!到你啦!!!

  1   2   3
1   |   |
 ---|---|---
2   | * |
 ---|---|---
3   |   | #

提示信息:请请输入要下的座标:>>>1 1

  1   2   3
1 * |   |
 ---|---|---
2   | * |
 ---|---|---
3   |   | #

电脑上:我踏过啦!!!到你啦!!!

  1   2   3
1 * |   |
 ---|---|---
2   | * |
 ---|---|---
3   | # | #

提示信息:请请输入要下的座标:>>>3 1

  1   2   3
1 * |   |
 ---|---|---
2   | * |
 ---|---|---
3 * | # | #

电脑上:我踏过啦!!!到你啦!!!

  1   2   3
1 * |   |
 ---|---|---
2 # | * |
 ---|---|---
3 * | # | #

提示信息:请请输入要下的座标:>>>1 3

  1   2   3
1 * |   | *
 ---|---|---
2 # | * |
 ---|---|---
3 * | # | #

祝贺你了赢啦!!!哇偶,棒极了!没几个人能击败我呢!)

****************************************
*****1.进入游戏          0.退出游戏*****
****************************************

提示信息:挑选:>>>

  此次程序流程中增加了2个涵数check_computerjudge_player且对ComputerMovegame2个涵数及其头文件作出了变更,头文件仅加上了这两个增加涵数的申明。

  下边详细介绍2个增加涵数。

电脑上是不是能赢

  电脑上是不是能赢,在下完一两个或是好几个连击的情况下,这一涵数真实具有功效,假如能赢就落址。

//分辨电脑上自身是不是还有机会赢,假如能赢,就落址,由于自身赢的优先毫无疑问超过阻拦敌人,是吧
int check_computer(char board[ROW][COL], int row, int col) 
{
	int i = 0;
	int j = 0;
	int k = 0;
	while (0 == k)
	{
		//分辨电脑上猖狂上是不是会赢
		for (i = 0; i < row; i++)
		{
			if (board[i][0] == board[i][1] && board[i][1] == '#' && board[i][2] == ' ')
			{
				board[i][2] = '#';
				k = 1;
				break;
			}
			if (board[i][0] == board[i][2] && board[i][0] == '#' && board[i][1] == ' ')
			{
				board[i][1] = '#';
				k = 1;
				break;
			}

			if (board[i][1] == board[i][2] && board[i][1] == '#' && board[i][0] == ' ')
			{
				board[i][0] = '#';
				k = 1;
				break;
			}
		}
		if (k != 0)
			break;
		//分辨电脑上列上是不是还有机会赢
		for (j = 0; j < col; j++)
		{
			if (board[0][j] == board[1][j] && board[1][j] == '#' && board[2][j] == ' ')
			{
				board[2][j] = '#';
				k = 1;
				break;
			}

			if (board[0][j] == board[2][j]	&& board[2][j] == '#' && board[1][j] == ' ')
			{
				board[1][j] = '#';
				k = 1;
				break;
			}
			if (board[1][j] == board[2][j] && board[2][j] == '#' && board[0][j] == ' ')
			{
				board[0][j] = '#';
				k = 1;
				break;
			}
		}
		break;
	}
	//分辨电脑上在直线上是不是会赢,又加了一个while是为了更好地让分辨直线的编码成块。
	while (0 == k)
	{
		if (board[0][0] == board[1][1] && board[1][1] == '#' && board[2][2] == ' ')
		{
			board[2][2] = '#';
			k = 1;
			break;
		}

		if (board[0][0] == board[2][2] && board[2][2] == '#' && board[1][1] == ' ')
		{
			board[1][1] = '#';
			k = 1;
			break;
		}

		if (board[1][1] == board[2][2] && board[1][1] == '#' && board[0][0] == ' ')
		{
			board[0][0] = '#';
			k = 1;
			break;
		}

		if (board[0][2] == board[1][1] && board[0][2] == '#' && board[2][0] == ' ')
		{
			board[2][0] = '#';
			k = 1;
			break;
		}

		if (board[0][2] == board[2][0] && board[2][0] == '#' && board[1][1] == ' ')
		{
			board[1][1] = '#';
			k = 1;
			break;
		}
		if (board[1][1] == board[2][0] && board[2][0] == '#' && board[0][2] == ' ')
		{
			board[0][2] = '#';
			k = 1;
			break;
		}
		break;
	}
	k = judge_player(board, row, col, k);
	return k;//回到judge_player(board, row, col, k)的传参,假如是0表明自身下一步赢不上也不必阻止
}

游戏玩家是不是能赢

  在分辨了上一步以后,假定电脑上下一步不太可能赢,那此刻大家就来分辨游戏玩家下一步是不是能赢,假如游戏玩家下一步能赢,那二话不说,不管三七二十一,咱阻拦。假如游戏玩家也不可以赢呢,那咱的电脑上就只有老老实实的走伪随机数啦。

//下边这一涵数便是分辨游戏玩家是不是还有机会赢,假如能赢就塞住他
char judge_player(char board[ROW][COL], int row, int col, int k)
{
	int i = 0;
	int j = 0;
	while (0 == k)
	{
		//分辨游戏玩家在猖狂上是不是会赢
		for (i = 0; i < row; i++)  
		{
			if (board[i][0] == board[i][1] && board[i][1] == '*' && board[i][2] == ' ')
			{
				board[i][2] = '#';
				k = 1;
				break;
			}

			if (board[i][0] == board[i][2] && board[i][0] == '*' && board[i][1] == ' ')
			{
				board[i][1] = '#';
				k = 1;
				break;
			}

			if (board[i][1] == board[i][2] && board[i][1] == '*' && board[i][0] == ' ')
			{
				board[i][0] = '#';
				k = 1;
				break;
			}
		}
		if (k != 0)
			break;

		//分辨游戏玩家在竖列上是不是会赢
		for (j = 0; j < col; j++)  
		{
			if (board[0][j] == board[1][j] && board[1][j] == '*' && board[2][j] == ' ')
			{
				board[2][j] = '#';
				k = 1;
				break;
			}

			if (board[0][j] == board[2][j] && board[2][j] == '*' && board[1][j] == ' ')
			{
				board[1][j] = '#';
				k = 1;
				break;
			}

			if (board[1][j] == board[2][j] && board[2][j] == '*' && board[0][j] == ' ')
			{
				board[0][j] = '#';
				k = 1;
				break;
			}
		}
		break;
	}

	//分辨游戏玩家在直线上是不是会赢,又加了一个while是为了更好地让分辨直线的编码成块。
	while (0 == k)  
	{
		if (board[0][0] == board[1][1] && board[1][1] == '*' &&  board[2][2] == ' ')
		{
			board[2][2] = '#';
			k = 1;
			break;
		}

		if (board[0][0] == board[2][2] && board[2][2] == '*' && board[1][1] == ' ')
		{
			board[1][1] = '#';
			k = 1;
			break;
		}

		if (board[1][1] == board[2][2] && board[1][1] == '*' && board[0][0] == ' ')
		{
			board[0][0] = '#';
			k = 1;
			break;
		}

		if (board[0][2] == board[1][1] && board[0][2] == '*' && board[2][0] == ' ')
		{
			board[2][0] = '#';
			k = 1;
			break;
		}

		if (board[0][2] == board[2][0] && board[2][0] == '*' && board[1][1] == ' ')
		{
			board[1][1] = '#';
			k = 1;
			break;
		}

		if (board[1][1] == board[2][0]&& board[2][0] == '*' && board[0][2] == ' ')
		{
			board[0][2] = '#';
			k = 1;
			break;
		}
		break;
	}
	return k;//传参假如是1那麼早已对游戏玩家开展了阻止,假如是0则不用阻止。
}

新的ComputerMove涵数

  电脑上下象棋必须加一步,获得传参,假如传参为z,那麼电脑上仅有老老实实的依照伪随机数来走啦。

//电脑上键入
void ComputerMove(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	int z = 0;
	printf("电脑上:我踏过啦!!!到你啦!!!\n\n");

	z = check_computer(board, row, col);

	while (0 == z)
	{
		x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
}

新的game涵数

  改了手机游戏获胜,平手和不成功的輸出创意文案,其他的不动。

void menu(void)
{
	printf("****************************************\n");
	printf("*****1.进入游戏          0.退出游戏*****\n");
	printf("****************************************\n");
}

void game(void)
{
	char ret = 0;
	char board[ROW][COL] = { 0 };
	//复位旗盘
	InitBoard(board, ROW, COL);
	//复印旗盘
	DisplayBoard(board, ROW, COL);
	while (1)
	{
		//游戏玩家下象棋
		PlayerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//分辨游戏玩家是不是获胜
		ret = Win(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
		//电脑上下象棋
		ComputerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//分辨电脑上是不是获胜
		ret = Win(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
	}

	if (ret == '*')
	{
		printf("祝贺你了赢啦!!!哇偶,棒极了!没几个人能击败我呢!\n");
		printf("\n");
	}
	else if (ret == '#')
	{
		printf("你输了!!!emmm,但是没事儿,终究你是人们哇!\n");
		printf("\n");
	}
	else
	{
		printf("平手!!!恩啊,你早已非常好了,但也要给油哦!\n");
		printf("\n");
	}
}

void test(void)
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("\n");
		printf("提示信息:挑选:>>>");
		scanf("%d", &input);
		printf("\n");
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("破游戏,俺不玩了。\n");
			break;
		default:
			printf("电脑上:FBI warning 不法键入,不法键入,请您主动点。\n\n电脑上:乖,咱再次键入!!!\n");
			break;
		}
	} while (input);
}

int main(void)
{
	test();
	return 0;
}

详细程序流程

//宏定义
#define _CRT_SECURE_NO_WARNINGS 1
#define ROW 3
#define COL 3

//引入函数库
#include
#include
#include

//函数声明
void InitBoard(char board[ROW][COL], int row, int col);
void DisplayBoard(char board[ROW][COL], int row, int col);
void PlayerMove(char board[ROW][COL], int row, int col);
void ComputerMove(char board[ROW][COL], int row, int col);
char Win(char board[ROW][COL], int row, int col);
char Full(char board[ROW][COL], int row, int col);
char judge_player(char board[ROW][COL], int row, int col,int k);
int check_computer(char board[ROW][COL], int row, int col);
#include"game.h"

//复位旗盘
void InitBoard(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			board[i][j] = ' ';
		}
	}
}

//复印旗盘
void DisplayBoard(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < col; i++)
	{
		if (i == 0)
		{
			printf("  %d   ", i + 1);
		}
		else 
		{
			printf("%d   ", i + 1);
		}
	}
	printf("\n");

	for ( int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			if (j == 0)
			{
				printf("%d %c |",i+1,board[i][j]);
			}
			else if (j>0 && j < col - 1)
			{
				printf(" %c |", board[i][j]);
			}
			else
				printf(" %c ", board[i][j]);
		}
		printf("\n");
		if (i < row - 1)
		{

			for (int k = 0; k < col; k++)
			{
				if (k == 0)
				{
					printf(" ---|");
				}
				else if (k>0 && k < col - 1)
				{
					printf("---|");
				}
				else
				{
					printf("---");
				}
			}
		}
		printf("\n");
	}
}

//游戏玩家键入
void PlayerMove(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("提示信息:请请输入要下的座标:>>>");

		scanf("%d%d", &x, &y);
		printf("\n");
		//分辨xy是不是合理合法,一个是是不是外溢,一个是是不是被占有
		if (x > 0 && x < row + 1 && y>0 && y < col + 1)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("电脑上:这我下完了,你个憨憨。\n");
				printf("\n");

			}
		}
		else
		{
			printf("电脑上:FBI warning 不法键入,不法键入!!!请您主动点\n\n电脑上:乖,咱再次键入!!!\n\n");
		}
	}
}

//电脑上键入
void ComputerMove(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	int z = 0;
	printf("电脑上:我踏过啦!!!到你啦!!!\n\n");

	z = check_computer(board, row, col);

	while (0 == z)
	{
		x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
}

//电脑上分辨自身是不是会赢
int check_computer(char board[ROW][COL], int row, int col) 
{
	int i = 0;
	int j = 0;
	int k = 0;
	while (0 == k)
	{
		//分辨电脑上猖狂上是不是会赢
		for (i = 0; i < row; i++)
		{
			if (board[i][0] == board[i][1] && board[i][1] == '#' && board[i][2] == ' ')
			{
				board[i][2] = '#';
				k = 1;
				break;
			}
			if (board[i][0] == board[i][2] && board[i][0] == '#' && board[i][1] == ' ')
			{
				board[i][1] = '#';
				k = 1;
				break;
			}

			if (board[i][1] == board[i][2] && board[i][1] == '#' && board[i][0] == ' ')
			{
				board[i][0] = '#';
				k = 1;
				break;
			}
		}
		if (k != 0)
			break;
		//分辨电脑上列上是不是还有机会赢
		for (j = 0; j < col; j++)
		{
			if (board[0][j] == board[1][j] && board[1][j] == '#' && board[2][j] == ' ')
			{
				board[2][j] = '#';
				k = 1;
				break;
			}

			if (board[0][j] == board[2][j]	&& board[2][j] == '#' && board[1][j] == ' ')
			{
				board[1][j] = '#';
				k = 1;
				break;
			}
			if (board[1][j] == board[2][j] && board[2][j] == '#' && board[0][j] == ' ')
			{
				board[0][j] = '#';
				k = 1;
				break;
			}
		}
		break;
	}
	//分辨电脑上在直线上是不是会赢,又加了一个while是为了更好地让分辨直线的编码成块。
	while (0 == k)
	{
		if (board[0][0] == board[1][1] && board[1][1] == '#' && board[2][2] == ' ')
		{
			board[2][2] = '#';
			k = 1;
			break;
		}

		if (board[0][0] == board[2][2] && board[2][2] == '#' && board[1][1] == ' ')
		{
			board[1][1] = '#';
			k = 1;
			break;
		}

		if (board[1][1] == board[2][2] && board[1][1] == '#' && board[0][0] == ' ')
		{
			board[0][0] = '#';
			k = 1;
			break;
		}

		if (board[0][2] == board[1][1] && board[0][2] == '#' && board[2][0] == ' ')
		{
			board[2][0] = '#';
			k = 1;
			break;
		}

		if (board[0][2] == board[2][0] && board[2][0] == '#' && board[1][1] == ' ')
		{
			board[1][1] = '#';
			k = 1;
			break;
		}
		if (board[1][1] == board[2][0] && board[2][0] == '#' && board[0][2] == ' ')
		{
			board[0][2] = '#';
			k = 1;
			break;
		}
		break;
	}
	k = judge_player(board, row, col, k);
	return k;
}

//下边这一涵数便是分辨游戏玩家是不是还有机会赢,假如能赢就塞住他
char judge_player(char board[ROW][COL], int row, int col, int k)
{
	int i = 0;
	int j = 0;
	while (0 == k)
	{
		//分辨游戏玩家在猖狂上是不是会赢
		for (i = 0; i < row; i++)  
		{
			if (board[i][0] == board[i][1] && board[i][1] == '*' && board[i][2] == ' ')
			{
				board[i][2] = '#';
				k = 1;
				break;
			}

			if (board[i][0] == board[i][2] && board[i][0] == '*' && board[i][1] == ' ')
			{
				board[i][1] = '#';
				k = 1;
				break;
			}

			if (board[i][1] == board[i][2] && board[i][1] == '*' && board[i][0] == ' ')
			{
				board[i][0] = '#';
				k = 1;
				break;
			}
		}
		if (k != 0)
			break;

		//分辨游戏玩家在竖列上是不是会赢
		for (j = 0; j < col; j++)  
		{
			if (board[0][j] == board[1][j] && board[1][j] == '*' && board[2][j] == ' ')
			{
				board[2][j] = '#';
				k = 1;
				break;
			}

			if (board[0][j] == board[2][j] && board[2][j] == '*' && board[1][j] == ' ')
			{
				board[1][j] = '#';
				k = 1;
				break;
			}

			if (board[1][j] == board[2][j] && board[2][j] == '*' && board[0][j] == ' ')
			{
				board[0][j] = '#';
				k = 1;
				break;
			}
		}
		break;
	}

	//分辨游戏玩家在直线上是不是会赢,又加了一个while是为了更好地让分辨直线的编码成块。
	while (0 == k)  
	{
		if (board[0][0] == board[1][1] && board[1][1] == '*' &&  board[2][2] == ' ')
		{
			board[2][2] = '#';
			k = 1;
			break;
		}

		if (board[0][0] == board[2][2] && board[2][2] == '*' && board[1][1] == ' ')
		{
			board[1][1] = '#';
			k = 1;
			break;
		}

		if (board[1][1] == board[2][2] && board[1][1] == '*' && board[0][0] == ' ')
		{
			board[0][0] = '#';
			k = 1;
			break;
		}

		if (board[0][2] == board[1][1] && board[0][2] == '*' && board[2][0] == ' ')
		{
			board[2][0] = '#';
			k = 1;
			break;
		}

		if (board[0][2] == board[2][0] && board[2][0] == '*' && board[1][1] == ' ')
		{
			board[1][1] = '#';
			k = 1;
			break;
		}

		if (board[1][1] == board[2][0]&& board[2][0] == '*' && board[0][2] == ' ')
		{
			board[0][2] = '#';
			k = 1;
			break;
		}
		break;
	}
	return k;
}

//分辨输赢
char Win(char board[ROW][COL], int row, int col)
{
	int i = 0;
	//分辨行
	for (i = 0; i < row; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')//行原素一样且并不是空格符
		{
			return board[i][1];
		}
	}
	//分辨列
	for (i = 0; i < col; i++)
	{
		if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')//列原素一样且并不是空格符
		{
			return board[1][i];
		}
	}
	//分辨直线
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')//直线原素一样且并不是空格符
	{
		return board[1][1];
	}
	if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' ')
	{
		return board[1][1];
	}
	//分辨是不是平手
	if (1 == Full(board, ROW, COL))//平手分辨,涵数在下面,已在头文件中申明,部位就不太在意了
	{
		return 'Q';
	}
	return 'C';
}

//平手优化算法涵数
char Full(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
				return 0;
		}
	}
	return 1;
}
#include"game.h"

//游戏菜单
void menu(void)
{
	printf("****************************************\n");
	printf("*****1.进入游戏          0.退出游戏*****\n");
	printf("****************************************\n");
}

void game(void)
{
	char ret = 0;
	char board[ROW][COL] = { 0 };
	//复位旗盘
	InitBoard(board, ROW, COL);
	//复印旗盘
	DisplayBoard(board, ROW, COL);
	while (1)
	{
		//游戏玩家下象棋
		PlayerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//分辨游戏玩家是不是获胜
		ret = Win(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
		//电脑上下象棋
		ComputerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		//分辨电脑上是不是获胜
		ret = Win(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
	}

	if (ret == '*')
	{
		printf("祝贺你了赢啦!!!哇偶,棒极了!没几个人能击败我呢!\n");
		printf("\n");
	}
	else if (ret == '#')
	{
		printf("你输了!!!emmm,但是没事儿,终究你是人们哇!\n");
		printf("\n");
	}
	else
	{
		printf("平手!!!恩啊,你早已非常好了,但也要给油哦!\n");
		printf("\n");
	}
}

void test(void)
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("\n");
		printf("提示信息:挑选:>>>");
		scanf("%d", &input);
		printf("\n");
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("破游戏,俺不玩了。\n");
			break;
		default:
			printf("电脑上:FBI warning 不法键入,不法键入,请您主动点。\n\n电脑上:乖,咱再次键入!!!\n");
			break;
		}
	} while (input);
}

int main(void)
{
	test();
	return 0;
}

写在后面

这篇blog对三子棋中电脑上的优化算法开展了提升,五子棋和多子棋相近也不写在这儿了。
取回这句话,AI五子棋优化算法真的很难,等着我再学习再写吧,没拿下,痛哭…

假如上边的程序流程或是描述有什么问题还请诸位巨头不吝赐教哈。

评论
  • 消灭零回复