想必大家都玩过三子棋吧!那有没有用代码实现三子棋呢?
那让我们来看看该如何实现吧!绝对详细,但需要一定的c语言基础哦
看不懂的可以在给我留言,我会解答哦!
或者也可以到我的Gitee里去看,这是链接:李家强 (li--jiaqiang) - Gitee.com 这里的条理更清晰!
话不多说上代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include#include #include #define ROW 3 #define COL 3 //各个函数的注释: 初始化棋盘为空格 //void InitBoard(char bored[3][3], int row, int col); 打印棋盘 //void DisplayBored(char board[3][3], int row, int col); 玩家下棋 //void Player_move(char board[ROW][COL], int row, int col); 电脑下棋 //void computer_move(char board[3][3], int row, int col); 输赢判断 //char is_win(char board[ROW][COL], int row, int col); //初始化棋盘: void InitBoard(char board[3][3], 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 DisplayBored(char board[3][3], int row, int col) { int i = 0, j = 0; for (i = 0; i < ROW; ++i) { //printf(" %c | %c | %c n", board[i][0], board[i][1], board[i][2]); 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"); } } } //玩家下棋: void Player_move(char board[ROW][COL], int row, int col) { int x = 0, y = 0; printf("玩家下棋n"); printf("请输入坐标:>>"); scanf("%d %d", &x, &y); while (1) { if ((x >= 1 && x <= row) && (y >= 1 && y <= col)) { if (board[x - 1][y - 1] == ' ') { board[x - 1][y - 1] = '*'; break; } else printf("该坐标被占用,请重新输入n"); } else printf(" "); } } //电脑下棋: void computer_move(char board[3][3], int row, int col) { int x = 0; int y = 0; printf("电脑下棋:n"); while (1) { x = rand() % row;//这是一个生成随机数的函数,模以row和col为了让该随机数在0-2之间 y = rand() % col;//以便于电脑下棋 if (board[x][y] == ' ')//防止电脑下重复的位置 { board[x][y] = '#'; break; } } } //判断是否为平局 static int if_full(char board[ROW][COL], int row, int col) { int i = 0, j = 0; for (i = 0; i < row; ++i) { 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][1]; } } //判断列 for (i = 0; i < col; ++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]; } //如果走到这,就是平局 //构造一个函数判断,如果返回1则为平局,此时棋盘时满的 if (if_full(board, ROW, COL) == 1) { return 'Q'; } //游戏未结束 return 'C'; } void game() { char ret = 0; //存放下棋的数据 char board[ROW][COL] = { 0 }; //初始化棋盘为空格 InitBoard(board, ROW, COL); //打印棋盘的函数 DisplayBored(board, ROW, COL); while (1)//玩家下一次,电脑下一次知道游戏结束,所以是个循环 { //玩家下棋 Player_move(board, ROW, COL); DisplayBored(board, ROW, COL);//打印 ret = is_win(board, ROW, COL); //游戏未结束返回C //玩家胜利返回* //电脑胜利返回# //平局返回Q if (ret != 'C') break; //电脑下棋 computer_move(board, ROW, COL); DisplayBored(board, ROW, COL);//打印棋盘 ret = is_win(board, ROW, COL); if (ret != 'C') break; } if (ret == '*') printf("恭喜你胜利了!n"); else if (ret == '#') printf("很遗憾输掉了对局n"); else printf("n平局n"); //结束时打印棋盘 DisplayBored(board, ROW, COL); } void menu() { printf("***********************n"); printf("*******1.play**********n"); printf("*******0.exit**********n"); printf("***********************n"); } void test() { srand((unsigned int)time(NULL)); int input = 0; do { menu(); printf("请选择:>>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏n"); break; default:printf("选择错误n"); break; } } while (input); } int main() { test(); return 0; }
执行结果如下:
如果对你有帮助,留下一个免费的关注吧!谢谢!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)