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

基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易的掃雷游戲

 更新時(shí)間:2022年06月06日 11:31:25   作者:東區(qū)東區(qū)!  
這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易的掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

對(duì)于C語(yǔ)言學(xué)習(xí)者來(lái)說(shuō),在完成C語(yǔ)言初級(jí)學(xué)習(xí)之后,掃雷游戲是一個(gè)很好的知識(shí)的總結(jié)和練習(xí)。

掃雷即在一個(gè)棋盤中,隨機(jī)放入一定數(shù)量的雷,玩家通過(guò)輸入坐標(biāo),得到坐標(biāo)上的信息(以此點(diǎn)為中心四周8個(gè)格子內(nèi)地雷數(shù)量的總和),來(lái)判斷此格子是否有地雷,從而依照此法排查出整個(gè)棋盤上所有的地雷。

本項(xiàng)目采用9*9的棋盤,放入地雷的數(shù)量可以依照個(gè)人設(shè)置。

首先聲明總的頭文件

#ifndef _UTILI_H_
#define _UTILI_H_
?
#include<stdio.h>
#include<time.h> ? //后面需要地雷的隨機(jī)放置,需要時(shí)間函數(shù)
?
#endif /* _UTILI_H_ */

接下來(lái)我們需要對(duì)整個(gè)項(xiàng)目所有需要用的函數(shù)進(jìn)行聲明,放置在一個(gè)頭文件中:

#ifndef _GAME_H_ ?//條件編譯
#define _GAME_H_
?
#include"utili.h"
?
#define QUIT 0 ? ?//0退出 1 進(jìn)入游戲
#define GAME 1
?
#define ROW 9 ? ?//定義9*9的掃雷界面
#define COL 9
#define ROWS ROW+2 ?//左右兩邊加1行1列,為了統(tǒng)計(jì)周圍雷個(gè)數(shù)
#define COLS COL+2
?
#define GAME_LEVEL 20
?
void InitBoard(char board[ROWS][COLS], char set); ? ?//設(shè)置界面
void DisplayBoard(char board[ROWS][COLS], int row, int col); ? //展示界面
?
void SetMine(char mine[ROWS][COLS], int row, int col); ? //設(shè)置雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col); ?//找雷
?
void StartGame();
?
#endif /* _GAME_H_ */

整個(gè)游戲各個(gè)部分功能進(jìn)行編寫代碼,分別實(shí)現(xiàn)不同的功能:

