void test(void)
{int input = 0;do{menu();printf("請選擇: >");scanf("%d", &input);switch (input){menu();case 1:printf("掃雷\n");game();break;case 2:printf("退出游戲\n");break;default:printf("輸入錯誤,請重新輸入");break;}} while (input);//0退出游戲}
int main(void)
{test();return 0;
}
?1、主函數及游戲開始結束的界面設計
void menu()
{printf("*************************\n");printf("******* 1:開始游戲 *******\n");printf("******* 0:退出游戲 *******\n");printf("*************************\n");}
2、菜單函數
void game()
{char mine[ROWS][COLS] = { 0 };//存雷char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息//初始化棋盤 盡量設計成一樣的InitBoard(mine,ROWS, COLS,'0');InitBoard(show,ROWS, COLS,'*');//調試時打印該表,玩的時候可以不打印//打印棋盤DisplayBoard(show, ROW, COL);//布置雷SetMine(mine, ROW, COL);DisplayBoard(mine, ROW, COL);//棋盤雷信息//排查雷FindMine(mine, show, ROW, COL);}
3、游戲模塊
? ? ? ? 頭文件參數封裝
#define ROW 9 //棋盤顯示區域
#define COL 9#define ROWS ROW + 2//棋盤寬度
#define COLS COL + 2#define EASY_COUNT 20//雷的數量void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);void DisplayBoard(char board[ROWS][COLS], int row, int col);//實際顯示的棋盤區域void SetMine(char mine[ROWS][COLS],int row,int col);
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS],int row,int col);
????????初始化棋盤 ? 盡量設計成一樣的
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{int i = 0;for (i = 0;i < rows;i++){int j = 0;for (j = 0;j < cols;j++){board[i][j] = set;}}
}
????????打印棋盤
void DisplayBoard(char board[ROWS][COLS], int row, int col)//實際顯示的棋盤區域
{int i = 0;for (i = 0;i <= col;i++){printf("%d ", i);//打印行列}printf("\n");for (i = 1;i <= row;i++){printf("%d ", i);int j = 0;for (j = 1;j <= col;j++){printf("%c ", board[i][j]);}printf("\n");}}
????????布置雷
//布置雷是在棋盤上隨機的找10個坐標
//x范圍1~9
//y范圍1~9
void SetMine(char mine[ROWS][COLS], int row, int col)
{ int count = EASY_COUNT;//80個雷int x = 0;int y = 0;srand((unsigned int)time(NULL));//隨機數清空while (count){x = rand() % row + 1;//防止出界y = rand() % col + 1;if (mine[x][y] != '1'){mine[x][y] = '1';//判斷是否有雷count--;}}
}
???????
?排查雷
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{int x = 0;int y = 0;int win = 1;while (1){printf("請輸入要排查的坐標:");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col)//是雷{if (mine[x][y] == '1'){printf("很遺憾,你踩雷了,游戲結束\n");DisplayBoard(mine, ROW, COL);break;}else{int count = GetMineCount(mine, x, y);show[x][y] = count + '0';DisplayBoard(show, ROW, COL);}}else{printf("輸入的坐標有誤x(1~9),y(1~9) 請重新輸入");}//游戲勝利if (win == row * col - EASY_COUNT){printf("恭喜你,排雷成功\n");break;}}
}
統計周圍有幾個雷
目錄
?1、主函數及游戲開始結束的界面設計
2、菜單函數
3、游戲模塊
????????初始化棋盤 ? 盡量設計成一樣的
????????打印棋盤
????????布置雷
???????
?排查雷
法2 統計周圍有幾個雷
int GetMineCount(char mine[ROWS][COLS], char x, char y)
{int i = 0;int count = 0;for(i = -1;i <= 1;i++){ int j = 0;for (j = -1;j <= 1;j++){count += mine[x + i][y + j] - '0';}}return count;
}