三子棋

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_ROW 3
#define MAX_COL 3
//满了  1   没满   0
int IsFull(char board[MAX_ROW][MAX_COL]){
	for (int row = 0; row < MAX_ROW; row++){
		for (int col = 0; row < MAX_COL; col++){
			if (board[row][col] == ' '){
				return 0;
			}
		}
	}
	return 1;
}
void Init(char board[MAX_ROW][MAX_COL]){
	for (int row = 0; row < MAX_ROW; row++){
		for (int col = 0; col < MAX_COL; col++){
			board[row][col] = ' ';
		}
	}
	srand(time(0));
}
void Print(char board[MAX_ROW][MAX_COL]){
	system("cls");
	printf("----|---|---\n");
	for (int row = 0; row < MAX_ROW; row++){
		printf("| %c | %c | %c |\n", board[row][0], board[row][1], board[row][2]);
		printf("----|---|---\n");
	}
}
void PlayerMove(char board[MAX_ROW][MAX_COL]){
	while (1){
		printf("请输入坐标(row col):\n");
		int row = 0;
		int col = 0;
		scanf("%d %d", &row, &col);
		if (row<0 || row>MAX_ROW || col<0 || col>MAX_COL){
			printf("你的输入有误!\n");
			continue;
		}
		if (board[row][col] != ' '){
			printf("你的落子的位置已经有子了!\n");
			continue;
		}
		board[row][col] = 'x';
		break;
	}
}
void ComputerMove(char board[MAX_ROW][MAX_COL]){
	//随机落子方式
	while (1){
		int row = rand() % MAX_ROW;
		int col = rand() % MAX_COL;
		if (board[row][col] != ' '){
			continue;
		}
		board[row][col] = 'o';
		break;
	}
}
//这个函数返回值类型 char
//1.玩家胜利 x
//2.电脑胜利 o
//3.和棋	 =
//4.未分胜负 ' '
char IsWin(char board[MAX_ROW][MAX_COL]){
	//一行一列对角线
	//1.判定行
	for (int row = 0; row < MAX_ROW; row++){
		if (board[row][0]==board[row][1]&&board[row][0]==board[row][2]
			&&board[row][0]!=' '){
			return board[row][0];
		}
	}
	//2.判定列
	for (int col = 0; col < MAX_COL; col++){
		if (board[0][col] == board[1][col]
			&& board[0][col] == board[2][col]
			&& board[0][col] != ' '){
			return board[0][col];
		}
	}
	//3.判定对角线
	if (board[0][0] == board[1][1] && board[0][0] == board[2][2]&&board[0][0]!=' '){
		return board[0][0];
	}
	if (board[0][2] == board[1][1] && board[0][2] == board[2][0] && board[0][2] != ' '){
		return board[0][2];
	}
	//是否和棋
	if (IsFull(board)){
		return '=';
	}
	return ' ';
}
int main(){
	
	char chess_board[MAX_ROW][MAX_COL];
	//初始化
	Init(chess_board);
	//进行打印
	char result = ' ';
	while (1){
		Print(chess_board);
		//玩家落子
		PlayerMove(chess_board);
		//判定游戏是否结束
		result = IsWin(chess_board);
		if (result != ' '){
			break;
		}
		//电脑落子
		ComputerMove(chess_board);
		//判定游戏是否结束
		int result = IsWin(chess_board);
		if (result != ' '){
			break;
		}
	}
	Print(chess_board);
	if (result == 'x'){
		printf("你赢了\n");
	}
	else if (result == 'o'){
		printf("你输了\n");
	}
	else{
		printf("和棋!");
	}
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值