> 文档中心 > 三子棋的实现

三子棋的实现

一、实现三子棋的步骤

1.进入游戏

2.打印棋盘

3.玩家下棋

4.电脑下棋

5.判断输赢

二、实现代码

1.进入游戏

先创建一个主函数

int main(){test();return 0;}

再进行三子棋的结构的创建

利用do_while循环创建结构使三子棋能够重复玩。并用switch语句进行三子棋的进入和退出。

void test(){int input = 0;srand((unsigned int)time(NULL));do {menu();printf("请输入:>\n");scanf("%d", &input);switch (input){case 1:/*printf("三子棋\n");*/game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误,请重新输入\n");break;}} while (input);}

构建菜单

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

这样输入1进入游戏,输入0退出游戏

2.打印棋盘

首先创建game函数,在game函数里面书写打印棋盘的函数

char ret = 0;//存放棋盘数据char board[ROW][COL] = { 0 };//初始化棋盘为全空格InitBoard(board, ROW, COL);//打印棋盘DisplayBoard(board, ROW, COL);

创建头文件game.h,在头文件中引出DisplayBoard函数,并创建game.c文件,在文件中书写关于三子棋的函数。通过一个for语句将棋盘初始化,并用for循环进行三子棋棋盘的构建。

//初始化棋盘void InitBoard(char board[ROW][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 DisplayBoard(char board[ROW][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("\n");if (i < row - 1){for (j = 0; j < col; j++){//打印分割行printf("---");if (j < col - 1){printf("|");}}printf("\n");}}}

这样可以打印出来一个三子棋棋盘。

3.玩家下棋

写出玩家下棋的函数player_move并打印棋盘

利用if语句进行判断空中是否有棋子并且是否越界,并下棋。

void player_move(char board[ROW][COL], int row, int col){while (1){int x = 0;int y = 0;printf("玩家下棋\n");printf("请输入:>");scanf("%d %d", &x, &y);if ((x >= 1) && (x = 1) && (y <= col)){if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*';break;}else{printf("坐标占用,请重新输入");}}else{printf("输入错误,请重新输入\n");}}}

4.电脑下棋

写出电脑下棋的函数computer_move并打印棋盘

用rand()函数进行随机值的选择,并使用time()函数保证每一个都是随机值,并用取余方式使棋子只能在0~2之间。

void computer_move(char board[ROW][COL], int row, int col){int x = 0;int y = 0;printf("电脑下棋:>\n");while (1){x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}}}

 5.判断输赢

游戏分为四种情况,玩家赢,电脑赢,平局,棋盘满这四种情况

先用ret接受is_win()函数的值,再用if语句判断是哪一种情况。再用while语句保证玩家和电脑能够一直下棋。

while (1){//玩家下棋player_move(board, ROW, COL);DisplayBoard(board, ROW, COL);//判断输赢ret = is_win(board, ROW, COL);if (ret != 'C'){break;}//电脑下棋computer_move(board, ROW, COL);DisplayBoard(board, ROW, COL);//判断输赢ret = is_win(board, ROW, COL);if (ret != 'C'){break;}}if (ret == '*'){printf("玩家赢了\n");}if (ret == '#'){printf("电脑赢了\n");}if (ret == 'Q'){printf("平局\n");}DisplayBoard(board, ROW, COL);}//什么情况,游戏就结束了//玩家赢 - '*'//电脑赢 - '#'//平局   - 'Q'//继续   - 'C'//

is_win()函数的实现

//判断棋盘是否满了int is_full(char board[ROW][COL], int row, int col){int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){if (board[i][j] == ' ')return 0;}}return 1;}char is_win(char board[ROW][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][0];}}//判断列相等for (i = 0; i < row; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){return board[0][i];}}//判断斜方向是否相等if (board[1][1] == board[0][0] && board[1][1] == board[2][2] && board[1][1] != ' '){return board[1][1];}if (board[1][1] == board[2][0] && board[1][1] == board[0][2] && board[1][1] != ' '){return board[1][1];}//判断是否平局if (is_full(board, row, col)==1){return 'Q';}//若无以上情况则继续return 'C';}

以上为三子棋编译全过程

代码实现: