【C语言】三子棋小游戏

如果想要用C语言实现三子棋,我们可以创建一个头文件game.h,两个源文件test.c和game.c

第一步,我们需要打印一个菜单

void menu() {
	printf("**********************************************
");
	printf("****************  1.play  ********************
");
	printf("****************  0.exit  ********************
");
	printf("**********************************************
");
}

接下来,我们可以输入1进行游戏,输入0退出游戏,如果输入既不是1也不是0重新输入

int input = 0;
		
		do {menu();
		
			scanf("%d", &input);
			switch (input) {
			case 1:game(); break;
			case 0:printf("退出游戏
"); break;
			default:printf("输入错误,重新输入
"); break;
			}
		} while (input);

第二步 我们需要打印棋盘,打印的思路是一行棋,一行线,最后一行不打印线,打印列同理。打印之前要注意先将棋初始化为空格 ,不然会出现乱码。

#define ROW 3
#define COL 3
void board_chushi(char board[][COL], int row, int col) {
	int i = 0;
	for (i = 0; i < row; i++) {
		int j = 0;
		for (j = 0; j < col; j++) {
			board[i][j] =  ;
		}
	}
}
void board_print(char board[][COL], int row, int col) {
		int i = 0;
		for (i = 0; i < row; i++) {
			int j = 0;
			for (j = 0; j < col; j++) {
				printf(" %c ", board[i][j]);
				if (j < col - 1)printf("|");
			}
			printf("
");
			if (i < row - 1) {
				int j = 0;
				for (j = 0; j < col; j++) {
					printf("---");
					if (j < col - 1)printf("|");
				}
				printf("
");
			}
		}
	}

第三步,我们就可以开始下棋了,玩家先下,打印棋盘,电脑下,打印棋盘,电脑下可以用rand()函数实现随机值

#include<stdlib.h> #include<time.h> srand((unsigned int)time(NULL)); rand();
void player(char board[][COL], int row, int col) {
	int x = 0;
	int y = 0;
	
	while(1){
		scanf("%d %d", &x, &y);
	if (x >= 1 && x <= row && y >= 1 && y <= col) {
		if (board[x-1][y-1] ==  ) {
			board[x-1][y-1] = #;
			break;
		}
		else printf("已输入,重新输入
");
	}
	else printf("非法输入,重新输入
");
	}	
}
void computer(char board[][COL], int row, int col) {
	
	while (1) {int x = rand() % row;
	int y = rand() % col;
		if (board[x][y] ==  ) {
			board[x][y] = *;
			break;
		}
	}
}

第四步,每下一步棋都要判断一下有没有赢,有四种状态:玩家赢、电脑赢、平局、继续。

判断平局和继续的区别是棋盘有没有满,所以我们需要创建一个函数判断。

int full(char board[][COL], int row, int col) {
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++) {
		for (j = 0; j < col; j++) {
			if (board[i][j] ==  )return 0;
		}
	}return 1;
}
char panduan(char board[][COL], int row, int col) {
	int i = 0;
	
	for (i = 0; i < row; i++) {
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] !=  )
			return board[i][1];
	}
	for (i = 0; i < row; i++) {
		if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] !=  )
			return board[1][i];
	}
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] !=  )
		return board[1][1];
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] !=  )
		return board[1][1];
	int ret=full(board, row, col);
	if (ret == 1)return Q;
	return C;
}
void game() {
	char re = 0;
	char board[ROW][COL];
	board_chushi(board, ROW, COL);//初始化棋盘
	board_print(board, ROW, COL);//打印棋盘
	while (1) {
		printf("玩家走
");
		player(board, ROW, COL);
		re = panduan(board, ROW, COL);
		board_print(board, ROW, COL);
		if(re!=C)break;
		printf("电脑走
");
		computer(board, ROW, COL);
		re = panduan(board, ROW, COL);
		board_print(board, ROW, COL);
		if (re != C)break;	
	}
	if (re == #)printf("玩家胜
");
	if (re == *)printf("电脑胜
");
		if (re == Q)printf("平局
");
		board_print(board, ROW, COL);


}
经验分享 程序员 微信小程序 职场和发展