中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

基于C語言如何實現簡易的掃雷游戲

發布時間:2022-06-06 15:04:32 來源:億速云 閱讀:163 作者:iii 欄目:開發技術

這篇文章主要講解了“基于C語言如何實現簡易的掃雷游戲”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“基于C語言如何實現簡易的掃雷游戲”吧!

掃雷即在一個棋盤中,隨機放入一定數量的雷,玩家通過輸入坐標,得到坐標上的信息(以此點為中心四周8個格子內地雷數量的總和),來判斷此格子是否有地雷,從而依照此法排查出整個棋盤上所有的地雷。

本項目采用9*9的棋盤,放入地雷的數量可以依照個人設置。

首先聲明總的頭文件

#ifndef _UTILI_H_
#define _UTILI_H_
 
#include<stdio.h>
#include<time.h>   //后面需要地雷的隨機放置,需要時間函數
 
#endif /* _UTILI_H_ */

接下來我們需要對整個項目所有需要用的函數進行聲明,放置在一個頭文件中:

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

整個游戲各個部分功能進行編寫代碼,分別實現不同的功能:

#include"Game.h"
 
void InitBoard(char board[ROWS][COLS], char set)   //初始化棋盤,在后臺執行掃雷任務時
{
    for(int i=0; i<ROWS; ++i)                  //實際上是在11 * 11 的棋盤 上進行的          
    {
        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)    //在界面顯示時,我們的棋盤實際展示的時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));             //通過隨機數獲得棋盤上隨機的地雷放置
    while(count)
    {
        int x = rand() % row + 1; //1 ~ ROW     //取余,保證放置在棋盤內
        int y = rand() % col + 1; //1 ~ COL
        if(mine[x][y] == '0')
        {
            mine[x][y] = '1';             //有地雷的格子內0被賦值為1,但注意這個1為字符
            count--;
        }
    }
}
 
int GetMineCount(char mine[ROWS][COLS], int x, int y)   //獲得以格子為中心周圍8個格子地雷數
{
    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');    //將字符轉換為數字
}
 
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("請輸入要排雷的位置:>");
        scanf("%d %d", &x, &y);
 
        if(x<1||x>row || y<1 || y>col)
        {
            printf("輸入的排雷位置非法,請重新輸入.....\n");
            continue;
        }
 
        if(mine[x][y] == '1')
        {
            printf("很遺憾,你被Over.\n");
            DisplayBoard(mine, ROW, COL);
            break;
        }
 
        //統計雷的個數
        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);
}

編寫主函數:

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

感謝各位的閱讀,以上就是“基于C語言如何實現簡易的掃雷游戲”的內容了,經過本文的學習后,相信大家對基于C語言如何實現簡易的掃雷游戲這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

漳浦县| 温泉县| 丰台区| 克什克腾旗| 新乡市| 华坪县| 和田市| 安塞县| 万荣县| 北安市| 新乡市| 开封县| 东海县| 高碑店市| 辽阳县| 山阴县| 宣武区| 昆明市| 扬中市| 历史| 祁阳县| 成安县| 平江县| 景东| 乐亭县| 嘉祥县| 清苑县| 射阳县| 高密市| 达州市| 崇文区| 玛沁县| 彰化市| 安国市| 汉阴县| 万源市| 五华县| 桦川县| 舒兰市| 天全县| 聊城市|