最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)控制臺掃雷小游戲

 更新時間:2020年11月06日 08:48:40   作者:一入猿門深似海  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)控制臺掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

C語言實現(xiàn)控制臺“掃雷”小游戲

根據(jù)以往的游戲經(jīng)驗,我們能首先可以確定掃雷游戲勝利的規(guī)則是:翻開所有不是雷的區(qū)域才能算是勝利。

接下來我們需要確定整個程序的設(shè)計思路:

1.首先,我們定義兩個9*9的二維數(shù)還是未翻開的狀態(tài)組。第一個數(shù)組用來表示雷區(qū)地圖的展開情況,即每個素組元素的位置的狀態(tài)是處于展開狀態(tài)還是未展開狀態(tài),我們命名為showMap()。第二個數(shù)組我們用來表示地雷的分布情況,素組中的每個元素位置都被標(biāo)記為是否為地雷,我們命名為minMap()。
2.初始化兩個地圖,并將地圖打印出來。
3.玩家通過輸入二維數(shù)組的坐標(biāo)進行位置輸入,翻開地圖位置。
4.判斷玩家輸入的位置是否合法。
5.判斷玩家輸入的位置是否有地雷,如果有地雷則直接宣布游戲結(jié)束;若果沒有地雷則繼續(xù)進行游戲。
6.如果繼續(xù)游戲,則玩家輸入的位置處會顯示附近地雷的個數(shù)。

第一步,此處通過構(gòu)造menu()函數(shù)搭建一個簡單的交互菜單和玩家交互,用來判斷是否開始進行一局游戲。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//宏定義
#define MAX_ROW 9
#define MAX_COL 9
#define DEFAULT_MINE_COUNT 10

int menu() {
 printf("======================\n");
 printf(" 1. 開始游戲\n");
 printf(" 0. 結(jié)束游戲\n");
 printf("======================\n");
 printf(" 請輸入您的選擇: ");
 int choice = 0;
 scanf("%d", &choice);
 return choice;
}

int main() {
 srand((unsigned int)time(0));
 while (1) {
 int choice = menu();
 if (choice == 1) {
 game();//此處調(diào)用了game()函數(shù).
 }
 else if (choice == 0) {
 printf("Goodbye!\n");
 break;
 }
 else {
 printf("您的輸入有誤!\n");
 }
 }
 system("pause");
 return 0;
}

第二步,對第一步中調(diào)用的game()函數(shù)進行構(gòu)造。game()函數(shù)為核心功能函數(shù),其主要任務(wù)是完成基本流程。

1.構(gòu)建init()函數(shù),對兩個二維數(shù)組進行初始化操作。初始化 showMap, 將數(shù)組所有元素全都設(shè)為 * 。初始化 mineMap, 先全設(shè)為 ‘0', 然后隨機生成 N 個 ‘1' ,此處的'1'就代表地雷, N 的值就是 DEFAULT_MINE_COUNT,也就是地雷的數(shù)量。

void init(char showMap[MAX_ROW][MAX_COL],
 char mineMap[MAX_ROW][MAX_COL]) {
 for (int row = 0; row < MAX_ROW; row++) {
 for (int col = 0; col < MAX_COL; col++) {
 showMap[row][col] = '*';
 }
 }
 for (int row = 0; row < MAX_ROW; row++) {
 for (int col = 0; col < MAX_COL; col++) {
 mineMap[row][col] = '0';
 }
 }
 int n = DEFAULT_MINE_COUNT;
 while (n > 0) {
 // 生成雷的隨機位置. 
 int row = rand() % MAX_ROW;
 int col = rand() % MAX_COL;
 if (mineMap[row][col] == '1') {
 // 如果當(dāng)前位置已經(jīng)有雷了, 就直接進入下次循環(huán), 重新
 // 產(chǎn)生隨機位置. 
 continue;
 }
 mineMap[row][col] = '1';
 n--;
 }
}

2.構(gòu)建printMap()函數(shù),該函數(shù)負責(zé)打印顯示地圖,需要注意的是,大部分情況下打印的都是 showMap, 但是在 GameOver 的時候, 就需要打印 mineMap。

void printMap(char theMap[MAX_ROW][MAX_COL]) {
 // 先打印出第一行, 第一行就是包含所有的列號。
 // 然后在打印下面的每一行的時候再打印行號。
 printf(" |");
 for (int col = 0; col < MAX_COL; col++) {
 printf("%d ", col);
 }
 printf("\n");
 printf("--+------------------\n");
 for (int row = 0; row < MAX_ROW; row++) {
 printf(" %d|", row);
 for (int col = 0; col < MAX_COL; col++) {
 printf("%c ", theMap[row][col]);
 }
 printf("\n");
 }
}

3.構(gòu)建updateShowMap()函數(shù),用于根據(jù)當(dāng)前 輸入的(row, col) 的位置, 計算出當(dāng)前位置周圍有幾個雷, 并且更新顯示到 showMap 中。

void updateShowMap(char showMap[MAX_ROW][MAX_COL],
 char mineMap[MAX_ROW][MAX_COL], int row, int col) {
 int count = 0;
 for (int r = row - 1; r <= row + 1; r++) {
 for (int c = col - 1; c <= col + 1; c++) {
 if (r < 0 || r >= MAX_ROW
 || c < 0 || c >= MAX_COL) {
 // 如果(row, col) 下標(biāo)越界, 就直接跳過。
 continue;
 }
 if (mineMap[r][c] == '1') {
 count++;
 }
 }
 }
 // 此時 count 里面就已經(jīng)存好了 (row, col )周圍八個格子里的雷的個數(shù)。
 // 把這個結(jié)果寫到 showMap 中即可。
 // 需要把數(shù)字 count 轉(zhuǎn)成對應(yīng)的字符,例如: count 為 2, 就需要轉(zhuǎn)成 '2' (ASCII 50)
 showMap[row][col] = count + '0';
}

