C语言实现三子棋小游戏

C语言实现三子棋小游戏

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#define  ROW_MAX 3//宏定义棋盘的行
#define  COL_MAX 3//宏定义棋盘的列
char Chess[ROW_MAX][COL_MAX] = {0};//定义一个二维数组的棋盘
int neum() {//设置游戏菜单
	int chooice = 0;
	printf("******************\n");
	printf("**1.开始游戏******\n");
	printf("**2.退出游戏******\n");
	printf("******************\n");
	printf("请输入您的选择 ");
	scanf("%d", &chooice);
	return chooice;
}
void Print() {//打印棋盘
	for (int ROW=0; ROW < ROW_MAX; ROW++) {
		printf("| %c | %c | %c |\n", Chess[ROW][0], Chess[ROW][1], Chess[ROW][2]);
		if (ROW != ROW_MAX-1) {
		printf("|---|---|---|\n");
		}
	}
}
void Playermove() {
	while (1) {

		printf("玩家落子\n");
		printf("请输入落子位置(ROW,COL) ");
		int ROW = 0;
		int COL = 0;
		scanf("%d %d", &ROW, &COL);
		//检测用户输入的坐标是否合法
		
		if (ROW>2 || COL > 2||ROW<0||COL<0) {
			printf("您输入的坐标有误请重新输入\n");
			continue;
		}
		if (Chess[ROW][COL] != ' ') {
			printf("您输入的坐标已经被他人占用请重新输入\n");
			continue;
		}
		Chess[ROW][COL] = 'X';
		break;
		printf("玩家落子完毕\n");
	}

}
void Computermove() {
	srand((unsigned int)time(NULL));
		printf("电脑落子\n");
	while (1) {
		int ROW = rand() % 3;
		int COL = rand() % 3;
		if (Chess[ROW][COL] != ' ') {
			continue;
		}
		Chess[ROW][COL] = 'O';
		break;
	}

	printf("电脑落子完毕\n");
}
char Cheekwinner() {
	//检查所有行是否连成一条线
	for (int ROW = 0; ROW < ROW_MAX; ++ROW) {
		if (Chess[ROW][0] == Chess[ROW][1] && Chess[ROW][0] == Chess[ROW][2]) {
			return Chess[ROW][0];
		}
	}
	for (int COL = 0; COL < COL_MAX; ++COL) {
		if (Chess[0][COL] == Chess[1][COL] && Chess[0][COL] == Chess[2][COL]) {
			return Chess[0][COL];
		}
	}
	if (Chess[0][0] == Chess[1][1] && Chess[0][0] == Chess[2][2]) {
		return Chess[0][0];
	}
	else if (Chess[0][2] == Chess[1][1] && Chess[0][2] == Chess[2][0]) {
		return Chess[0][2];
	}
	else if (IsFull()){
		return 'q';//返回q表示和棋
	}
	return ' ';//返回空格表示未分胜负
}
//棋盘满返回1否则返回0
int IsFull() {
	for (int ROW = 0; ROW < ROW_MAX; ++ROW) {
		for (int COL = 0; COL < COL_MAX; ++COL) {
			if (Chess[ROW][COL] == ' ') {
				return 0;
			}
		}
	}
	return 1;
}
void Cheek_body() {
	int ROW=0;
	int COL=0;
	for (ROW = 0; ROW < ROW_MAX; ++ROW) {
		for (COL = 0; COL < COL_MAX; ++COL) {
			Chess[ROW][COL] = ' ';
		}
	}
}
void GAME() {
	char winner = ' ';
	//初始化棋盘
	Cheek_body();
	while (1) {
		//打印棋盘
		Print();
		//玩家落子
		Playermove();
		Print();
		//判断胜负
		winner=Cheekwinner();
		if (winner != ' ') {
			break;
		}
		//电脑落子
		Computermove();
		//判断胜负
		winner=Cheekwinner();
		if (winner != ' ') {
			break;
		}
	}
	if (winner == 'X') {
		printf("您赢了!\n");
	}
	else if (winner == 'O') {
		printf("您真菜!\n");
	}
	else if (winner == 'q') {
		printf("您和电脑五五开");
	}
}



int main() {

	while (1)
	{
		int ret=neum();
		if (ret == 1) {
			GAME();
		}
		else if (ret == 2) {
			printf("GOODBAY\n");
			return;
		}
		else {
			printf("您输入的选项有误");
		}
	}
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值