亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語(yǔ)言實(shí)現(xiàn)掃雷小游戲(擴(kuò)展版可選擇游戲難度)

 更新時(shí)間:2019年10月21日 23:44:26   作者:sillyxue  
游戲目標(biāo)是找出所有沒(méi)有地雷的方格,完成游戲;要是按了有地雷的方格,游戲失?。煌婕铱蓸?biāo)記雷的位置,游戲以完成時(shí)間來(lái)評(píng)高低,并且用戶(hù)可以選擇游戲難度

游戲簡(jiǎn)介

掃雷,是一款益智類(lèi)小游戲。
游戲目標(biāo)是找出所有沒(méi)有地雷的方格,完成游戲;要是按了有地雷的方格,游戲失?。煌婕铱蓸?biāo)記雷的位置。游戲以完成時(shí)間來(lái)評(píng)高低。有不同的游戲難度可選擇。

實(shí)現(xiàn)的功能介紹

1.計(jì)時(shí)
2.初始化雷盤(pán)
3.打印雷盤(pán)
4.隨機(jī)設(shè)置雷的分布,可選擇游戲難易程度
5.統(tǒng)計(jì)坐標(biāo)位置周?chē)睦讛?shù)
6.第一次排雷不會(huì)被炸死
7.擴(kuò)展式排雷,展開(kāi)周?chē)姆抢讌^(qū)
8.給所選坐標(biāo)位置做標(biāo)記,或取消標(biāo)記

該程序分為三個(gè)文件:

1.game.h :包含頭文件的引用、函數(shù)的聲明和宏定義
2.game.c :包含游戲各功能函數(shù)的具體實(shí)現(xiàn)
3.pro.c :各功能函數(shù)的調(diào)用(程序的流程)
PS:文章末尾附完整代碼 及 游戲效果圖

 

因?yàn)榕爬讜r(shí)要計(jì)算每個(gè)位置周?chē)藗€(gè)位置的雷數(shù),所以在創(chuàng)建數(shù)組時(shí)要多一圈,即行列都要加2。給用戶(hù)顯示的數(shù)組不需要加。

游戲功能代碼詳解

1.計(jì)時(shí)

運(yùn)用clock函數(shù),該函數(shù)需要的頭文件為 “time.h”
函數(shù)原型:clock_t clock(void);
功能:程序從啟動(dòng)到函數(shù)調(diào)用占用CPU的時(shí)間
這個(gè)函數(shù)返回從“開(kāi)啟這個(gè)程序進(jìn)程”到“程序中調(diào)用clock()函數(shù)”時(shí)之間的CPU時(shí)鐘計(jì)時(shí)單元(clock tick)數(shù),在MSDN中稱(chēng)之為掛鐘時(shí)間;若掛鐘時(shí)間不可取,則返回-1。其中clock_t是用來(lái)保存時(shí)間的數(shù)據(jù)類(lèi)型。

void set_time()//計(jì)時(shí)
{
  printf("用時(shí):%u 秒\n", clock() / CLOCKS_PER_SEC);
}

2.初始化雷盤(pán)
這里我用到的是memset函數(shù),需要的頭文件為“memory.h”或“string.h”
函數(shù)原型:void *memset(void *s, int ch, size_t n);
功能:將s中當(dāng)前位置后面的n個(gè)字節(jié) (typedef unsigned int size_t )用 ch 替換并返回 s 。在一段內(nèi)存塊中填充某個(gè)給定的值。

void init_board(char board[ROWS][COLS], int row, int col, char c)//初始化雷盤(pán)
{
  memset(board, c, row*col*sizeof(board[0][0]));
}

3.打印雷盤(pán)
運(yùn)用兩個(gè)循環(huán)體實(shí)現(xiàn)雷盤(pán)數(shù)組的賦值、行號(hào)、列號(hào)的打印。正式游戲時(shí)可以加上system(“CLS”); 清屏語(yǔ)句,每次調(diào)用時(shí)都清屏一次,使游戲畫(huà)面更簡(jiǎn)潔清晰。
我們把計(jì)時(shí)函數(shù)放在里面,每次打印雷盤(pán)時(shí)就可以顯示所用的時(shí)間。

