三子棋

三子棋的主要函数可以分为以下几个:

//初始化棋盘
void InitBoard(char board[][ROW], int row, int col);
//展示棋盘
void ShowBoard(char board[][ROW], int row, int col);
//玩家移动
void PlayerMove(char board[][ROW]);
//判断输赢
int IsWin(char board[][ROW], int row, int col);
//电脑移动
void ComputerMove(char board[][ROW]);
//判断是否下满棋盘
int IsFull(char board[][ROW]);
//打印菜单
void menu()
//游戏开始
void game()

初始化棋盘部分

//初始化棋盘
void InitBoard(char board[][ROW], int row, int col)
{
	int i = 0, j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			board[i][j] = ' ';//给二维数组每个位置赋值为空格
		}
	}
}

展示棋盘部分

void ShowBoard(char board[][ROW], 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]);
			printf("|");
		}
		printf("\n");
		for (j = 0; j < col; j++)
		{
			printf("___|");
		}
		printf("\n");
	}
}

玩家移动部分

void PlayerMove(char board[][ROW])
{
	int x=0, y=0;
	printf("请输入棋子的位置:");
	while (1)
	{
		scanf("%d%d", &x, &y);
		if ((x > 0 && x<4) && (y>0 && y <4))//判断输入位置是否合法
		{
			if (board[x-1][y-1] == ' ')
			{
				board[x - 1][y - 1] = 'x';
				break;
			}
			else
			{
				printf("该位置有棋子了,请重新输入!\n");
			}
		}
		else
		{
			printf("输入位置不合法,请重新输入!\n");
		}
	}
	system("cls");//清屏操作
}

判断棋盘是否下满,平局的情况

int IsFull(char board[][ROW])
{
	int i = 0, j = 0;
	for (i = 0; i < ROW; i++)
	{
		for (j = 0; j < COL; j++)
		{
			if (board[i][j] == ' ')//如果棋盘没有下满,返回0
			{
				return 0;
			}
		}
	}
	return 1;//棋盘下满了,返回1
}

判断输赢

int IsWin(char board[][ROW], int row, int col)
{
	int x = 0, y = 0;
	//判断是否有横行三个相同
	for (x = 0; x < row; x++)
	{
		if (board[x][y] == board[x][y + 1] && board[x][y + 1] == board[x][y + 2] && board[x][y] != ' ')
		{
			return board[x][y];
		}
	}
	//判断/是否相同
	if (board[x][x] == board[x - 1][x - 1] && board[x - 1][x - 1] == board[x - 2][x - 2] && board[x][x] != ' ')
	{
		return board[x][x];
	}
	x = 0;
	//判断竖行是否三个相同
	for (y = 0; y < row; y++)
	{
		if (board[x][y] == board[x + 1][y] && board[x + 1][y] == board[x + 2][y] && board[x][y]!= ' ')
		{
			return board[x][y];
		}
	}
	//判断\是否相同
	if (board[x][x] == board[x + 1][x + 1] && board[x + 1][x + 1] == board[x + 2][x + 2] && board[x][x]!= ' ')
	{
		return board[x][x];
	}
	if (IsFull(board))//判断是否下满棋盘
	{
		return 1;
	}
	return 0;
}

电脑移动

void ComputerMove(char board[][ROW])
{
	int x = 0, y = 0;
	while (1)
	{
		x = rand() % ROW;
		y = rand() % COL;
		if (board[x][y] != 'x'&&board[x][y] != 'o')
		{
			board[x][y] = 'o';
			break;
		}
	}
}

game函数

//游戏开始
void game()
{
	int ret =0;
	char board[3][3] = { 0 };
	InitBoard(board, ROW, COL);
	ShowBoard(board, ROW, COL);
	while (1)
	{
		PlayerMove(board);//玩家移动
		ret = IsWin(board, ROW, COL);//判断玩家移动后,玩家和电脑的输赢情况
		if (ret != 0)
		{
		break;
		}
		ShowBoard(board, ROW, COL);//打印玩家移动后的棋盘
		printf("电脑移动\n");
		ComputerMove(board);//电脑移动
		ShowBoard(board, ROW, COL);//打印电脑移动后的棋盘
		ret = IsWin(board, ROW, COL);//判断电脑移动后,玩家和电脑的输赢情况
		if (ret != 0)
		{
		break;
		}
	}
		if (ret == 'x')
		{
			printf("牛逼傲\n");
		}
		else if (ret == 'o')
		{
			printf("真菜\n");
		}
		else if (ret==1)
		{
			printf("平局\n");
		}
}

菜单打印

void menu()
{
	printf("*****************************\n");
	printf("**********0.不玩游戏*********\n");
	printf("**********1.要玩游戏*********\n");
	printf("*****************************\n");
}

主函数部分

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//设置随机种子
	do
	{
		menu();
		printf("请输入您的玩法-->>");
		scanf("%d", &input);
		system("cls");//清屏操作
		switch (input)
		{
		case 1:
			printf("游戏开始\n");
			game();
			break;
		case 0:
			printf("感谢使用!\n");
			break;
		default:
			printf("请输入正确的玩法~~~\n");
			break;
		}
	} while (input);
	return 0;
}

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值