最后,我們整合以下功能函數(shù)就得到了我們的game()函數(shù)。

void game() {
 // 1. 創(chuàng)建地圖并初始化。(兩個地圖)。
 char showMap[MAX_ROW][MAX_COL] = { 0 };
 char mineMap[MAX_ROW][MAX_COL] = { 0 };
 init(showMap, mineMap);
 int openedBlockCount = 0;
 while (1) {
 printMap(mineMap);
 printf("=================================\n");
 printMap(showMap);
 // 2. 程序讀取玩家輸入的要翻開位置的坐標(biāo), 并校驗。
 int row = 0;
 int col = 0;
 printf("請輸入要翻開的坐標(biāo)(row col): ");
 scanf("%d %d", &row, &col);
 if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) {
 printf("您輸入的坐標(biāo)有誤!\n");
 continue;
 }
 if (showMap[row][col] != '*') {
 printf("當(dāng)前位置已經(jīng)翻開了!\n");
 continue;
 }
 // 3. 判定該位置的坐標(biāo)是否是地雷. 如果是地雷, 直接 GameOver。
 if (mineMap[row][col] == '1') {
 printf("GameOver!\n");
 // 游戲結(jié)束的時候最好再打印一遍地雷的地圖, 讓玩家死的明白。
 printMap(mineMap);
 break;
 }
 // 4. 如果不是地雷, 統(tǒng)計當(dāng)前位置周圍雷的個數(shù), 并顯示到地圖上。 
 updateShowMap(showMap, mineMap, row, col);
 // 5. 判定游戲是否勝利,核心邏輯應(yīng)該是判斷當(dāng)前是不是把所有不是雷的位置都翻開了
 //此處可以記錄翻開的格子的個數(shù)。
 openedBlockCount++;
 if (openedBlockCount == MAX_ROW * MAX_COL - DEFAULT_MINE_COUNT) {
 printf("游戲勝利!\n");
 printMap(mineMap);
 break;
 }
 }
}

運行截圖:

1.游戲啟動:

2.輸入坐標(biāo)非法提示:

3.輸入坐標(biāo)位置已翻開。

4.游戲結(jié)束。

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于C++實現(xiàn)擲雙骰游戲的示例代碼

    基于C++實現(xiàn)擲雙骰游戲的示例代碼

    在最流行的博彩游戲中有一種名為“擲雙骰”(craps)的骰子游戲,這種游戲在世界各地的娛樂場所和大街小巷非常受歡迎。本文將用C++語言實現(xiàn)這一游戲,需要的可以參考一下
    2022-03-03
  • C語言PlaySound函數(shù)使用方法

    C語言PlaySound函數(shù)使用方法

    這篇文章介紹了C語言PlaySound函數(shù)的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • OpenGL繪制三次Bezier曲線

    OpenGL繪制三次Bezier曲線

    這篇文章主要為大家詳細介紹了OpenGL繪制三次Bezier曲線,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C語言實現(xiàn)航班訂票系統(tǒng)

    C語言實現(xiàn)航班訂票系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)航班訂票系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++?Qt開發(fā)之使用QNetworkAccessManager實現(xiàn)Web網(wǎng)頁訪問

    C++?Qt開發(fā)之使用QNetworkAccessManager實現(xiàn)Web網(wǎng)頁訪問

    Qt?是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應(yīng)用程序,本文主要介紹了如何運用QNetworkAccessManager組件實現(xiàn)Web網(wǎng)頁訪問,需要的可以參考下
    2024-03-03
  • C++實現(xiàn)單鏈表的構(gòu)造

    C++實現(xiàn)單鏈表的構(gòu)造

    這篇文章主要為大家詳細介紹了C++實現(xiàn)單鏈表的構(gòu)造,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 基于Matlab制作一個不良圖片檢測系統(tǒng)

    基于Matlab制作一個不良圖片檢測系統(tǒng)

    這篇文章主要為大家詳細介紹了如何基于Matlab制作一個不良圖片檢測系統(tǒng),文中的示例代碼講解詳細,感興趣的可以跟隨小編一起了解一下
    2022-07-07
  • C語言中對文件最基本的讀取和寫入函數(shù)

    C語言中對文件最基本的讀取和寫入函數(shù)

    這篇文章主要介紹了C語言中對文件最基本的讀取和寫入函數(shù),是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • C語言實現(xiàn)簡單的控制臺三子棋游戲

    C語言實現(xiàn)簡單的控制臺三子棋游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單的控制臺三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++實現(xiàn)棧與分析棧的知識點

    C++實現(xiàn)棧與分析棧的知識點

    這篇文章主要介紹了C++實現(xiàn)棧與分析棧的知識點,棧(stack)是計算機中常用的一種線性數(shù)據(jù)結(jié)構(gòu),經(jīng)常有資料使用“操作受限”來形容棧,因為它的壓入棧和彈出棧操作只能在棧頂進行,下文更多相關(guān)資料,需要的小伙伴可以參考一下
    2022-03-03

最新評論

五大连池市| 迭部县| 双城市| 龙海市| 宁安市| 潜山县| 龙里县| 秦安县| 宁夏| 彩票| 铁力市| 精河县| 南投市| 雷州市| 修文县| 金坛市| 米脂县| 旬阳县| 台州市| 内江市| 辽中县| 汽车| 日喀则市| 湘乡市| 隆林| 洱源县| 当涂县| 西畴县| 绥江县| 老河口市| 嘉兴市| 襄城县| 镇康县| 吉木萨尔县| 西和县| 随州市| 罗甸县| 吉木乃县| 邛崃市| 昭平县| 曲周县|