void disp_board(char board[ROWS][COLS], int row, int col)//打印雷盤(pán)
{
  int i = 0;
  int j = 0;
  //system("CLS");//清屏
  for (i = 0; i <= row; i++)
  {
    printf("%2d ", i);//打印行號(hào)
  }
  printf("\n");
  for (i = 1; i <= row; i++)
  {
    printf("%2d ", i);//打印列號(hào)
    for (j = 1; j <= col; j++)
    {
      printf("%2c ", board[i][j]);
    }
    printf("\n");
  }
  printf("\n");
  set_time();//打印所用的時(shí)間
}

4.隨機(jī)設(shè)置雷的分布,可選擇游戲難易程度
放置雷必須是隨機(jī)的,這里用到了rand函數(shù),它和srand函數(shù)配合使用產(chǎn)生隨機(jī)數(shù)。srand(time(NULL))放在主函數(shù)中調(diào)用一次,通過(guò)系統(tǒng)時(shí)間提供的種子值,使rand函數(shù)生成不同的偽隨機(jī)數(shù)序列。

void set_mine(char board[ROWS][COLS], int row, int col,int count)//置雷
{
  int x = 0;
  int y = 0; 
  while (count)
  {
    x = rand() % row + 1;//隨機(jī)位置范圍1~row
    y = rand() % col + 1;//隨機(jī)位置范圍1~col
    if (board[x][y] == '0')//判斷是否已有雷
    {
      board[x][y] = '1';//有雷的位置賦為1
      count--;
    }
  }
}

5.統(tǒng)計(jì)坐標(biāo)位置周?chē)睦讛?shù) 及 未掃的位置的個(gè)數(shù)
當(dāng)掃到一個(gè)沒(méi)有雷的位置時(shí),會(huì)顯示這個(gè)位置周?chē)蝗Π藗€(gè)位置的含雷的總數(shù),所以我們要寫(xiě)一個(gè)“數(shù)雷”函數(shù)來(lái)數(shù)。

int count_mine(char mine[ROWS][COLS], int x, int y)//數(shù)雷
{
  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';//數(shù)周?chē)蝗Π藗€(gè)位置的雷數(shù)
}

int count_print(char print[ROWS][COLS], int row, int col)//數(shù)未掃位置
{
  int count = 0;
  int i = 0;
  for (i = 1; i <= row; i++)
  {
    int j = 0;
    for (j = 1; j <= col; j++)
    {
      if (print[i][j] == '@' ||print[i][j] == '*')
      {
        count++;
      }
    }
  }
  return count;
}

6.第一次排雷不會(huì)被炸死
為了增加游戲的可玩性,加入“第一次排雷不被炸死”這個(gè)函數(shù)。當(dāng)?shù)谝淮闻啪陀龅嚼讜r(shí),我們把雷偷偷挪走,隨機(jī)放在一個(gè)原本無(wú)雷的位置。

void safe_mine(char mine[ROWS][COLS],char print[ROWS][COLS],int x,int y,int row,int col)//第一次排雷不炸死
{
  char ch = 0;
  int ret = 1;
  int number = 0;
  if (mine[x][y] == '1')//第一次踩到雷后補(bǔ)救
  {
    mine[x][y] = '0';
    char ch = count_mine(mine, x, y);
    print[x][y] = ch + '0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
    extend_board(mine, print, x, y);
    while (ret)//在其余有空的地方設(shè)置一個(gè)雷
    {
      int x = rand() % row + 1;//產(chǎn)生1到row的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
      int y = rand() % col + 1;//產(chǎn)生1到col的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
      if (mine[x][y] == '0')//找不是雷的地方布雷
      {
        mine[x][y] = '1';
        disp_board(print, row, col);
        //disp_board(mine, row, col);
        ret--;
        break;
      }
    }
  }
}

7.擴(kuò)展式排雷,展開(kāi)周?chē)姆抢讌^(qū)
當(dāng)游戲中排到一個(gè)周?chē)蝗Χ紵o(wú)雷的位置時(shí),運(yùn)用遞歸,實(shí)現(xiàn)擴(kuò)展展開(kāi)周?chē)囊黄瑹o(wú)雷區(qū)。

