91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言實現簡易掃雷游戲的方法

發布時間:2021-04-17 15:03:06 來源:億速云 閱讀:109 作者:小新 欄目:編程語言

這篇文章主要介紹了C語言實現簡易掃雷游戲的方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

具體內容如下

掃雷

楔子:

掃雷游戲是我們小時候無聊時消磨時間的小玩意,雖然更新到Win10系統后經典的掃雷游戲不再了,不過它現在仍以一種抓蟲子的游戲形式存在于Windows這個系統平臺,不禁感慨游戲還是那個游戲,不過人已經不是那些人了啊.

其實掃雷游戲的實現也主要運用了數組和函數封裝與調用的知識,具體請看程序.

以下為程序主體:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

//定義方格大小
#define MAX_ROW 10
#define MAX_COL 10
//定義方格雷陣中的地雷數
#define DEFAULT_MINE_COUNT 10

//制作圖形化游戲界面函數(菜單)
int Menu() {
 printf("=============================\n");
 printf("||    <掃雷游戲>    ||\n");
 printf("|| 1.開始游戲 0.退出游戲 ||\n");
 printf("=============================\n");
 int choice = 0;
 while (1) {
 scanf("%d", &choice);
 if (choice != 0 && choice != 1) {
  printf("您的輸入有誤,請重新輸入!\n");
  continue;
 }
 return choice;
 }
}

//清空方格函數 這里地雷表示為 * ,安全無地雷表示為 0
void Init(char show_map[MAX_ROW + 2][MAX_COL + 2],
 char mine_map[MAX_ROW + 2][MAX_COL + 2]) {
 for (int row = 0; row < MAX_ROW + 2; ++row) {
 for (int col = 0; col < MAX_COL + 2; ++col) {
  show_map[row][col] = '*';
 }
 }
 for (int row = 0; row < MAX_ROW + 2; ++row) {
 for (int col = 0; col < MAX_COL + 2; ++col) {
  mine_map[row][col] = '0';
 }
 }
 //能夠隨機的構造出 N 個數,放在雷陣中
 int mine_count = DEFAULT_MINE_COUNT;
 while (mine_count > 0) {
 //隨機布置地雷
 int row = rand() % MAX_ROW + 1;
 int col = rand() % MAX_COL + 1;
 if (mine_map[row][col] == '1') {
  continue;
 }
 mine_map[row][col] = '1';
 --mine_count;
 }
}

void DisplayMap(char map[MAX_ROW + 2][MAX_COL + 2]) {
 printf("  ");
 //打印坐標橫行
 for (int row = 1; row <= MAX_ROW; ++row) {
 printf("%d ", row);
 }
 printf("\n");
 //打印上邊框
 for (int row = 1; row <= MAX_ROW; ++row) {
 printf("---");
 }
 printf("\n");
 for (int row = 1; row <= MAX_ROW; ++row) {
 printf("%02d|", row);
 for (int col = 1; col <= MAX_COL; ++col) {
  printf("%c ", map[row][col]);
 }
 printf("\n");

 }
 printf("\n");
 printf("\n");
 printf("\n");

}

void UpdateShowMap(char show_map[MAX_ROW + 2][MAX_COL + 2],
 char mine_map[MAX_ROW + 2][MAX_COL + 2], int row, int col) {
 //這個函數要根據mine_map來計算row,col位置上周圍是有幾個地雷
 //把結果寫到對應的show_map位置上
 //===========此處這8個位置對應的下標不會越界======
 //===========因為引入了一圈邊框===================
 //row和col取值是[1,MAX_ROW]
 //數組下標取值為[0,MAX_ROW + 1]

 int mine_count = 0;
 for (int i = row - 1; i <= row + 1; ++i) {
 for (int j = col - 1; j <= col + 1; ++j) {
  mine_count =
  mine_map[i - 1][j - 1] - '0' +
  mine_map[i - 1][j] - '0' +
  mine_map[i - 1][j + 1] - '0' +
  mine_map[i][j - 1] - '0' +
  mine_map[i][j + 1] - '0' +
  mine_map[i + 1][j - 1] - '0' +
  mine_map[i + 1][j] - '0' +
  mine_map[i + 1][j + 1] - '0';

  if (mine_map[i][j] == '1') {
  show_map[i][j] = '*';
  }
  else {
  show_map[i][j] = '0' + mine_count;
  }
 }
 }
}


