C 版本掃雷

2021-10-01 10:22:34 字數 3180 閱讀 3609

閒來無事,花了點時間寫了乙個簡單版本的掃雷,廢話不多數,開始今天的主題!!!

掃雷簡單版玩法(控制台未加雙緩衝):進入掃雷介面後,按下空格,游標所在位置處會經行判斷,若是雷,則遊戲over,若是空白區域則展開地圖,若是帶有數字標誌的則僅展示改地圖塊,直至剩下雷區

看一下效果

難點:

1.如何展示

2.如何初始化地圖塊(根據難度選擇):雷位置安放以及周圍地圖塊的數字大小設定

3.如何展開空白區域,即擴散

下面一步步來放**

首先先了解一下本次使用的遊戲框架

void main()

else if (status == 1) //難度選擇場景

else if (status == 2) //遊戲執行場景

}else if (status == 3) //win介面

else if (status == 4) //failed介面

else if (status == 5) //結束介面

}system("pause");

}

一、如何展示

這裡我們會用到乙個展示地圖displaymap和乙個遊戲地圖map,展示的過程其實就是逐步將map的內容展示到介面上

看一下我們的相關全域性變數

int mapw = 0;

int maph = 0;

int maps = 0;

//0空白;

//1代表該位置附近有1顆雷,最多有8顆

//9代表該位置有雷

//-9代表該位置的雷被排除了(這裡我沒擴充套件了,可自行選擇)

char* map; //地圖動態陣列

char* displaymap;//螢幕展示出來的地圖

int* thunderindex; //雷位置索引動態陣列

int difficult = 0;

bool isrun = true;

int thundernum = 0; //雷數量

//game游標

int cursonx = 0;

int cursony = 0;

char pic[3] = ; //展示的字元

//遊戲狀態 0:開始場景 1:難度選擇場景 2:遊戲執行場景 3:勝利場景 4:失敗場景 5:遊戲結束場景

int status = 0;

二、初始化遊戲資料

主要是根據遊戲選擇難度初始化遊戲的相關資料

void gameinit()

else if (difficult == 2)

else if (difficult == 3)

maps = mapw * maph;

//初始化地圖

map = new char[maps];

memset(map, 0, maps);

displaymap = new char[maps];

memset(displaymap, 11, maps);

thunderindex = new int[thundernum];

setthunderposition(); //初始化雷的位置

countthunder(); //根據雷位置

}

現在我們講解一下這裡是如何初始化雷的位置

void setthunderposition()

while (num < thundernum) //開始放置雷

}

接下來講解如何設定雷周圍的數字

//該方法效率是非常高的,因為只遍歷雷的位置及周圍位置

void countthunder()

; for (int i = 0; i < thundernum; ++i)}}}

三、遊戲的執行

1.遊戲繪製:展示displaymap,即已經被點開的map位置

void gamedraw()

}

2.遊戲邏輯

void gamelogic()

} if (n == thundernum) //贏了

//游標移動

if (getasynckeystate(vk_left) & 0x8000 && cursonx > 0)

else if (getasynckeystate(vk_right) & 0x8000 && cursonx < mapw - 1)

else if (getasynckeystate(vk_up) & 0x8000 && cursony > 0)

else if (getasynckeystate(vk_down) & 0x8000 && cursony < maph - 1)

else if (getasynckeystate(vk_space) & 0x8000)}}}

3.擴散

//擴散

void spread(int index)

; vectorvecspread; //沒學過的可以先看看,或者用長度大一點的陣列

vecspread.push_back(index);

displaymap[index] = 0; //首先記錄當前空地位置,並設定展示位置為空地

for (int i = 0; i < vecspread.size(); ++i)

}} }

}

掃雷 C 窗體

using system using system.collections.generic using system.text using system.drawing using system.windows using system.windows.forms namespace winmine...

C語言 掃雷

做乙個掃雷的遊戲,首先分析一下掃雷需要實現的功能 1.選擇乙個位置,如果該位置是雷則結束遊戲,並顯示所有雷的位置。如果不是雷則顯示該位置周圍雷的數量。2.如果周圍沒有雷,則該位置顯示空,並且周圍如果也為空則一併展開。3.第一次選擇時必定不是雷 4.當盤上剩餘的位置只有雷了,則遊戲也結束,並且玩家勝利...

C語言掃雷

大家想必都玩過掃雷,無論那個版本都有難度供已選擇,下面來分享乙個自己用c語言編寫的掃雷遊戲吧!編寫語言 c語言 編寫軟體 visual studio 2017 1.首先是將遊戲的測試模組寫好,要有提示玩家進入的選單函式以及選擇函式等各種需要編寫的函式想出乙個整體框架來 測試模組test。c incl...