void extend_board(char mine[ROWS][COLS], char print[ROWS][COLS], int x, int y)//運(yùn)用遞歸擴(kuò)展周?chē)?
{   
  int n = 0;
  n = count_mine(mine, x, y); 
  if (n == 0)//當(dāng)該位置周?chē)讛?shù)為0時(shí)擴(kuò)展
  {
    print[x][y] = ' ';//擴(kuò)展的位置變?yōu)椤翱崭瘛贝蛴〕鰜?lái)
    if (mine[x - 1][y] == '0' && print[x - 1][y] == '@')
    {
      extend_board(mine, print, x - 1, y);//遞歸
    }
    if (mine[x + 1][y] == '0' && print[x + 1][y] == '@')
    {
      extend_board(mine, print, x + 1, y);
    }
    if (mine[x][y + 1] == '0' && print[x][y + 1] == '@')
    {
      extend_board(mine, print, x, y + 1);
    }
    if (mine[x - 1][y + 1] == '0' && print[x - 1][y + 1] == '@')
    {
      extend_board(mine, print, x - 1, y + 1);
    }
    if (mine[x + 1][y + 1] == '0' && print[x + 1][y + 1] == '@')
    {
      extend_board(mine, print, x + 1, y + 1);
    }
    if (mine[x][y - 1] == '0' && print[x][y - 1] == '@')
    {
      extend_board(mine, print, x, y - 1);
    }
    if (mine[x + 1][y - 1] == '0' && print[x + 1][y -1] == '@')
    {
      extend_board(mine, print, x + 1, y - 1);
    }
    if (mine[x - 1][y - 1] == '0' && print[x - 1][y - 1] == '@')
    {
      extend_board(mine, print, x - 1, y - 1);
    }
  }
  else 
     print[x][y] = n + '0'; 
} 

int find_mine(char mine[ROWS][COLS], char print[ROWS][COLS], int row, int col,int count)//排雷
{
  int x = 0;
  int y = 0;
  int number = 0;
  int ret = 0;
  while (1)
  {
    printf("輸入坐標(biāo)掃雷\n");
    scanf("%d%d", &x, &y);//玩家輸入掃雷的坐標(biāo)位置
    if ((x >= 1 && x <= row) && (y >= 1 && y <= col))//判斷輸入坐標(biāo)是否有誤,輸入錯(cuò)誤重新輸入
    {
      if (mine[x][y] == '0')//沒(méi)踩到雷
      {
        number++;//記錄掃雷的次數(shù)
        char ch = count_mine(mine, x, y);//數(shù)雷數(shù)
        print[x][y] = ch + '0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
        extend_board(mine, print, x, y);
        disp_board(mine, row, col);
        disp_board(print, row, col);
        if (count_print(print, row, col) == count)//剩余未掃位置=雷數(shù) 時(shí)勝利
        {
          return 0;
        }
        to_sign(print);//判斷是否標(biāo)記
        disp_board(print, row, col);
      }
      else if (mine[x][y] == '1')//踩到雷
      {
        if (ret == 0 && number == 0)
        {
          ret++;
          safe_mine(mine,print,x,y,row,col);
        }
        else
          return 1;
      }
    }
    else
    {
      printf("輸入錯(cuò)誤!請(qǐng)重新輸入\n");
    }
  }
}

8.給所選坐標(biāo)位置做標(biāo)記,或取消標(biāo)記
掃雷游戲還有一個(gè)功能:可以給你認(rèn)為是雷的位置標(biāo)記,或者取消標(biāo)記。
我通過(guò)三個(gè)函數(shù)來(lái)實(shí)現(xiàn),一個(gè)判斷用戶(hù)是否需要標(biāo)記;一個(gè)實(shí)現(xiàn)標(biāo)記功能,將@標(biāo)記成* ;一個(gè)實(shí)現(xiàn)取消標(biāo)記功能,將* 改回@。

void to_sign(char board[ROWS][COLS])//判斷是否標(biāo)記
{
  int chose_b = 0;
  int x = 0;
  int y = 0;
  printf("是否需要標(biāo)記/取消標(biāo)記:>\n(1.標(biāo)記 ;2.取消標(biāo)記 ;3.跳過(guò)該步驟) :>");
  scanf("%d", &chose_b);
  do{
    switch (chose_b)
    {
    case 1:
    {
         printf("請(qǐng)輸入需要標(biāo)記的位置坐標(biāo):>\n");
         scanf("%d%d", &x, &y);
         sign(board, x, y);
         break;
    }
    case 2:
    {
         printf("請(qǐng)輸入取消標(biāo)記的位置坐標(biāo):>\n");
         scanf("%d%d", &x, &y);
         unsign(board, x, y);
         break;
    }
    case 3:
    {
         printf("跳過(guò)此步驟。\n");
         chose_b = 0;
         break;
    }
    default:
    {     printf("輸入錯(cuò)誤!\n");
         chose_b = 0;
         break;
    }
    }
    chose_b = 0;
  } while (chose_b);
}
void sign(char board[ROWS][COLS], int x, int y)//用‘*'標(biāo)記雷
{
  if (board[x][y] == '@')
  {
    board[x][y] = '*';
  }
}

