目录
一、游戏介绍
二、游戏实现
一、游戏介绍
在3x3网格中与电脑进行下棋。玩家先下电脑再下,首先完成三子一线的为游戏赢家:
二、游戏实现
- 游戏选择:
int main() { int input = 0; while (1) { meanu(); printf("请选择:>"); scanf("%d", &input); if (input == 1) { printf("开始游戏;n"); //game(); break; } else if(input == 0) { printf("退出游戏n"); break; } else { printf("选择错误,请重新选择n"); } } }游戏菜单:
void meanu() { printf("***************************n"); printf("******** 三子棋 ********n"); printf("***** 1.开始游戏 *******n"); printf("***** 0.退出游戏 *******n"); printf("***************************n"); }游戏初始化:
void init_borad(char arr[ROW][COL],int row, int col) { int i = 0; int j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { arr[i][j] = ' '; } } }
display_borad(char arr[ROW][COL], int row, int col) { int i = 0; int j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { printf(" %c ",arr[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 arr[ROW][COL], int row, int col) { while (1) { int x = 0; int y = 0; printf("请输入你下棋的坐标:>"); scanf("%d,%d", &x, &y); if ((x >= 1 && x <= 3) && (y >= 1 && y <= 3)) { if (arr[x - 1][y - 1] == ' ') { arr[x - 1][y - 1] = '*'; break; } else { printf("该坐标已被占用,请重新输入n"); } } else { printf("输入不合法,请重新输入n"); } } }电脑进行游戏:
void computer_move(char arr[ROW][COL], int row, int col) { printf("电脑下;>n"); int x = rand() % 3; int y = rand() % 3; while (1) { if (arr[x - 1][y - 1] == ' ') { arr[x - 1][y - 1] = '#'; break; } } }游戏输赢判断:
int is_full(char arr[ROW][COL], int row, int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (arr[i][j] == ' ') { return 0; } } } return 1; } char is_win(char arr[ROW][COL], int row, int col) { for (int i = 0; i < row; i++) { if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ') { return arr[i][0]; } } for (int j = 0; j < col; j++) { if (arr[0][j] == arr[1][j] && arr[1][j] == arr[2][j] && arr[0][j] != ' ') { return arr[0][j]; } } if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ') { return arr[1][1]; } if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ') { return arr[1][1]; } if (is_full(arr,ROW,COL) == 1) { return 'Q'; } return 'C'; }
7.主函数
#define _CRT_SECURE_NO_WARNINGS #include"game.h" void meanu() { printf("***************************n"); printf("******** 三子棋 ********n"); printf("***** 1.开始游戏 *******n"); printf("***** 0.退出游戏 *******n"); printf("***************************n"); } void game() { char ret = 0; //初始化棋盘 char arr[ROW][COL] = { 0 }; init_borad(arr,ROW, COL); //打印棋盘 display_borad(arr, ROW, COL); while (1) { //玩家下棋 player_move(arr, ROW, COL); display_borad(arr, ROW, COL); ret = is_win(arr, ROW, COL); if (ret != 'C') { break; } //电脑下棋 computer_move(arr, ROW, COL); display_borad(arr, ROW, COL); //判断结果(以'C'表示继续,以'#'表示电脑赢,以'*'表示玩家赢,以'Q'表示和局) ret = is_win(arr, ROW, COL); if (ret != 'C') { break; } } if (ret == '*') { printf("玩家赢n"); } else if (ret == '#') { printf("电脑赢n"); } else { printf("平局n"); } } int main() { srand((unsigned int)time(NULL)); int input = 0; while (1) { meanu(); printf("请选择:>"); scanf("%d", &input); if (input == 1) { printf("开始游戏;n"); game(); break; } else if(input == 0) { printf("退出游戏n"); break; } else { printf("选择错误,请重新选择n"); } } return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)