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

C語(yǔ)言版簡(jiǎn)單掃雷游戲

 更新時(shí)間:2021年08月19日 17:31:55   作者:翔哥愛(ài)編程  
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言版簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語(yǔ)言版的簡(jiǎn)單掃雷游戲,供大家參考,具體內(nèi)容如下

思想

我們?cè)谠O(shè)計(jì)的時(shí)候,首先將其分為三個(gè)部分,分別為頭文件game.h游戲界面及主要實(shí)現(xiàn)的功能函數(shù)部分test.c,還有就是最重要的游戲?qū)崿F(xiàn)部分game.c。

一、頭文件構(gòu)建;

我們通過(guò)game.h將所有用到的頭文件引用進(jìn)去,目的是更加直觀的讓讀者看懂我們的結(jié)構(gòu),另外我們思路也會(huì)通暢一些。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define ROW 9
#define COL 9
 
#define ROWS ROW+2
#define COLS COL+2 
 
#define EASY_COUNT 10
//初始化棋盤
void InitBoard(char board[ROWS][COLS],int rows,int cols,char set);
//顯示/打印棋盤
void DisPlayBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void SetMine(char board[ROWS][COLS], int row, int col);
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

當(dāng)我們這么做了之后以后只需要在game.c和time.c中引用就行了(通過(guò)#include "game.h")

二、test.c菜單模塊構(gòu)建;

我們要想當(dāng)我們需要做一個(gè)游戲,怎樣才可以讓玩家清楚的知道自己該怎么做呢,我們只有通過(guò)菜單,才可以清楚的表達(dá)。當(dāng)建立好這個(gè)菜單后我們要想,通過(guò)什么函數(shù)可以實(shí)現(xiàn)呢,我們要分幾步去進(jìn)行,然后劃分模塊,構(gòu)建函數(shù)。

#define _CRT_SECURE_NO_WARNINGS 1
 
#include "game.h"
 
void menu()
{
 printf("######################\n");
 printf("########1.play########\n");
 printf("########0.exit########\n");
 printf("######################\n");
 
}
 
void game()
{
 char mine[ROWS][COLS] = {0};//存放雷的信息
 char show[ROWS][COLS] = {0};//存放排查出雷的信息
 
 //初始化棋盤
 InitBoard(mine,ROWS,COLS,'0');
 InitBoard(show,ROWS,COLS,'*');
 
 
 //布置雷
 SetMine(mine, ROW, COL);
 //DisPlayBoard(mine, ROW, COL);
 DisplayBoard(show, ROW, COL);
 
 //排查雷
 FindMine(mine,show,ROW,COL);
}
 
int main()
{
int input = 0;
srand((unsigned)time(NULL));//生成隨機(jī)數(shù)
do
{
 menu();
 printf("請(qǐng)選擇:>");
 scanf("%d",&input);
 switch (input)
 {
 case 1:
  game();
  break;
 case 0:
  printf("退出游戲\n");
  break;
 default:
  printf("選擇錯(cuò)誤,請(qǐng)重新選擇\n");
  break;
  }
} while (input);
 return 0;
 
}

三、函數(shù)構(gòu)建;

1.InitBoard函數(shù)

下面的代碼是初始化棋盤部分,我們用了兩個(gè)簡(jiǎn)單的for循環(huán)就可以實(shí)現(xiàn)。
棋盤初始化完成之后,就到了打印棋盤部分了:

void InitBoard(char board[ROWS][COLS], int rows, int cols)
{
 int i = 0;
 for(i = 0; i < rows; i++)
 {
 int j = 0;
 for (j = 0; j < cols; j++)
 {
  board[i][j] = '*';
 }
}

2.DisplayBoard函數(shù)

這里也是用了兩個(gè)簡(jiǎn)單的for循環(huán)實(shí)現(xiàn)的,不過(guò)我們?cè)谄灞P的上面一行加上了一行數(shù)字,并用printf弄了兩行-------的分界限,這樣的話就可以快速的看出棋盤上的位置,使玩家體驗(yàn)感更佳。

void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
 int i = 0;
 printf("------------------------\n");
 for (i = 0; i <= 9; i++)
 {
  printf("%d ", i);
 }
 printf("\n");
 
 for (i = 1; i <= row; i++)
 {
  int j = 0;
  printf("%d ", i);
  for (j = 1; j <= col; j++)
  {
   printf("%c ", board[i][j]);
  }
  printf("\n");
 }
 printf("------------------------\n");
}

3.SetMine函數(shù)

這個(gè)函數(shù)是我們的放雷函數(shù)

這里我們是用了一個(gè)隨機(jī)函數(shù)rand來(lái)使雷的位置隨機(jī)生成。

void SetMine(char board[ROWS][COLS], int row, int col)
{
 int count = EASY_COUNT;
 while (count)
 {
  //生成隨機(jī)下標(biāo)
  int x = rand() % row + 1;
  int y = rand() % col + 1;
  if (board[x][y] != '1')
  {
   board[x][y] = '1';
   count--;
  }
 }
}

4.GetMineCount函數(shù)

這個(gè)函數(shù)是用了9宮格的周圍八個(gè)格子

例如(x,y)為中心坐標(biāo)進(jìn)行計(jì)算。根據(jù)ASCII碼字符1減去字符0就是整形1,所以我們就應(yīng)用此方法把周圍的雷全部加起來(lái)減去字符零就可以得到周圍雷的個(gè)數(shù) 。