void unsign(char board[ROWS][COLS], int x, int y)//取消標(biāo)記
{
  if (board[x][y] == '*')
  {
    board[x][y] = '@';
  }
}

附:完整代碼

game.h

#ifndef  _GAME_H_
#define  _GAME_H_
//用到的頭文件
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<windows.h>
//定義打印的雷盤(pán)行、列
#define _ROW 9
#define _COL 9
#define ROW 16
#define COL 16
//定義數(shù)組的行、列
#define _ROWS _ROW+2
#define _COLS _COL+2
#define ROWS ROW+2
#define COLS COL+2
//定義難、易程度雷數(shù)
#define EASY_COUNT 10
#define HARD_COUNT 40
//定義游戲中的函數(shù)
void init_board(char board[ROWS][COLS],int row, int col, char c);//初始化
void disp_board(char board[ROWS][COLS],int row,int col);//打印
void set_mine(char board[ROWS][COLS], int row, int col,int count);//置雷
void safe_mine(char mine[ROWS][COLS], char print[ROWS][COLS], int x, int y, int row, int col);//第一次排雷不炸死
int find_mine(char mine[ROWS][COLS], char print[ROWS][COLS], int row, int col,int count);//排雷
int count_mine(char mine[ROWS][COLS], int x, int y);//數(shù)雷
void extend_board(char mine[ROWS][COLS], char print[ROWS][COLS], int x, int y);//擴(kuò)展
void to_sign(char board[ROWS][COLS]);//判斷是否標(biāo)記
void sign(char board[ROWS][COLS], int x, int y);//標(biāo)記
void unsign(char board[ROWS][COLS], int x, int y);//取消標(biāo)記
int count_print(char print[ROWS][COLS], int row, int col);//數(shù)未掃位置

#endif//_GAME_H_

game.c

#define _CRT_SECURE_NO_WARNINGS
#include "game.h"

void set_time()//計(jì)時(shí)
{
  printf("用時(shí):%u 秒\n", clock() / CLOCKS_PER_SEC);
}
void init_board(char board[ROWS][COLS], int row, int col, char c)//初始化雷盤(pán)
{
  memset(board, c, row*col*sizeof(board[0][0]));
}

void disp_board(char board[ROWS][COLS], int row, int col)//打印雷盤(pán)
{
  int i = 0;
  int j = 0;
  system("CLS");//清屏
  for (i = 0; i <= row; i++)//加行號(hào)
  {
    printf("%2d ", i);
  }
  printf("\n");
  for (i = 1; i <= row; i++)//加列號(hào)
  {
    printf("%2d ", i);
    for (j = 1; j <= col; j++)
    {
      printf("%2c ", board[i][j]);
    }
    printf("\n");
  }
  printf("\n");
  set_time();//打印所用的時(shí)間
}

void set_mine(char board[ROWS][COLS], int row, int col,int count)//置雷
{
  int x = 0;
  int y = 0; 
  while (count)
  {
    x = rand() % row + 1;//隨機(jī)位置范圍1~row
    y = rand() % col + 1;//隨機(jī)位置范圍1~col
    if (board[x][y] == '0')//判斷是否已有雷
    {
      board[x][y] = '1';
      count--;
    }
  }
}

void safe_mine(char mine[ROWS][COLS],char print[ROWS][COLS],int x,int y,int row,int col)//第一次排雷不炸死
{
  char ch = 0;
  int ret = 1;
  int number = 0;
  if (mine[x][y] == '1')//第一次踩到雷后補(bǔ)救
  {
    mine[x][y] = '0';
    char ch = count_mine(mine, x, y);
    print[x][y] = ch + '0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
    extend_board(mine, print, x, y);
    while (ret)//在其余有空的地方設(shè)置一個(gè)雷
    {
      int x = rand() % row + 1;//產(chǎn)生1到row的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
      int y = rand() % col + 1;//產(chǎn)生1到col的隨機(jī)數(shù),在數(shù)組下標(biāo)為1到10的范圍內(nèi)布雷
      if (mine[x][y] == '0')//找不是雷的地方布雷
      {
        mine[x][y] = '1';
        disp_board(print, row, col);
        //disp_board(mine, row, col);
        ret--;
        break;
      }
    }
  }
}


