用c语言实现人机对战三子棋游戏的模拟,主要实现功能包括:
1.菜单界面——开始游戏及退出;
2.玩家、电脑按序下棋;
3.输赢判断。
二、代码实现及运行界面1.菜单
void menu() { printf("**********n"); printf("**1.开始**n"); printf("**0.退出**n"); printf("**********n"); } void game() { char ret = ' '; char board[ROW][COL]; //棋盘初始化 InitBoard(board, ROW, COL); //打印棋盘 Print(board, ROW, COL); while(1) { //玩家下棋 player(board, ROW, COL); ret = IsWin(board, ROW, COL); if (ret == '*') { printf("玩家获胜,本轮游戏结束!n"); break; } if (ret == 'O') { printf("平局,本轮游戏结束!n"); break; } //电脑下棋 computer(board, ROW, COL); ret = IsWin(board, ROW, COL); if (ret == '#') { printf("人机获胜,本轮游戏结束!n"); break; } if (ret == 'O') { printf("平局,本轮游戏结束!n"); break; } } } int main() { int choose = 0; do{ menu(); printf("请输入选择:"); scanf("%d", &choose); switch (choose) { case 1: printf("开始n"); game(); break; case 0: printf("退出n"); break; default: printf("输入错误,重新输入n"); break; } } while (choose); return 0; }
2.进入游戏界面
用户输入1后首先显示初始化的棋盘,之后根据提示输入坐标进行游戏
//初始化棋盘并打印 ROW COL经宏定义为3 void Print(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++) { printf(" %c ", board[i][j]); //if (i == row - 1 && j == col - 1) //break; 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(char board[ROW][COL], int row, int col) { int x, y; while (1) { printf("玩家下棋:n"); printf("玩家输入坐标:"); scanf("%d %d", &x, &y); if (x > 0 && y > 0 && x <= row && y <= col) { if (board[x - 1][y - 1] == ' ') { board[x - 1][y - 1] = '*'; Print(board, ROW, COL); break; } else { printf("该坐标已被占用,请重新输入!n"); } } else { printf("输入坐标超出范围,请重新输入!n"); } } } //电脑下棋 void computer(char board[ROW][COL], int row, int col) { printf("电脑下棋:n"); int x = 0, y = 0; while (1) { srand((unsigned int)time(NULL));//电脑采用随机数进行落子 x = rand() % ROW; y = rand() % COL; if (board[x][y] == ' ') { board[x][y] = '#'; Print(board, ROW, COL); break; } } }
3.输赢判断
每次落子根据下棋结果判断输赢或平局,棋盘不满则继续
//判断输赢 char IsWin(char board[ROW][COL], int row, int col) { int i = 0, j = 0; for (i = 0; i < row; i++) { if (board[i][0] == '*' && board[i][1] == '*' && board[i][2] == '*') return '*'; if (board[i][0] == '#' && board[i][1] == '#' && board[i][2] == '#') return '#'; } for (j = 0; j < col; j++) { if (board[0][j] == '*' && board[1][j] == '*' && board[2][j] == '*') return '*'; if (board[0][j] == '#' && board[1][j] == '#' && board[2][j] == '#') return '#'; } if ((board[0][0] == '*' && board[1][1] == '*' && board[2][2] == '*')|| (board[2][0] == '*' && board[1][1] == '*' && board[0][2] == '*')) return '*'; if ((board[0][0] == '#' && board[1][1] == '#' && board[2][2] == '#')|| (board[2][0] == '#' && board[1][1] == '#' && board[0][2] == '#')) return '#'; for (i = 0; i < row; i++)//判断是否有空位置 { for (j = 0; j < col; j++) { if (board[i][j] == ' ') return 'C'; } } return 'O';//棋盘满了但没有赢家 }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)