本文是用C语言写的N子棋小游戏
头文件:
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #define H 3//行 #define L 3//列 void blank_borad(char board[H][L], int h, int l);//初始化棋盘 void print(char board[H][L], int h, int l);//打印棋局 void play_game(char board[H][L], int h, int l);//玩家下棋 void computer_game(char board[H][L], int h, int l);//电脑下棋 char is_win(char board[H][L], int h, int l);//判断输赢
函数功能的实现:
#include"game.h" char is_win(char board[H][L], int h, int l)//判断输赢 { /* | | ---|---|--- | | ---|---|--- | | */ int jade = 0; int i = 0; int j = 0; //行 -> win for (j = 0;j < h;j++) { jade = 0; for (i = 1;i < l;i++) { if (board[j][0] == board[j][i] && board[j][0] != ' ') { jade++; } } if (jade == l - 1) { return board[j][0]; } } //列 -> win for (i = 0;i < l;i++) { jade = 0; for (j = 1;j < h;j++) { if (board[0][i] == board[j][i] && board[0][i] != ' ') { jade++; } } if (jade == h - 1) { return board[0][i]; } } //左对角线 jade = 0; for (i=1,j=1;(i<h)&&(j<l);i++,j++) { if ((board[0][0] == board[i][j]) && (board[0][0] != ' ')) { jade++; } } if (jade == h-1 || jade==l-1) { return board[0][0]; } //右对角线 jade = 0; for (i=1,j=l-2;(i < h) && (j>=0);i++,j--) { if ((board[0][l-1] == board[i][j]) && (board[0][l-1] != ' ')) { jade++; } } if (jade == h-1 || jade == l-1) { return board[0][l-1]; } //平局 jade = 0; for (j = 0;j < h;j++) { for (i = 0;i < l;i++) { if (board[j][i] != ' ') { jade++; } } } if (jade==l*h) { return 'Z'; } } void computer_game(char board[H][L], int h, int l)//电脑下棋 { int i = 0; int j = 0; printf("电脑下棋:\n"); while (1) { i = rand() % h; j = rand() % l; if (board[i][j] == ' ') { board[i][j] = '#'; break; } } } void play_game(char board[H][L], int h, int l)//玩家下棋 { int i = 0; int j = 0; printf("玩家下棋,请输入选择下的棋的坐标:"); while (1) { scanf("%d %d", &i, &j); //玩家不知道下标从0开始 i -= 1; j -= 1; if (board[i][j] == ' ') { board[i][j] = '*'; break; } else { printf("输入的该坐标非法,请重新输入:"); } } } void print(char board[H][L], int h, int l)//打印棋局 { /* | | ---|---|--- | | ---|---|--- | | */ int i = 0; int j = 0; for (j = 0;j < h;j++) { for (i = 0;i < l-1;i++) { printf(" %c |", board[j][i]); if (i==l-2) { printf(" %c \n", board[j][i + 1]); } } if (j < h-1) { for (i = 0;i < l - 1;i++) { printf("---|"); if (i == l - 2) { printf("---\n"); } } } } } void blank_borad(char board[H][L], int h, int l)//初始化棋盘 { int i = 0; int j = 0; for (i = 0;i < h;i++) { for (j = 0;j < l;j++) { board[i][j] = ' '; } } }
主函数代码:
#include"game.h" void menu1();//选择界面 void test();//选择函数 void Game();//三子棋游戏运行函数 void menu2();//再次选择玩游戏函数 void Game() { srand((unsigned int)time(NULL)); system("cls"); printf("\t\t\t欢迎来到三子棋游戏!!!\n\n\n"); char win; char board[H][L]; //初始化棋盘 blank_borad(board, H, L); //打印空白棋局 print(board, H, L); while (1) { //玩家下棋 play_game(board, H, L); //打印棋局 print(board, H, L); //判断输赢 win = is_win(board, H, L); if (win == '*') { printf("玩家胜利"); break; } else if (win == '#') { printf("电脑胜利"); break; } else if (win == 'Z') { printf("平局"); break; } //电脑下棋 computer_game(board, H, L); //打印棋局 print(board, H, L); //判断输赢 win = is_win(board, H, L); if (win == '*') { printf("玩家胜利"); break; } else if (win == '#') { printf("电脑胜利"); break; } else if (win == 'Z') { printf("平局"); break; } } } void test()//选择函数 { int choice = 0; do { scanf("%d", &choice); switch (choice) { case 1: Game();//三子棋游戏运行函数 break; case 2: printf("已退出游戏....\n"); break; default: printf("输入错误,请重新选择:"); break; } if (choice==1) { menu2();//再次选择玩游戏函数 } } while (choice != 2); } void menu2()//再次选择玩游戏函数 { printf("\t您是否再玩一轮三子棋游戏?\n"); printf("\t 1.play 2.exit\n"); } void menu1()//选择界面 { printf("\t***********************************\n"); printf("\t********欢迎来到三子棋游戏*********\n"); printf("\t***** 请选择: 1.play 2.exit ******\n"); printf("\t***********************************\n"); } int main() { menu1();//选择界面 test();//选择函数 return 0; }
这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言哦。