int count_mine(char mine[ROWS][COLS], int x, int y)//數(shù)雷
{
  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';//數(shù)周?chē)蝗Π藗€(gè)位置的雷數(shù)
}

int count_print(char print[ROWS][COLS], int row, int col)//數(shù)未掃位置
{
  int count = 0;
  int i = 0;
  for (i = 1; i <= row; i++)
  {
    int j = 0;
    for (j = 1; j <= col; j++)
    {
      if (print[i][j] == '@' ||print[i][j] == '*')
      {
        count++;
      }
    }
  }
  return count;
}


void extend_board(char mine[ROWS][COLS], char print[ROWS][COLS], int x, int y)//運(yùn)用遞歸擴(kuò)展周?chē)?
{   
  int n = 0;
  n = count_mine(mine, x, y); 
  if (n == 0)//當(dāng)該位置周?chē)讛?shù)為0時(shí)擴(kuò)展
  {
    print[x][y] = ' ';//擴(kuò)展的位置變?yōu)椤翱崭瘛贝蛴〕鰜?lái)
    if (mine[x - 1][y] == '0' && print[x - 1][y] == '@')
    {
      extend_board(mine, print, x - 1, y);//遞歸
    }
    if (mine[x + 1][y] == '0' && print[x + 1][y] == '@')
    {
      extend_board(mine, print, x + 1, y);
    }
    if (mine[x][y + 1] == '0' && print[x][y + 1] == '@')
    {
      extend_board(mine, print, x, y + 1);
    }
    if (mine[x - 1][y + 1] == '0' && print[x - 1][y + 1] == '@')
    {
      extend_board(mine, print, x - 1, y + 1);
    }
    if (mine[x + 1][y + 1] == '0' && print[x + 1][y + 1] == '@')
    {
      extend_board(mine, print, x + 1, y + 1);
    }
    if (mine[x][y - 1] == '0' && print[x][y - 1] == '@')
    {
      extend_board(mine, print, x, y - 1);
    }
    if (mine[x + 1][y - 1] == '0' && print[x + 1][y -1] == '@')
    {
      extend_board(mine, print, x + 1, y - 1);
    }
    if (mine[x - 1][y - 1] == '0' && print[x - 1][y - 1] == '@')
    {
      extend_board(mine, print, x - 1, y - 1);
    }
  }
  else 
     print[x][y] = n + '0'; 
} 

int find_mine(char mine[ROWS][COLS], char print[ROWS][COLS], int row, int col,int count)//排雷
{
  int x = 0;
  int y = 0;
  int number = 0;
  int ret = 0;
  while (1)
  {
    printf("輸入坐標(biāo)掃雷\n");
    scanf("%d%d", &x, &y);//玩家輸入掃雷的坐標(biāo)位置
    if ((x >= 1 && x <= row) && (y >= 1 && y <= col))//判斷輸入坐標(biāo)是否有誤,輸入錯(cuò)誤重新輸入
    {
      if (mine[x][y] == '0')//沒(méi)踩到雷
      {
        number++;//記錄掃雷的次數(shù)
        char ch = count_mine(mine, x, y);//數(shù)雷數(shù)
        print[x][y] = ch + '0';//數(shù)字對(duì)應(yīng)的ASCII值和數(shù)字字符對(duì)應(yīng)的ASCII值相差48,即'0'的ASCII值
        extend_board(mine, print, x, y);
    //   disp_board(mine, row, col);
        disp_board(print, row, col);
        if (count_print(print, row, col) == count)//剩余未掃位置=雷數(shù) 時(shí)勝利
        {
          return 0;
        }
        to_sign(print);//判斷是否標(biāo)記
        disp_board(print, row, col);
      }
      else if (mine[x][y] == '1')//踩到雷
      {
        if (ret == 0 && number == 0)
        {
          ret++;
          safe_mine(mine,print,x,y,row,col);
        }
        else
          return 1;
      }
    }
    else
    {
      printf("輸入錯(cuò)誤!請(qǐng)重新輸入\n");
    }
  }
}


void sign(char board[ROWS][COLS], int x, int y)//用‘*'標(biāo)記雷
{
  if (board[x][y] == '@')
  {
    board[x][y] = '*';
  }
}

