三子棋-c语言

简易三子棋

#include<stdio.h>
#include<time.h>
#define ROW 3
#define COL 3

//初始化棋盘
void InitGame();
//开始游戏
void StartGame();
//展示棋盘
void ShowChessBoard();
//判空操作
int IsFullChessBoard();
//玩家落子
void PlayerMove();
//电脑落子
void ComputerMove();
//判断结果
char CheckResult();
//宣布结果
char UnveilEnd();
static char board[ROW][COL];//延长变量使用周期

void StartGame()
{
	printf("开始游戏\n");
	InitGame();//1初始化棋盘
	char chess;
	while (1)//2开始游戏
	{
		ShowChessBoard();//3 显示棋盘

		PlayerMove();//4 玩家下棋

		chess = CheckResult();//5 判断结果
		if (chess != 'c')
		{
			ShowChessBoard();
			break;
		}

		ComputerMove();//6 人机下棋

		chess = CheckResult();//7 判断结果
		if (chess != 'c')
		{
			ShowChessBoard();
			break;
		}
			
	}
}

void InitGame()
{
	for (int i = 0; i<ROW; ++i)
	{
		for (int j = 0; j<COL; ++j)
		{
			board[i][j] = ' ';
		}
	}
}
void ShowChessBoard()
{
	printf(" --- --- ---\n");
	for (int i = 0; i<ROW; ++i)
	{
		printf("| %c | %c | %c |\n", 
		board[i][0],board[i][1],board[i][2]);
		if (i != ROW )
			printf(" --- --- ---\n");
	}
}
void PlayerMove()
{
	printf("到你落子了,请输入位置》》》");
	int row, col;//棋盘行列
	while (1)
	{
		scanf("%d %d", &row, &col);
		if (board[row - 1][col - 1] != ' ')
		{
			printf("此处有子,请重新落子\n");
			continue;
		}
		if(board[row - 1][col - 1] = 'x')
		break;
	}
}
void ComputerMove()
{
	int row, col;
	srand(time(0));
	while (1)
	{
		//随机产生位置
		row = rand() % ROW;
		col = rand() % COL;

		if (board[row][col] == ' ')
		{
			board[row][col] = 'o';
			break;
		}
	}
}
int IsFullChessBoard()
{
	for (int i = 0; i<ROW; ++i)
	{
		for (int j = 0; j<COL; ++j)
		{
			if (board[i][j] == ' ')
				return 0;
		}
	}
	return 1;
}
//x:玩家赢
//o:电脑赢
//h:和棋
//c:继续
char CheckResult()
{
	for (int i = 0; i < ROW; i++)
	{
		if (board[i][0] !=' ' && board[i][0] == board[i][1] && board[i][1] == board[i][2])
			return board[i][0];//列判断
		if (board[0][i] !=' ' && board[0][i] == board[1][i] && board[1][i] == board[2][i])
			return board[0][i];//行判断
	}
	//对角线判断
	if (board[1][1] != ' ' && board[0][0] == board[1][1] && board[2][2] == board[1][1])
		return board[1][1];

	if (board[1][1] != ' ' && board[0][2] == board[1][1] && board[2][0] == board[1][1])
		return board[1][1];
	//是否和棋
	if (IsFullChessBoard())
		return 'h';
	//继续下棋
	return 'c';
}
char UnveilEnd()
{
	char end = CheckResult();
	if (end == 'x')
		printf("你胜利了\n");
	if (end == 'o')
		printf("电脑胜利了\n");
	if (end == 'h')
		printf("和棋\n");
	printf("是否再来一次?\n【y】>>是||【其他】>>否\n");
	char cycle=getchar();
	cycle = getchar();
	return cycle;
}int main()
{
	int select = 1;
	while (select)
	{
		printf("--------------------------\n");
		printf("**************************\n");
		printf("--------------------------\n");
		printf("**********三子棋**********\n\n");
		printf("*》》【1】开始游戏》》》》\n\n");
		printf("*》》【0】退出游戏》》》》\n\n");
		printf("**************************\n");
		printf("--------------------------\n");
		printf("请选择> > >");
		scanf("%d", &select);
		if (select == 0)
			break;
		if (select != 1)
		{
			printf("输入有误,请重新输入\n");
			continue;
		}
		char anew = 'y';
		while (select == 1 && anew == 'y')
		{

			StartGame();//进入游戏
			anew = UnveilEnd();//宣布结果
			if (anew == 'y')
				continue;
			else break;
		}
	}
	printf("Game Over\n");
	return 0;
}

利用基础的数组与循环来实现三子棋游戏。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值