//test.c #define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" void menu() { printf("*******************************\n"); printf("*****1.play 0.exit****\n"); printf("*******************************\n"); } void game() //游戏程序主体 { //char arr[ROW][COL] = { 0 }; //显示雷信息的雷盘,可选择留下也可选择删除 char show[ROW][COL] = { 0 }; //向玩家展示的棋盘 memset(arr, '0', ROW*COL*sizeof(show[0][0])); //打印有雷的棋盘 memset(show, '*', ROW*COL*sizeof(show[0][0])); //将雷盘设置为 * ,隐藏雷的位置 int x = 0; int y = 0; int win = 0; srand((unsigned int)time(NULL)); //产生随机数 set_mine(arr); //埋雷操作 display_arr(arr, ROW, COL); //打印棋盘 printf("\n"); display_arr(show, ROW, COL); while (win<((ROW - 2)*(COL - 2) - MAX)) //排查剩余雷的数量 { printf("请输入要排查的坐标:"); scanf("%d %d", &x, &y); if ((x >= 1) && (x <= 9) && ((y >= 1) && (y <= 9))) { if (arr[x][y] == '1') { printf("恭喜你,被炸死了\n"); printf("\n"); display_chess(arr, ROW, COL); printf("\n"); return menu(); //炸死返回主菜单 } else { int count = get_set_mine(arr, x, y); show[x][y] = count + '0'; win++; display_chess(show, ROW, COL);
printf("\n"); } } else { printf("坐标输入有误,请重新输入;"); } } if (win == ((ROW - 2)*(COL - 2) - MAX)) { printf("恭喜你,排雷成功\n"); return menu(); } } void test() { int input = 0; menu(); do { printf("请选择:\n"); scanf("%d", &input); switch (input) { case 1: printf("请开始游戏\n"); game(); break; case 0: printf("退出游戏"); break; default: printf("选择错误,请重新输入:"); break; printf(" "); } } while (input); } int main() { test(); system("pause"); return 0; } //game.c #define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" void set_mine(char mine[ROW][COL]) //布雷 { int count = MAX; int i = 0; while (count > 0) { int x = rand() % 9 + 1; int y = rand() % 9 + 1; if (mine[x][y] != '1') { mine[x][y] = 1+'0'; count--; } } } void display_arr(char arr[ROW][COL], int row, int col) //打印边框 { int i = 0, j = 0; for (i = 0; i <= row-1; i++) { printf(" %d ", i); } printf("\n--------------------------------------------\n"); for (i = 1; i<row; i++) { printf("%2d |", i); for (j = 1; j<col; j++) { printf(" %c |", arr[i][j]); } printf("\n--------------------------------------------\n"); } } void display_chess(char arr[ROW][COL], int row, int col) //打印被炸死的位置 { int i = 0, j = 0; for (i = 0; i <= row - 1; i++) { printf(" %d ", i); } printf("\n--------------------------------------------\n"); for (i = 1; i < row; i++) { printf("%2d |", i); for (j = 1; j <col; j++) { printf(" %c |", arr[i][j]); } printf("\n--------------------------------------------\n"); } } void display(char show[ROW][COL], int row, int col)//打印雷盘 { int i = 0; int j = 0; for (i = 1; i < row-1; i++) { for (j = 1; j < col-1; j++) { printf("%c ", show[i][j]); } printf("\n"); } } int get_set_mine(char arr[ROW][COL], int x, int y)//统计周围雷数 { return (arr[x - 1][y - 1]+ arr[x - 1][y] + arr[x - 1][y + 1] + arr[x][y + 1] + arr[x + 1][y + 1] + arr[x + 1][y] + arr[x + 1][y + 1] + arr[x][y - 1])-8*'0'; } //game.h 头文件 #ifndef __GAME_H__ #define __GAME_H__ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <time.h> #define ROW 11 #define COL 11 #define MAX 80 //设置雷的数量 void set_mine(char mine[ROW][COL]); void display(char arr[ROW][COL], int row, int col);//打印雷盘 void display_arr(char arr[ROW][COL], int row, int col); void display_chess(char arr[ROW][COL], int row, int col); int get_set_mine(char arr[ROW][COL], int row, int col); #endif //__GAME_H__