void unsign(char board[ROWS][COLS], int x, int y)//取消標(biāo)記
{
  if (board[x][y] == '*')
  {
    board[x][y] = '@';
  }
}
void to_sign(char board[ROWS][COLS])//判斷是否標(biāo)記
{
  int chose_b = 0;
  int x = 0;
  int y = 0;
  printf("是否需要標(biāo)記/取消標(biāo)記:>\n(1.標(biāo)記 ;2.取消標(biāo)記 ;3.跳過(guò)該步驟) :>");
  scanf("%d", &chose_b);
  do{
    switch (chose_b)
    {
    case 1:
    {
         printf("請(qǐng)輸入需要標(biāo)記的位置坐標(biāo):>\n");
         scanf("%d%d", &x, &y);
         sign(board, x, y);
         break;
    }
    case 2:
    {
         printf("請(qǐng)輸入取消標(biāo)記的位置坐標(biāo):>\n");
         scanf("%d%d", &x, &y);
         unsign(board, x, y);
         break;
    }
    case 3:
    {
         printf("跳過(guò)此步驟。\n");
         chose_b = 0;
         break;
    }
    default:
    {     printf("輸入錯(cuò)誤!\n");
         chose_b = 0;
         break;
    }
    }
    chose_b = 0;
  } while (chose_b);
}

pro.c

#define _CRT_SECURE_NO_WARNINGS
#include "game.h"

void menu()
{
  printf("+---------------------------------+\n");
  printf("+   Welcome to 掃雷世界 !   +\n");
  printf("+     ο(=>ω<=)ρ⌒☆    +\n");
  printf("+      1、play        +\n");
  printf("+      0、exit        +\n");
  printf("+---------------------------------+\n");
}

void game()
{
  char mine[ROWS][COLS] = { 0 };
  char print[ROWS][COLS] = { 0 };
  int chose_m = 0;
  int ret = 0;
  printf("請(qǐng)選擇模式(1、簡(jiǎn)單 2、困難):>");//選擇游戲難易程度,產(chǎn)生不同大小的棋盤(pán)和雷數(shù)
  scanf("%d", &chose_m);
  switch (chose_m)
  {
  case 1:
  {   
         init_board(mine, ROWS, COLS, '0');//初始化雷盤(pán)
         init_board(print, ROWS, COLS, '@');
         set_mine(mine, _ROW, _COL, EASY_COUNT);//布雷
  //      disp_board(mine, _ROW, _COL);//打印雷盤(pán)
         disp_board(print, _ROW, _COL);
         int ret = find_mine(mine, print, _ROW, _COL, EASY_COUNT);//掃雷,踩到雷返回1,沒(méi)有踩到雷返回0
         while (1)//循環(huán)掃雷
         {
           if (ret == 0)//若返回0則勝利
           {
             disp_board(print, _ROW, _COL);
             printf("WOW~ YOU WIN!\n\n");
             break;
           }
          if (ret)//若返回1則失敗
           {
             disp_board(mine, _ROW, _COL);//打印雷盤(pán)
             printf("GAME OVER!\n");
             break;
           } 
           disp_board(print, _ROW, _COL);//打印玩家棋盤(pán)
         }
         break;
    }
    case 2:
    {
         init_board(mine, ROWS, COLS, '0');//初始化雷盤(pán)
         init_board(print, ROWS, COLS, '@');
         set_mine(mine, ROW, COL, HARD_COUNT);//布雷
    //    disp_board(mine, ROW, COL);//打印雷盤(pán)
         disp_board(print, ROW, COL);
         while (1)//循環(huán)掃雷
         {
           int ret = find_mine(mine, print, ROW, COL, HARD_COUNT);//掃雷,踩到雷返回1,沒(méi)有踩到雷返回0
           if (ret == 0)//若返回0勝利
           {
             disp_board(print, ROW, COL);
             printf("WOW~ YOU WIN!\n\n");
             break;
           }
           if (ret)//若返回1失敗
           {
             disp_board(mine, ROW, COL);//打印雷盤(pán)
             printf("GAME OVER!\n");
             break;
           }
           disp_board(print, ROW, COL);//打印玩家棋盤(pán)
         }
         break;
    }
    default:
    {
          printf("輸入錯(cuò)誤!\n");
          break;
    }
  }
}
void text()
{
  srand((unsigned int)time(NULL));//產(chǎn)生隨機(jī)值發(fā)生器
  int chose = 0;//選擇是否開(kāi)始游戲
  do
  {
    menu();//菜單
    printf("請(qǐng)選擇:>");
    scanf("%d", &chose);
    switch (chose)
    {
    case 1:
      game();//開(kāi)始游戲
      break;
    case 0:
      printf("退出游戲\n");
      break;
    default:
      printf("輸入錯(cuò)誤,沒(méi)有該選項(xiàng)\n");
      break;
    }
  } while (chose);
}
int main()
{
  text();
  system("pause");
  return 0;
}

