三子棋的实现思路(C语言)

三子棋的实现思路(C语言),第1张

三子棋的实现思路(C语言)

三子棋,顾名思义,就是三个子连成一串就算赢。

个人认为,三子棋的实现大概分为以下几个步骤:

1.你得搞一个棋盘

棋盘其实很简单,首先定义一个数组(最好初始化为空格),printf一个漂亮的棋盘外围,然后把数组的各个元素也搬到printf里面就行了,我是这样实现的:

 

 当然肯定不止这一种实现方法,具体根据自己喜好弄就行了。

2.玩家落子

玩家落子就是输入一个坐标,然后将坐标对应的数组元素改为x,o这种的,当然也可以用数字表示,我下一个字对写个1,也行。

当然这里面有一些注意的点,比如说数组的下标一边从0开始,但玩家一般没这习惯,就需要在代码里面做一些改变,比如说玩家不一定会按照你想的输入左边,输入个10 20 啥的。这都是一些具体的点,这里就不一一罗列了,我希望写出来的是整体的思想,框架,具体的点可以写的时候自己注意,也算是锻炼智慧。

3.判断输赢

这个就是按照三子棋的具体规则来写了,我是这样写的,可能有些复杂,参考一下就好

char DetermineResult(char arr[ROW][COL]) {
	for (int i = 0; i < ROW; i++) {
		if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ') {
			return arr[i][0];
		}
	}
	for (int i = 0; i < ROW; i++) {
		if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != ' ') {
			return arr[0][i];
		}
	}
		if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != ' ') {
			return arr[0][0];
		}
		if (arr[2][0] == arr[1][1] && arr[1][1] == arr[0][2] && arr[2][0] != ' ') {
			return arr[2][0];
		}
		for (int i = 0; i < ROW; i++) {
			for (int q = 0; q < COL; q++) {
				if (arr[i][q] == ' ') {
					return ' '; //继续。
				}
			}
		}return 'A'; //和棋。
	}

反正莫名其妙写了这么多,但是我估计也简化不了太多了。

值得注意的是,不要把所以的内容写到一个循环里面,不然很容易出现问题(这是我开始的时候犯的错误)。

4.电脑落子.

电脑落子涉及到的最重要的函数就是rand函数,也就是求随机数的函数,具体用法如下

srand(time(NULL));

rand()% t;

t是自己定的,比如说要求0-10,t就是10,srand是随机数的种子,rand函数其实是根据种子来进行一系列的计算得来的,所以种子一定不能相同,所以用的是时间戳,但是记得用时间戳得加上头文件time.h。

其他的就也是一些注意事项了,具体实现的时候自己把握就行。

5.再次判断输赢.

这五步都实现了以后就是其他的注意事项了,比如说什么,没什么好说的,看代码就知道了。

#define ROW 3 //行
#define COL 3 //列
#define _CRT_SECURE_NO_WARNINGS
#include 
#include 

void Player(char arr[ROW][COL]) {
	while (1) {
		int t = 0;
		int m = 0;
		scanf("%d %d", &t, &m);
		if (t <= 0 || t >= 4 || m <= 0 || m >= 4) {
			printf("重新输入!n");
		}
		else if (arr[t - 1][m - 1] != ' ') {
			printf("上面有棋子了!n");
		}
		else {
			arr[t - 1][m - 1] = 'o';
			break;
		}
	}
}

void InitBoard(char arr[ROW][COL]) {
	for (int i = 0; i < ROW; i++) {
		for (int j = 0; j < COL; j++) {
			arr[i][j] = ' ';

		}
	}
}

void ShowBoard(char arr[ROW][COL]) {
	printf("  | 1 | 2 | 3 |n");
	int i = 0;
	for (; i < ROW; i++) {
		printf("__+__+___+___+n");
		printf("%d | %c| %c | %c |n", i + 1, arr[i][0], arr[i][1], arr[i][2]);
	}
}

char DetermineResult(char arr[ROW][COL]) {
	for (int i = 0; i < ROW; i++) {
		if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ') {
			return arr[i][0];
		}
	}
	for (int i = 0; i < ROW; i++) {
		if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != ' ') {
			return arr[0][i];
		}
	}
		if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != ' ') {
			return arr[0][0];
		}
		if (arr[2][0] == arr[1][1] && arr[1][1] == arr[0][2] && arr[2][0] != ' ') {
			return arr[2][0];
		}
		for (int i = 0; i < ROW; i++) {
			for (int q = 0; q < COL; q++) {
				if (arr[i][q] == ' ') {
					return ' '; //继续。
				}
			}
		}return 'A'; //和棋。
	}


int PrintResult(char a, int* p) {
	if (a == 'o') {
		printf("你赢了!n");
		return 1;
	}
	else if (a == 'x') {
		printf("电脑赢了!n");
			*p = 0;
	}
	else if (a == 'A') {
		printf("你和电脑五五开!n");
		return 1;
	}
}

void Computer(char arr[ROW][COL]) {
	int tmp = 1;
	while (tmp) {
		srand((unsigned)time(NULL));
		int s = rand() % 3;
		int n = rand() % 3;
		if (arr[s][n] == 'o') {
			tmp = 1;
		}
		else if (arr[s][n] == 'x') {
			tmp = 1;
		}
		else {
			arr[s][n] = 'x';
			tmp = 0;
		}
	}
}

int main() {
	printf("************************n");
	printf("****** 1.开始游戏 ******n");
	printf("****** 2.退出游戏 ******n");
	printf("************************n");
	
	char arr[ROW][COL];
	InitBoard(arr); //初始化棋盘元素为空格。

	int a = 0;
	scanf("%d", &a);
	if (a == 1) {
		ShowBoard(arr); //展示棋盘,供玩家选择。
		printf("请选择坐标,用空格隔开,直接点是不行滴,小黑框框没那能力...n");
		int count = 1;
		while (count) {
			printf("玩家落子n");
			Player(arr);
			char c = DetermineResult(arr); //判断输赢,并返回赢家。 
			ShowBoard(arr);
			if (PrintResult(c, &count) == 1)
				break;
			printf("电脑落子n");
			Computer(arr);
			ShowBoard(arr);
			char b = DetermineResult(arr); //判断输赢,并返回赢家。
			PrintResult(b, &count); //输出输赢。	
		}
	}
	else if (a == 2) {
		printf("游戏结束!n");
	}
	else {
		printf("功能简单,不知道您的意思!n");
	}
}

最后,这个使用vs实现的。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4951159.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存