//游戲主邏輯,入口
void Game() {
 //具體的一局掃雷游戲
 //兩個二維數組來表示地圖
 //第一個數組表示給玩家展示的地圖
 char show_map[MAX_ROW + 2][MAX_COL + 2];
 //此處加上一圈邊框(防止數組下標越界)
 //對于show_map:里面元素有2種情況:
 //1.這個位置沒有被掀開,用 * 表示
 //2.這個位置已經被掀開了,用一個具體的數字來表示(例如字符'2'來表示)
 char mine_map[MAX_ROW + 2][MAX_COL + 2];
 //第二個數組表示雷陣
 //對于mine_map,里面的元素以下情況:
 //1.這個位置是地雷,使用字符'1'表示
 //2.這個位置不是地雷,使用字符'0'表示
 int blank_count = 0;//空格數 不包含地雷,被掀開的格子數
 //1.對這兩個數組進行初始化
 //2.打印初始地圖
 Init(show_map, mine_map);
 DisplayMap(show_map);
 while (1) {
 //3.讓玩家輸入坐標,判定是否合法
 int row, col;
 printf("請輸入坐標:\n");
 scanf("%d %d", &row, &col);
 if (row <= 0 || row > MAX_ROW
  || col <= 0 || col > MAX_COL) {
  printf("您的輸入不合法,重新輸入!\n");
  continue;
 }
 //4.判斷玩家是否踩雷,如果是,游戲結束
 if (mine_map[row][col] == '1') {
  printf("游戲結束!\n");
  printf("掃雷失敗!\n");
  DisplayMap(mine_map);
  break;
 }
 //5,如果沒踩雷,判定是否掀開了全部格子(玩家勝利)
 //6.就統計該位置周圍有幾個雷,并把這個數字更新到地圖上
 UpdateShowMap(show_map, mine_map, row, col);
 DisplayMap(show_map);
 int blank_cnt = 0;
 for (row = 1; row <= MAX_ROW; ++row)
 {
  for (col = 1; col <= MAX_COL; ++col)
  {
  if (show_map[row][col] != '*')
  {
   ++blank_cnt;
   if (blank_cnt == MAX_ROW * MAX_COL - DEFAULT_MINE_COUNT)
   {
   DisplayMap(mine_map);
   printf("掃雷成功,游戲結束\n");
   break;
   }
  }
  }
 }
 printf("\n");
 }
}

void Start() {
 //這是游戲入口函數,游戲菜單
 while (1) {
 int choice = Menu();
 if (choice == 0) {
  break;
 }
 Game();
 }
}


//主函數
int main() {
 Start();//由開始函數引導游戲開始
 system("pause");
 return 0;
}

需要注意的是:

1.大佬可以通過更改程序首部的宏定義來改變方格大小,擴充界面大小以提高難度.

2.整個游戲邏輯必須明晰:

打印方格
隨機布置雷陣
玩家輸入掀開方格坐標
判斷是否踩雷(若是,游戲結束.否則顯示出周圍八個數的地雷數)
若未踩雷判斷是否除了地雷外掀開了所有方格(若是,掃雷成功.否則繼續游戲)
更新表示地圖
循環步驟,返回至用戶輸入環節,繼續游戲,直至游戲截止.

感謝你能夠認真閱讀完這篇文章,希望小編分享的“C語言實現簡易掃雷游戲的方法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

获嘉县| 化隆| 海林市| 怀来县| 芮城县| 宣化县| 定南县| 麻城市| 沂水县| 和龙市| 海兴县| 澄城县| 浠水县| 阿坝| 东阿县| 房产| 凤凰县| 保定市| 固阳县| 阳新县| 武功县| 师宗县| 油尖旺区| 东丰县| 宿迁市| 大城县| 宣城市| 陈巴尔虎旗| 昌乐县| 会泽县| 青浦区| 诸暨市| 甘孜| 五指山市| 东源县| 南昌县| 治多县| 灵山县| 交城县| 福安市| 彩票|