游戲效果圖 

①開(kāi)始選擇菜單、難易模式選擇

②兩種難度掃雷
↓9×9雷盤(pán) 10顆雷
簡(jiǎn)單模式
↓16×16雷盤(pán) 40顆雷
困難模式
③演示標(biāo)記
標(biāo)記
標(biāo)記
④GAME OVER 玩家失敗演示
失敗
⑤WIN 玩家成功演示
成功

相關(guān)文章

  • c語(yǔ)言多進(jìn)程tcp服務(wù)器示例

    c語(yǔ)言多進(jìn)程tcp服務(wù)器示例

    這篇文章主要介紹了c語(yǔ)言多進(jìn)程tcp服務(wù)器示例,多進(jìn)程socket,epoll實(shí)現(xiàn)IO復(fù)用,需要的朋友可以參考下
    2014-03-03
  • C++ 讀取文件內(nèi)容到指定類(lèi)型的變量方法

    C++ 讀取文件內(nèi)容到指定類(lèi)型的變量方法

    今天小編就為大家分享一篇C++ 讀取文件內(nèi)容到指定類(lèi)型的變量方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • C++泛型模板約束深入講解

    C++泛型模板約束深入講解

    C/C++ 作為 C# 語(yǔ)言的前置版本,ECMA工業(yè)化編程語(yǔ)言,自然是存在 “泛型模板約束” 的功能的,只是本文不以 C/C++ 20 新語(yǔ)法搞出來(lái)的 “requires” 關(guān)鍵字來(lái)實(shí)現(xiàn),它很難用
    2022-09-09
  • C++中map容器的具體使用

    C++中map容器的具體使用

    本文主要介紹了C++中map容器的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 一文詳解C++中的mutable關(guān)鍵字

    一文詳解C++中的mutable關(guān)鍵字

    在C++中mutable關(guān)鍵字正如字面意思所示,表示「可變的」之意,一般在以下兩種情況中使用較多,一是修飾類(lèi)中的變量,用來(lái)突破const的限制,二是在Lambda表達(dá)式中使用,用來(lái)捕獲修改表達(dá)式之外的變量值,下面我們就針對(duì)這兩種使用場(chǎng)景逐個(gè)介紹
    2023-10-10
  • C語(yǔ)言練習(xí)題:求1到10的階乘之和簡(jiǎn)單實(shí)例

    C語(yǔ)言練習(xí)題:求1到10的階乘之和簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇C語(yǔ)言練習(xí)題:求1到10的階乘之和簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-05-05
  • C語(yǔ)言基礎(chǔ)雙指針移除元素解法

    C語(yǔ)言基礎(chǔ)雙指針移除元素解法

    這篇文章介紹了C語(yǔ)言基礎(chǔ)雙指針移除元素的解法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Java C++ 算法題解leetcode1582二進(jìn)制矩陣特殊位置

    Java C++ 算法題解leetcode1582二進(jìn)制矩陣特殊位置

    這篇文章主要為大家介紹了Java C++ 算法題解leetcode1582二進(jìn)制矩陣特殊位置示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • linux內(nèi)核select/poll,epoll實(shí)現(xiàn)與區(qū)別

    linux內(nèi)核select/poll,epoll實(shí)現(xiàn)與區(qū)別

    這篇文章主要介紹了linux內(nèi)核select/poll,epoll實(shí)現(xiàn)與區(qū)別,需要的朋友可以參考下
    2016-11-11
  • Mygui中文換行問(wèn)題解決方案

    Mygui中文換行問(wèn)題解決方案

    相信大家解決了中文輸入后一定會(huì)遇到如何解決中文輸入的問(wèn)題,中文輸入換行問(wèn)題是很多gui框架都存在的一個(gè)問(wèn)題,需要的朋友可以了解下
    2012-11-11

最新評(píng)論