欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于C語言實現(xiàn)簡易的掃雷游戲

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

對于C語言學習者來說,在完成C語言初級學習之后,掃雷游戲是一個很好的知識的總結(jié)和練習。

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

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

首先聲明總的頭文件

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

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

#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列,為了統(tǒng)計周圍雷個數(shù)
#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_ */

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

#include"Game.h"
?
void InitBoard(char board[ROWS][COLS], char set) ? //初始化棋盤,在后臺執(zhí)行掃雷任務時
{
?? ?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)); ? ? ? ? ? ? //通過隨機數(shù)獲得棋盤上隨機的地雷放置
?? ?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,但注意這個1為字符
?? ??? ??? ?count--;
?? ??? ?}
?? ?}
}
?
int GetMineCount(char mine[ROWS][COLS], int x, int y) ? //獲得以格子為中心周圍8個格子地雷數(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("請輸入要排雷的位置:>");
?? ??? ?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;
?? ??? ?}
?
?? ??? ?//統(tǒng)計雷的個數(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("* ? ? ? ? ?簡 易 掃 雷 游 戲 ? ? ? ?*\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("游戲結(jié)束,拜拜.\n");
?? ?return 0;
}

代碼在VS2015上正常執(zhí)行,整個游戲過程沒出現(xiàn)問題。

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

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

相關文章

  • C語言實現(xiàn)文件內(nèi)容按行隨機排列的算法示例

    C語言實現(xiàn)文件內(nèi)容按行隨機排列的算法示例

    這篇文章主要介紹了C語言實現(xiàn)文件內(nèi)容按行隨機排列的算法,涉及C語言字符串、數(shù)組遍歷與隨機數(shù)相關算法實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • C++同步線程實現(xiàn)示例詳解

    C++同步線程實現(xiàn)示例詳解

    這篇文章主要介紹了C++同步線程實現(xiàn)示例,線程同步是指同一進程中的多個線程互相協(xié)調(diào)工做從而達到一致性。之因此須要線程同步,是由于多個線程同時對一個數(shù)據(jù)對象進行修改操做時,可能會對數(shù)據(jù)形成破壞
    2022-11-11
  • C語言代碼鏈表實現(xiàn)貪吃蛇游戲

    C語言代碼鏈表實現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細介紹了C語言鏈表實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C++中為什么要使用動態(tài)內(nèi)存

    C++中為什么要使用動態(tài)內(nèi)存

    大家好,本篇文章主要講的是C++中為什么要使用動態(tài)內(nèi)存,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • C++面試八股文之override和finial關鍵字有何作用

    C++面試八股文之override和finial關鍵字有何作用

    C++11中的override和final關鍵字是為了增強代碼的編譯時類型檢查和面向?qū)ο笤O計中的繼承機制,下面這篇文章主要給大家介紹了關于C++面試八股文之override和finial關鍵字有何作用的相關資料,需要的朋友可以參考下
    2023-06-06
  • C++詳細講解IO流原理

    C++詳細講解IO流原理

    當程序與外界進行信息交換時,存在兩個對象,一個是程序中的對象,另一個是文件對象。流是信息流動的一種抽象,它負責在數(shù)據(jù)的生產(chǎn)者和數(shù)據(jù)的消費者之間建立聯(lián)系,并管理數(shù)據(jù)的流動
    2022-05-05
  • Qt實現(xiàn)FTP的上傳和下載的實例代碼

    Qt實現(xiàn)FTP的上傳和下載的實例代碼

    本篇文章主要介紹了Qt實現(xiàn)FTP的上傳和下載的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • C++函數(shù)三種傳參形式(指針傳遞、引用傳遞、值傳遞)

    C++函數(shù)三種傳參形式(指針傳遞、引用傳遞、值傳遞)

    不論是哪種參數(shù)傳遞方式,都有形參和實參之分,本文主要介紹了C++函數(shù)三種傳參形式(指針傳遞、引用傳遞、值傳遞),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 深入解析int(*p)[]和int(**p)[]

    深入解析int(*p)[]和int(**p)[]

    以下是對int(*p)[]和int(**p)[]的使用進行了詳細的分析介紹,需要的朋友可以參考下
    2013-07-07
  • C語言中char*和char[]用法區(qū)別分析

    C語言中char*和char[]用法區(qū)別分析

    這篇文章主要介紹了C語言中char*和char[]用法區(qū)別,包括使用過程中的誤區(qū)及注意點分析,需要的朋友可以參考下
    2014-09-09

最新評論