ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言实现三子棋

2021-10-15 11:03:29  阅读:155  来源: 互联网

标签:COLSIZE temp 实现 三子 C语言 int chess printf ROWSIZE


简单的三子棋,电脑随即下子,使用二维数组定义棋盘并存储棋子。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define ROWSIZE 3//宏定义行数
#define COLSIZE 3//宏定义列数

char jugde(char chess[ROWSIZE][COLSIZE]) {//判断胜负
	// 判断行
	for (int i = 0; i < ROWSIZE; i++) {
		if (chess[i][0] != ' ' && chess[i][0] == chess[i][1] && chess[i][0] == chess[i][2]) {
			return chess[i][0];
		}
	}
	//判断列
	for (int i = 0; i < COLSIZE; i++) {
		if (chess[0][i] != ' ' && chess[0][i] == chess[1][i] && chess[0][i] == chess[2][i]) {
			return chess[0][i];
		}
	}
	//判断对角线
	if (chess[0][0] != ' ' && chess[0][0] == chess[1][1] && chess[0][0] == chess[2][2]) {
		return chess[0][0];
	}
	//判断负对角线
	if (chess[0][2] != ' ' && chess[0][2] == chess[1][1] && chess[0][2] == chess[2][0]) {
		return chess[0][2];
	}

	return ' ';
}

int boardFall(char chess[RAND_MAX][COLSIZE]) {//判断棋盘是否满,如果满则退出循环
	int temp_fall = 0;
	for (int i = 0; i < ROWSIZE; i++) {
		for (int j = 0; j < COLSIZE; j++) {
			if (chess[i][j] != ' ') {
				temp_fall++;
			}
		}
	}
	if (temp_fall == 9) {
		return 1;
	}
	return 0;
}

int computerPut(char chess[ROWSIZE][COLSIZE]) {//电脑输入(采用时间戳赋值随机因子使电脑随机落子)
	int rand_row = 0;
	int rand_col = 0;
	while (1) {
	    rand_row = rand() % 3;
	    rand_col = rand() % 3;
		if (chess[rand_row][rand_col] == ' ') {
			chess[rand_row][rand_col] = 'O';
			break;
		}
		if (boardFall(chess) == 1) {
			break;
		}
	}
}

int playerPut(char chess[ROWSIZE][COLSIZE],int row,int col) {//玩家输入
	if ((row < ROWSIZE && row >= 0) && (col >= 0 && col < COLSIZE)) {
		if (chess[row][col] == ' ') {
			chess[row][col] = 'X';
			return 1;
		}
		else {
			printf("该位置已有棋子请重新落子\n");
			return 0;
		}
	}
	else {
		printf("棋子位置超出棋盘请重新落子\n");
		return 0;
	}
}

int inputBoard(char chess[ROWSIZE][COLSIZE]) {//打印棋盘
	for (int i = 0; i < ROWSIZE; i++) {
		printf("+---+---+---+\n");
		for (int j = 0; j < COLSIZE; j++) {
			printf("|");
			printf(" %c ", chess[i][j]);
			if (j == 2) {
				printf("|");
				printf("\n");
			}
		}
	}
	printf("+---+---+---+");
}

int initBoard(char chess[ROWSIZE][COLSIZE]) {//初始化棋盘
	for (int i = 0; i < ROWSIZE; i++) {
		for (int j = 0; j < COLSIZE; j++) {
			chess[i][j] =' ';
		}
	}
}

int main() {
    char chess[ROWSIZE][COLSIZE] = { 0 };
	initBoard(chess);//初始化棋盘
	int row_ = 0;
	int col_ = 0;
	char temp_3 = 0;
	int temp_ = 0;
	int temp_1 = 0;
	int temp_2 = 0;
	srand((unsigned int)time(0));
	while (1) {
		system("cls");
		//1.打印棋盘
		inputBoard(chess);
		printf("\n");
		//2.用户输入
		while (1) {
			printf("玩家下入棋子坐标(中间用空格隔开):");
			scanf("%d %d", &row_, &col_);
			temp_ = playerPut(chess, row_ - 1, col_ - 1);
			if (temp_ == 1) {
				break;
			}
		}
		//胜负判断结束循环
		temp_3 = jugde(chess);
		temp_2 = boardFall(chess);
		if (temp_3 == 'X') {
			break;
		}
		if (temp_3 == 'O') {
			break;
		}
		if (temp_2 == 1) {
			break;
		}
		//3.电脑输入
		computerPut(chess);
		//判断胜负结束循环
		temp_3 = jugde(chess);
		temp_2 = boardFall(chess);
		if (temp_3 == 'X') {
			break;
		}
		if (temp_3 == 'O') {
			break;
		}
		if (temp_2 == 1) {
			break;
		}

	}

	system("cls");
	inputBoard(chess);
	temp_3 = jugde(chess);
	printf("\n");
	if (temp_3 == 'X') {
		printf("玩家胜!");
	}
	if (temp_3 == 'O') {
		printf("电脑胜!");
	}
	if (temp_3 == ' ') {
		printf("平手!");
	}
}

标签:COLSIZE,temp,实现,三子,C语言,int,chess,printf,ROWSIZE
来源: https://blog.csdn.net/weixin_49312527/article/details/120779336

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有