int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
 return (mine[x - 1][y] +
  mine[x - 1][y - 1] +
  mine[x][y - 1] +
  mine[x + 1][y - 1] +
  mine[x + 1][y] +
  mine[x + 1][y + 1] +
  mine[x][y + 1] +
  mine[x - 1][y + 1] - 8 * '0');
}

5.FindMine函數(shù)

該函數(shù)是找雷的,

如果排雷失敗將會(huì)退出游戲,如果沒(méi)有失敗就會(huì)一直循環(huán)。直到失敗

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
 int x = 0;
 int y = 0;
 int win = 0;
 while (win<row*col - EASY_COUNT)
 {
  printf("請(qǐng)輸入要排查的坐標(biāo):>");
  scanf("%d %d", &x, &y);
  if (x >= 1 && x <= row && y >= 1 && y <= col)
  {
   if (mine[x][y] == '1')
   {
    printf("很遺憾,你被炸死了\n");
    DisplayBoard(mine, ROW, COL);
    break;
   }
   else
   {
    int count = GetMineCount(mine, x, y);
    show[x][y] = count + '0';
    DisplayBoard(show, ROW, COL);
    win++;
   }
  }
  else
  {
   printf("坐標(biāo)非法,重新輸入\n");
  }
 }
 
 if (win == row * col - EASY_COUNT)
 {
  printf("恭喜你,排雷成功\n");
  DisplayBoard(mine, ROW, COL);
 }
}

接下來(lái)我們按ctrl+f5就可以運(yùn)行了結(jié)果如下圖所示

我們就可以玩啦,愉快的掃雷之路就此開(kāi)始

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

相關(guān)文章

  • Matlab實(shí)現(xiàn)繪制玫瑰線的示例代碼

    Matlab實(shí)現(xiàn)繪制玫瑰線的示例代碼

    這篇文章主要為大家介紹了如何利用Matlab繪制3好看的玫瑰線,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定幫助,感興趣的小伙伴可以動(dòng)手試一試
    2022-08-08
  • OpenCV實(shí)現(xiàn)圖像膨脹

    OpenCV實(shí)現(xiàn)圖像膨脹

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)圖像膨脹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • c/c++ 奇技淫巧(一些c語(yǔ)言的技巧)

    c/c++ 奇技淫巧(一些c語(yǔ)言的技巧)

    這篇文章主要介紹了c/c++ 奇技淫巧,需要的朋友可以參考下
    2017-03-03
  • C語(yǔ)言手寫集合List的示例代碼

    C語(yǔ)言手寫集合List的示例代碼

    數(shù)組長(zhǎng)度是固定的,那么在很多時(shí)候我們并不知道到底有多少數(shù)據(jù)需要存儲(chǔ),這時(shí)候我么就需要一個(gè)可變長(zhǎng)度的數(shù)組來(lái)進(jìn)行存儲(chǔ),在C語(yǔ)言中需要我們自己進(jìn)行定義,我們稱為集合。本文將用C語(yǔ)言實(shí)現(xiàn)手寫集合,需要的可以參考一下
    2022-08-08
  • C語(yǔ)言利用模板實(shí)現(xiàn)簡(jiǎn)單的棧類

    C語(yǔ)言利用模板實(shí)現(xiàn)簡(jiǎn)單的棧類

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言利用模板實(shí)現(xiàn)簡(jiǎn)單的棧類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C/C++ProtoBuf使用小結(jié)

    C/C++ProtoBuf使用小結(jié)

    ProtoBuf全稱:protocol buffers,直譯過(guò)來(lái)是:“協(xié)議緩沖區(qū)”,是一種與語(yǔ)言無(wú)關(guān)、與平臺(tái)無(wú)關(guān)的可擴(kuò)展機(jī)制,用于序列化結(jié)構(gòu)化數(shù)據(jù),這篇文章主要介紹了C/C++ProtoBuf使用,需要的朋友可以參考下
    2024-01-01
  • OpenCV實(shí)現(xiàn)更改圖片顏色功能

    OpenCV實(shí)現(xiàn)更改圖片顏色功能

    這篇文章主要為大家詳細(xì)介紹了如何利用OpenCV實(shí)現(xiàn)更改圖片顏色的功能,文中代碼介紹詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C++實(shí)現(xiàn)支持泛型的LFU詳解

    C++實(shí)現(xiàn)支持泛型的LFU詳解

    這篇文章主要給大家介紹了關(guān)于C++實(shí)現(xiàn)LFU的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • 基于C++實(shí)現(xiàn)的各種內(nèi)部排序算法匯總

    基于C++實(shí)現(xiàn)的各種內(nèi)部排序算法匯總

    這篇文章主要介紹了基于C++實(shí)現(xiàn)的各種內(nèi)部排序算法,非常經(jīng)典,需要的朋友可以參考下
    2014-08-08
  • C++程序的五大內(nèi)存分區(qū)實(shí)例詳解

    C++程序的五大內(nèi)存分區(qū)實(shí)例詳解

    C++內(nèi)存區(qū)域,一般可分為棧內(nèi)存區(qū)、堆內(nèi)存區(qū)、全局/靜態(tài)內(nèi)存區(qū)、文字常量?jī)?nèi)存區(qū)及程序代碼區(qū)5大分區(qū),本文就帶大家深刻的理解這5大內(nèi)存分區(qū),感興趣的可以了解一下
    2021-10-10

最新評(píng)論