【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);
}
