一、項目概述
1.項目背景
掃雷是一款經典的益智游戲,由于它簡單而富有挑戰性的玩法深受人們喜愛。在 C 語言學習過程中,開發掃雷游戲是一個非常合適的實踐項目,它能夠綜合運用 C 語言的多種基礎知識,如數組、函數、循環、條件判斷等,有助于提升編程能力和邏輯思維能力。
2.項目目標
本次項目旨在使用 C 語言開發一個控制臺版本的掃雷游戲,實現以下基本功能:
- 初始化游戲棋盤,包括雷區的布置和非雷區域周圍雷數的計算。
- 玩家通過輸入坐標來翻開棋盤格子,若翻開雷則游戲失敗,若翻開所有非雷格子則游戲勝利。
- 提供標記雷的功能,方便玩家識別可能有雷的區域。
- 具備良好的用戶交互界面,顯示棋盤狀態和游戲提示信息。
二.游戲設計?
?1.界面設置
由于進入游戲之后首先需要顯示選擇是否進行游戲的界面,因此需要利用do...while循環至少執行一次的特點來顯示界面,并根據用戶的選擇來決定是否進入游戲,對主函數的編碼如下所示:
int main()
{int input = 0;do{menu();printf("請選擇:>");scanf("%d",&input);switch (input){case 1:printf("開始游戲\n");break;case 0:printf("退出游戲\n");break;default:printf("選擇錯誤請重新選擇\n");break;}} while (input);return 0;
}
通過switch語句,根據輸入的值來選擇是否進入游戲,若輸入0,則退出游戲;若輸入1,則開始游戲;若輸入其他數字,提醒選擇錯誤請重新輸入。
菜單函數編輯如下:
void menu()
{printf("******************************\n");printf("******** 1.play ********\n");printf("******** 0.exit ********\n");printf("******************************\n");
}
2.游戲環節設置
當用戶選擇開始游戲后,需要進入游戲,因此需要創建一個函數來實現游戲的過程。由于需要同時布置雷和排查雷,因此需要創建兩個二維數組來實現對雷的布置與排查。
(1)初始化棋盤
void Initboard(char board[ROWS][COLS], int row, int col, char ret)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){board[i][j] = ret;}}
}
將布置雷的數組的所有元素初始化0,將排查雷的數組的所有元素初始化為*,因此需要一個字符變量來傳遞參數。
(2)打印棋盤
void Displayboard(char board[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;printf("-------------------掃雷-----------------------\n");for (j = 0; j <= col; j++){printf("%d ",j);}printf("\n");for (i = 1; i <= row; i++){printf("%d ",i);for (j = 1; j <= col; j++){printf("%c ",board[i][j]);}printf("\n");}printf("-------------------掃雷-----------------------\n");
}
為了更好的識別數組中的哪一個元素,增加了打印行和列的部分
(3)設置雷
void Setmine(char board[ROWS][COLS], int row, int col)
{int count = EASY_COUNT;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (board[x][y] == '0'){board[x][y] = '1';count--;}}
}
通過調用srand函數生成隨機數的生成起點,然后通過取模運算即可隨機設置雷的位置。
此時游戲函數的代碼如下:
void game()
{char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };Initboard(mine, ROWS, COLS,'0');Setmine(mine, ROW, COL);//Displayboard(mine, ROW, COL);//為了展示設置雷和初始化后的結果,正式游戲不用打印Initboard(show, ROWS, COLS,'*');Displayboard(show, ROW, COL);
}
?代碼整體運行結果如下:
?可以看到,已經隨機設置了十個雷,而且排查雷的數組所有元素被初始化為*。
欲知后事如何,且看下篇文章!!!!!