C语言实现三子棋游戏

C语言实现三子棋游戏,第1张

C语言实现三子棋游戏 一、需求分析

用c语言实现人机对战三子棋游戏的模拟,主要实现功能包括:

1.菜单界面——开始游戏及退出;

2.玩家、电脑按序下棋

3.输赢判断。

二、代码实现及运行界面

1.菜单

void menu()
{
	printf("**********n");
	printf("**1.开始**n");
	printf("**0.退出**n");
	printf("**********n");
}
void game()
{
	char ret = ' ';
	char board[ROW][COL];
	//棋盘初始化
	InitBoard(board, ROW, COL);
	//打印棋盘
	Print(board, ROW, COL);
	
	while(1)
	{
		
		//玩家下棋
		player(board, ROW, COL);
		ret = IsWin(board, ROW, COL);
		if (ret == '*')
		{
			printf("玩家获胜,本轮游戏结束!n");
			break;
		}
		if (ret == 'O')
		{
			printf("平局,本轮游戏结束!n");
			break;
		}
		//电脑下棋
		computer(board, ROW, COL);
		ret = IsWin(board, ROW, COL);
		if (ret == '#')
		{
			printf("人机获胜,本轮游戏结束!n");
			break;
		}
		if (ret == 'O')
		{
			printf("平局,本轮游戏结束!n");
			break;
		}
	}
}
int main()
{
	int choose = 0;
	do{
		menu();
		printf("请输入选择:");
		scanf("%d", &choose);
		switch (choose)
		{
		case 1:
			printf("开始n");
			game();
			break;
		case 0:
			printf("退出n");
			break;
		default:
			printf("输入错误,重新输入n");
			break;
		}
	} while (choose);
	return 0;
}

 2.进入游戏界面

用户输入1后首先显示初始化的棋盘,之后根据提示输入坐标进行游戏

//初始化棋盘并打印   ROW COL经宏定义为3
void Print(char board[ROW][COL], int row, int col)
{
	int i = 0, j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			printf(" %c ", board[i][j]);
			//if (i == row - 1 && j == col - 1)
				//break;
			if (j < col - 1)
				printf("|");
		}
		printf("n");
		if (i < row - 1)
		{
			for (j = 0; j < col; j++)
			{
				printf("---");
				if (j < col - 1)
					printf("|");
			}
		}
		printf("n");
	}
}
//玩家下棋
void player(char board[ROW][COL], int row, int col)
{
	int x, y;
	while (1)
	{
		printf("玩家下棋:n");
		printf("玩家输入坐标:");
		scanf("%d %d", &x, &y);
		if (x > 0 && y > 0 && x <= row && y <= col)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				Print(board, ROW, COL);
				break;
			}
			
			else
			{
				printf("该坐标已被占用,请重新输入!n");
			}
		}
		else
		{
			printf("输入坐标超出范围,请重新输入!n");
		}
	}
}
//电脑下棋
void computer(char board[ROW][COL], int row, int col)
{
	printf("电脑下棋:n");
	int x = 0, y = 0;
	while (1)
	{
		srand((unsigned int)time(NULL));//电脑采用随机数进行落子
		x = rand() % ROW;
		y = rand() % COL;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			Print(board, ROW, COL);
			break;
		}
	}
}

3.输赢判断

每次落子根据下棋结果判断输赢或平局,棋盘不满则继续

//判断输赢
char IsWin(char board[ROW][COL], int row, int col)
{
	int i = 0, j = 0;
	for (i = 0; i < row; i++)
	{
		if (board[i][0] == '*' && board[i][1] == '*' && board[i][2] == '*')
			return '*';
		if (board[i][0] == '#' && board[i][1] == '#' && board[i][2] == '#')
			return '#';
	}
	for (j = 0; j < col; j++)
	{
		if (board[0][j] == '*' && board[1][j] == '*' && board[2][j] == '*')
			return '*';
		if (board[0][j] == '#' && board[1][j] == '#' && board[2][j] == '#')
			return '#';
	}
	if ((board[0][0] == '*' && board[1][1] == '*' && board[2][2] == '*')|| (board[2][0] == '*' && board[1][1] == '*' && board[0][2] == '*'))
		return '*';
	if ((board[0][0] == '#' && board[1][1] == '#' && board[2][2] == '#')|| (board[2][0] == '#' && board[1][1] == '#' && board[0][2] == '#'))
		return '#';
	for (i = 0; i < row; i++)//判断是否有空位置
	{
		for (j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
				return  'C';
				
		}
	}
	return 'O';//棋盘满了但没有赢家
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5502319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存