#include"Game.h"
?
void InitBoard(char board[ROWS][COLS], char set) ? //初始化棋盤,在后臺(tái)執(zhí)行掃雷任務(wù)時(shí)
{
?? ?for(int i=0; i<ROWS; ++i) ? ? ? ? ? ? ? ? ?//實(shí)際上是在11 * 11 的棋盤 上進(jìn)行的 ? ? ? ? ?
?? ?{
?? ??? ?for(int j=0; j<COLS; ++j)
?? ??? ?{
?? ??? ??? ?board[i][j] = set;
?? ??? ?}
?? ?}
}
?
void DisplayBoard(char board[ROWS][COLS], int row, int col) ?
{
?? ?for(int i=0; i<=row; ++i) ? ?//在界面顯示時(shí),我們的棋盤實(shí)際展示的時(shí)9 * 9的界面
?? ?{
?? ??? ?printf("%d ", i);
?? ?}
?? ?printf("\n");
?
?
?? ?for(int i=1; i<=row; ++i)
?? ?{
?? ??? ?printf("%d ", i);
?? ??? ?for(int j=1; j<=col; ++j)
?? ??? ?{
?? ??? ??? ?printf("%c ", board[i][j]);
?? ??? ?}
?? ??? ?printf("\n");
?? ?}
}
?
void SetMine(char mine[ROWS][COLS], int row, int col)
{
?? ?int count = GAME_LEVEL;
?? ?srand(time(0)); ? ? ? ? ? ? //通過(guò)隨機(jī)數(shù)獲得棋盤上隨機(jī)的地雷放置
?? ?while(count)
?? ?{
?? ??? ?int x = rand() % row + 1; //1 ~ ROW ? ? //取余,保證放置在棋盤內(nèi)
?? ??? ?int y = rand() % col + 1; //1 ~ COL
?? ??? ?if(mine[x][y] == '0')
?? ??? ?{
?? ??? ??? ?mine[x][y] = '1'; ? ? ? ? ? ? //有地雷的格子內(nèi)0被賦值為1,但注意這個(gè)1為字符
?? ??? ??? ?count--;
?? ??? ?}
?? ?}
}
?
int GetMineCount(char mine[ROWS][COLS], int x, int y) ? //獲得以格子為中心周圍8個(gè)格子地雷數(shù)
{
?? ?return mine[x-1][y-1] + mine[x-1][y] + mine[x-1][y+1] +?
?? ??? ? ? mine[x][y-1] + mine[x][y+1] +?
?? ??? ? ? mine[x+1][y-1] + mine[x+1][y] + mine[x+1][y+1]
?? ??? ? ? - (8*'0'); ? ?//將字符轉(zhuǎn)換為數(shù)字
}
?
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
?? ?int win = 0;
?? ?int x, y;
?? ?while(win < row*col-GAME_LEVEL) ? //判斷贏的條件
?? ?{
?? ??? ?printf("請(qǐng)輸入要排雷的位置:>");
?? ??? ?scanf("%d %d", &x, &y);
?
?? ??? ?if(x<1||x>row || y<1 || y>col)
?? ??? ?{
?? ??? ??? ?printf("輸入的排雷位置非法,請(qǐng)重新輸入.....\n");
?? ??? ??? ?continue;
?? ??? ?}
?
?? ??? ?if(mine[x][y] == '1')
?? ??? ?{
?? ??? ??? ?printf("很遺憾,你被Over.\n");
?? ??? ??? ?DisplayBoard(mine, ROW, COL);
?? ??? ??? ?break;
?? ??? ?}
?
?? ??? ?//統(tǒng)計(jì)雷的個(gè)數(shù)
?? ??? ?int count = GetMineCount(mine, x, y);
?? ??? ?show[x][y] = count + '0';
?
?? ??? ?system("cls");
?? ??? ?DisplayBoard(show, ROW, COL);
?
?? ??? ?win++;
?? ?}
?
?? ?if(win >= ?row*col-GAME_LEVEL)
?? ?{
?? ??? ?printf("恭喜你,排雷成功.\n");
?? ?}
}
?
void StartGame()
{
?? ?//定義棋盤
?? ?char mine[ROWS][COLS];
?? ?char show[ROWS][COLS];
?
?? ?//初始化棋盤
?? ?InitBoard(mine, '0');
?? ?InitBoard(show, '*');
?
?? ?//埋雷
?? ?SetMine(mine, ROW, COL);
?
?? ?//顯示棋盤
?? ?DisplayBoard(show, ROW, COL);
?
?? ?//掃雷
?? ?FindMine(mine, show, ROW, COL);
}

編寫主函數(shù):

#include"Game.h"
?
int main(int argc, char *argv[])
{
?? ?int select = 1;
?? ?while(select)
?? ?{
?? ??? ?printf("*************************************\n");
?? ??? ?printf("* ? ? ? ? ?簡(jiǎn) 易 掃 雷 游 戲 ? ? ? ?*\n");
?? ??? ?printf("*************************************\n");
?? ??? ?printf("* ? ? ? ? ? ? [1] Play ? ? ? ? ? ? ?*\n");
?? ??? ?printf("* ? ? ? ? ? ? [0] Quit ? ? ? ? ? ? ?*\n");
?? ??? ?printf("*************************************\n");
?? ??? ?printf("請(qǐng)選擇:>");
?? ??? ?scanf("%d", &select);
?
?? ??? ?if(select == QUIT)
?? ??? ??? ?break;
?
?? ??? ?if(select != GAME)
?? ??? ?{
?? ??? ??? ?printf("輸入的操作有誤,請(qǐng)重新輸入......\n");
?? ??? ??? ?continue;
?? ??? ?}
?
?? ??? ?//開(kāi)始游戲
?? ??? ?StartGame();
?? ?}
?? ?printf("游戲結(jié)束,拜拜.\n");
?? ?return 0;
}

