三子棋游戏

三子棋游戏

三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。如果两个人都掌握了技巧,那么一般来说就是平棋。一般来说,下在中间最有利,下在角上次之,下在边上再次之。最大的好处就是随便找个地方就可以玩这个简单而有趣的游戏了。

编程思路:
1、创建菜单,输入1开始游戏,输入0结束游戏,否则输入无效;
2、创建一个棋盘并初始化为’ ‘;Init();
3、打印棋盘;Print();
4、玩家落子,打印棋盘;PlayerMove();Print();
5、检测游戏是否结束;char winner = CheckGameOver();
5、电脑落子;CompulterMove();
7、检测游戏是否结束;char winner = CheckGameOver();
7.1、函数返回’x’表示玩家胜;
7.2、函数返回’o’表示电脑胜;
7.3、函数返回’q’表示和棋;
7.4、函数返回’ '表示游戏尚未结束,继续游戏。
8、主函数调用菜单函数。
8.1、若输入1,则开始游戏;Game();
8.2、若输入0,则结束游戏;
8.3、若输入其他,则打印您的输入有误。

具体代码如下:

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#define MAX_ROW 3
#define MAX_COL 3

char chess_board[MAX_ROW][MAX_COL];

//创建菜单,输入1开始游戏,输入0结束游戏,否则输入无效;
int Menu() {
	printf("##################\n");
	printf("####1.开始游戏####\n");
	printf("####2.结束游戏####\n");
	printf("##################\n");
	printf("请输入您的选择:");
	int choice = 0;
	scanf("%d", &choice);
	return choice;
}

void Init(){
	//棋盘使用'x'表示玩家落子;使用'o'表示电脑落子;使用' '表示未落子。
	for (int row = 0; row <= MAX_ROW; row++) {
		for (int col = 0; col <= MAX_COL; col++) {
			chess_board[col][row] = ' ';
		}
	}
}

void Print() {
	for (int row = 0; row < MAX_ROW; row++) {
		printf("| %c | %c | %c |\n", chess_board[row][0], chess_board[row][1], chess_board[row][2]);
		if (row != MAX_ROW - 1){
			printf("|---|---|---|\n");
		}
	}
}

void PlayerMove() {
	while (1){
		int row = 0, col = 0;
		printf("玩家落子!\n");
		printf("请输入您落子的位置(row,col):");
		scanf("%d %d", &row, &col);
		if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) {
			printf("您输入的位置非法,请重新输入!\n");
			continue;
		}
		if (chess_board[row][col] != ' '){
			printf("您输入的位置已被占用,请重新输入!\n");
			continue;
		}
		chess_board[row][col] = 'x';
		break;
	}
}

void CompulterMove() {
	printf("电脑落子!\n");
	while (1) {
		int row = rand() % MAX_ROW;
		int col = rand() % MAX_COL;
		if (chess_board[row][col] != ' ') {
			continue;
		}
		chess_board[row][col] = 'o';
		break;
	}
}

//棋盘满了返回1,否则返回0
int IsFull() {
	for (int row = 0; row <= MAX_ROW; row++) {
		for (int col = 0; col <= MAX_COL; col++) {
			if (chess_board[row][col] == ' ') {
				return 0;
			}
		}
	}
	return 1;
}
//函数返回'x'表示玩家胜
//函数返回'o'表示电脑胜
//函数返回'q'表示和棋
//函数返回' '表示游戏尚未结束,继续游戏
char CheckGameOver() {
	int row = 0, col = 0;
	//检查所有行;
	for (row = 0; row < MAX_ROW; row++) {
		if (chess_board[row][0] == chess_board[row][1] && chess_board[row][0] == chess_board[row][2])  {
			return chess_board[row][0];
		}
	}
 	//检查所有列;
	for (col = 0; col < MAX_COL; col++) {
		if (chess_board[0][col] == chess_board[1][col] && chess_board[0][col] == chess_board[2][col]) {
			return chess_board[0][col];
		}
	}
	//检查所有对角线;
	if (chess_board[0][0] == chess_board[1][1] && chess_board[0][0] == chess_board[2][2]) {
		return chess_board[0][0];
	}
	if (chess_board[0][2] == chess_board[1][1] && chess_board[0][2] == chess_board[2][0]) {
		return chess_board[0][2];
	}
	if (IsFull()) {
		return 'q';
	}
	return ' ';
}

void Game() {
	char winner = ' ';
	//1、创建一个棋盘并初始化为' ';
	Init();
	while (1) {
		system("cls");
		//2、打印棋盘;
		Print();
		//3、玩家落子;
		PlayerMove();
		Print();
		//4、检测游戏是否结束;
		winner = CheckGameOver();
		if (winner != ' ') {
			break;
		}
		//5、电脑落子;
		CompulterMove();
		//6、检测游戏是否结束。
		winner = CheckGameOver();
		if (winner != ' ') {
			break;
		}
	}
	system("cls");
	Print();
	if (winner == 'x') {
		printf("玩家胜利!\n");
	}
	else if (winner == 'o') {
		printf("电脑胜利!\n");
	}
	else if (winner == 'q') {
		printf("和棋!\n");
	}
	else {
		printf("好像出错了!\n");
	}
}

int main() {
	while (1){
		int choice = Menu();
		if (choice == 1) {
			Game();
		}
		else if (choice == 0) {
			printf("结束游戏!\n");
		}
		else {
			printf("你的输入有误,请重新输入!\n");
		}
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值