代碼在VS2015上正常執(zhí)行,整個(gè)游戲過(guò)程沒(méi)出現(xiàn)問(wèn)題。

游戲還可以有許多改進(jìn)的地方,如增加計(jì)時(shí)功能,點(diǎn)到附件無(wú)雷的格子時(shí)展示所有相鄰的無(wú)雷格子等,后續(xù)還可以豐富完善。

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

相關(guān)文章

  • OpenCV圖像輪廓提取的實(shí)現(xiàn)

    OpenCV圖像輪廓提取的實(shí)現(xiàn)

    本文主要介紹了OpenCV圖像輪廓提取的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C++利用棧實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式

    C++利用棧實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式

    這篇文章主要為大家詳細(xì)介紹了C++利用棧實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 詳解C++ 桶排序(BucketSort)

    詳解C++ 桶排序(BucketSort)

    這篇文章主要介紹了C++桶排序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • C++ sort排序函數(shù)用法詳解

    C++ sort排序函數(shù)用法詳解

    本文主要介紹了C++ sort排序函數(shù)用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Qt自定義實(shí)現(xiàn)一個(gè)等待提示Ui控件

    Qt自定義實(shí)現(xiàn)一個(gè)等待提示Ui控件

    等待樣式控件是我們?cè)谧鯱I時(shí)出場(chǎng)率還挺高的控件之一,所以這篇文章主要為大家介紹了Qt如何自定義一個(gè)好看的等待提示Ui控件,感興趣的可以了解下
    2024-01-01
  • C++ 花括號(hào){}初始化小結(jié)

    C++ 花括號(hào){}初始化小結(jié)

    在C++11及以后的版本中,花括號(hào){}語(yǔ)法在不同語(yǔ)境下有不同的用法,本文就詳細(xì)的介紹C++ 花括號(hào){}初始化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • c++智能指針unique_ptr的使用

    c++智能指針unique_ptr的使用

    本文主要介紹了c++智能指針unique_ptr的使用,與shared_ptr作用類似,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C語(yǔ)言版五子棋游戲的實(shí)現(xiàn)代碼

    C語(yǔ)言版五子棋游戲的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言版五子棋游戲的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C語(yǔ)言修煉之路初識(shí)指針陰陽(yáng)竅?地址還歸大道真下篇

    C語(yǔ)言修煉之路初識(shí)指針陰陽(yáng)竅?地址還歸大道真下篇

    指針是指向另一個(gè)變量的變量。意思是一個(gè)指針保存的是另一個(gè)變量的內(nèi)存地址。換句話說(shuō),指針保存的并不是普通意義上的數(shù)值,而是另一個(gè)變量的地址值。一個(gè)指針保存了另一個(gè)變量的地址值,就說(shuō)這個(gè)指針“指向”了那個(gè)變量
    2022-02-02
  • C語(yǔ)言實(shí)現(xiàn)字符串轉(zhuǎn)浮點(diǎn)函數(shù)的示例

    C語(yǔ)言實(shí)現(xiàn)字符串轉(zhuǎn)浮點(diǎn)函數(shù)的示例

    字符串不僅可以轉(zhuǎn)換為整數(shù),也可以轉(zhuǎn)換為浮點(diǎn)數(shù),本文主要介紹了C語(yǔ)言實(shí)現(xiàn)字符串轉(zhuǎn)浮點(diǎn)函數(shù)的示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-02-02

最新評(píng)論

平潭县| 绥江县| 庆安县| 吴川市| 新化县| 来安县| 获嘉县| 文成县| 宁城县| 正宁县| 永平县| 铜川市| 习水县| 平潭县| 芮城县| 酒泉市| 巴东县| 正蓝旗| 白水县| 吴江市| 三江| 泸溪县| 徐水县| 平远县| 中牟县| 富蕴县| 连城县| 乌鲁木齐县| 柯坪县| 方城县| 色达县| 新绛县| 福清市| 砚山县| 屯留县| 武汉市| 崇州市| 米泉市| 车险| 集安市| 如皋市|