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

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

 更新時間:2021年11月14日 13:50:05   作者:禿頭少年。  
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)簡易的掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言實現(xiàn)簡易的掃雷游戲的具體代碼,供大家參考,具體內(nèi)容如下

在正式講內(nèi)容之前先說一說掃雷游戲的規(guī)則

游戲規(guī)則很簡單,點擊方格,如果是地雷,游戲失敗,找到所有地雷游戲勝利

.剛開始需要碰運氣,只要點開一個區(qū)域,就可以正式開始了。

3.根據(jù)現(xiàn)有情況,判斷出一定有雷的位置。

4.進(jìn)一步計算,因為“2”右邊的“1”已經(jīng)有從屬的雷了,所以右邊的“2”的正下方?jīng)]有雷,因此可以判斷出左邊有兩顆雷,滿足兩個“2”。

5.紅圈表明的“1”已經(jīng)有一顆確定的雷了,這時只需要把鼠標(biāo)放在“1”上,按住右鍵不放,再點一下左鍵,“1”周圍的其他方塊就全被點開了。這個小技巧對于提升速度非常有幫助。

6.左上角的“1”旁邊必須有一顆雷,可能在紅圈圈住的兩個塊中,目前還無法確定。但是不論在兩個中的哪一個,都從屬于“3”,因此“3”周圍已經(jīng)有了三顆雷,“3”左下角的方塊可以確定沒有雷。

7.紅圈框住的位置肯定有一顆雷,因為“3”周圍必須有三顆雷。不論在兩個中的哪一個,都從屬于“3旁邊的“2”,這樣“2”就滿足兩顆雷的條件了。因此“2”左下角的塊是沒有雷的。

8.這樣一來,“3”下面的兩個塊可以確定都是有雷的。

9.把這些有雷的地方標(biāo)出來,就打開了一片新天地。

10.再根據(jù)現(xiàn)有的條件把確定有雷的地方表明,點開其他的地方。這時我們發(fā)現(xiàn)剛才左上角遺留的問題解決了。

11.重復(fù)上面的各種方法,不斷推理出,最后就能完成掃雷

好了,規(guī)則已經(jīng)講完了,現(xiàn)在來說一說怎么實現(xiàn)的吧:

首先還是得創(chuàng)建三個文件夾,分別為game.c 游戲需要的具體函數(shù)的實現(xiàn) game.h (所要用的頭文件)test.c(游戲的邏輯,菜單,以及函數(shù)順序調(diào)用)。

首先看一下test.c:

游戲大概的邏輯就是布置雷,把棋盤打印出來,然后玩家自己掃雷,這部分代碼不是很難理解

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void game()
{
 char mine[ROWS][COLS] = { 0 };//存放布置雷的信息 0無雷 1有雷
 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);
}
//游戲菜單界面
void menu()
{
 printf("************\n");
 printf("***1.開始***\n");
 printf("***0.退出***\n");
 printf("************\n");
}
//選擇玩或不玩
void test()
{
 int input = 0;   
 srand((unsigned int)time(NULL));
 do
 {
  menu();
  printf("請選擇->;");
  scanf_s("%d", &input);
  switch (input)
  {
  case 1:
   //掃雷
   game();
   break;
  case 0:
   printf("%d\n",input);
   printf("即將退出游戲\n");
   break;
  default:
   printf("輸入錯誤,請重新輸入:\n");
   break;
  }
 } while (input);
}
int main(void)
{
 test();
 return 0;
}

接下來是game.h:

我將所使用到的函數(shù)和代碼段都寫入了代碼里應(yīng)該不難理解

#pragma once
#include<stdio.h>
#include<time.h>
#include<Windows.h>
 
#define ROW 9//打印出來的棋盤大小
#define COL 9//打印出來的棋盤大小
 
#define ROWS ROW+2//實際棋盤大小,為了防止越界
#define COLS COL+2//實際棋盤大小,為了防止越界
 
#define EASY_COUNT 10//簡單模式10個雷然后根據(jù)自己的需要調(diào)整大小
 
//初始化棋盤
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
//打印棋盤
void DisplayBoard(char mine[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);

接下來是game.c:

掃雷游戲有一個功能是,點開一個位置,如果周圍都沒有雷的話就會展開那一片,我們這里用遞歸來實現(xiàn):

//將棋盤展開的函數(shù)
void Open(char mine[ROWS][COLS], char show[ROWS][COLS],int x,int y)
{
 int n = get_mine_count(mine, x, y);
 if (n != 0)
 {
  show[x][y] = '0' + n;
 }
 else if (show[x][y] != ' ')
 {
  show[x][y] = ' ';
  int i = 0;
  for (i = x - 1; i <= x + 1; i++)
  {
   int j = 0;
   for (j = y - 1; j <= y + 1; j++)
   {
    Open(mine, show, i, j);
   }
  }
 }
 else
 {
  return;
 }
}

完整代碼:

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
//初始化棋盤:全部為'*'
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
 int i = 0;
 int j = 0;
 for (i = 0; i < rows; i++)
 {
  for (j = 0; j < cols; j++)
  {
   board[i][j] = set;
  }
 }
}
// 顯示應(yīng)該給用戶顯示的界面‘*'
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
 int i = 0;
 int j = 0;
 for (i = 0; i <= row; i++)
 {
  printf("%d|", i);
 }
 printf("\n");
 for (i = 0; i < 10; i++)
 {
  printf("-|");
 }
 printf("\n");
 for (i = 1; i <= row; i++)
 {
  printf("%d|", i );
  for (j = 1; j <= col; j++)
  {
   printf("%c|", board[i][j]);
  }
  printf("\n");
  for (j = 0; j <col+1; j++)
  {
   printf("-|");
 
  }
  printf("\n");
 }
}
void SetMine(char board[ROWS][COLS], int row, int col)
{
 int count = EASY_COUNT;
 while (count)
 {
  int x = rand() % row + 1;
  int y = rand() % col + 1;
  if (board[x][y] == '0')
  {
   board[x][y] = '1';
   count--;
  }
 }
}
static int get_mine_count(char mine[ROWS][COLS], int x, int y)
{
 return mine[x + 1][y] +
  mine[x - 1][y] +
  mine[x][y + 1] +
  mine[x][y - 1] +
  mine[x - 1][y - 1] +
  mine[x - 1][y + 1] +
  mine[x + 1][y - 1] +
  mine[x + 1][y + 1] -
  8 * '0';
}
//將棋盤展開的函數(shù)
void Open(char mine[ROWS][COLS], char show[ROWS][COLS],int x,int y)
{
 int n = get_mine_count(mine, x, y);
 if (n != 0)
 {
  show[x][y] = '0' + n;
 }
 else if (show[x][y] != ' ')
 {
  show[x][y] = ' ';
  int i = 0;
  for (i = x - 1; i <= x + 1; i++)
  {
   int j = 0;
   for (j = y - 1; j <= y + 1; j++)
   {
    Open(mine, show, i, j);
   }
  }
 }
 else
 {
  return;
 }
}
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
 int x = 0;
 int y = 0;
 while (1)
 {
  printf("請輸入你要查詢的坐標(biāo)->");
  scanf("%d%d", &x, &y);
  Sleep(500);
  if (x >= 1 && x <= row && y >= 1 && y <= col)
  {
   if ('1' == mine[x][y])
   {
    printf("很遺憾,你無了\n");
    Sleep(500);
    DisplayBoard(mine, row, col);
    break;
   }
   else
   {
    //計算坐標(biāo)x,y周圍有幾個雷
    Open(mine,show,x,y);
    DisplayBoard(show, row, col);
   }
  }
  else
  {
   printf("輸入坐標(biāo)非法,無法排雷,請重新輸入\n");
  }
 
  int i = 0;
  int j = 1;
  int flag = 0;
  for (i = 1; i <= row; i++)
  {
   for (j = 1; j <= col; j++)
   {
    if (show[i][j] == '*')
    {
     flag++;
    }
   }
  }
  if (flag == EASY_COUNT)//棋盤全部展開后掃描玩家找的雷的個數(shù)是否復(fù)合實際雷的個數(shù)
  {
   printf("恭喜你,你贏了!\n");
   DisplayBoard(mine, row, col);
   break;
  }
 }
 
 
}

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

相關(guān)文章

  • C語言實現(xiàn)餐飲管理系統(tǒng)

    C語言實現(xiàn)餐飲管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)餐飲管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++進(jìn)一步認(rèn)識類與對象

    C++進(jìn)一步認(rèn)識類與對象

    類是創(chuàng)建對象的模板,一個類可以創(chuàng)建多個對象,每個對象都是類類型的一個變量;創(chuàng)建對象的過程也叫類的實例化。每個對象都是類的一個具體實例(Instance),擁有類的成員變量和成員函數(shù)
    2021-10-10
  • 學(xué)習(xí)C和C++的9點經(jīng)驗總結(jié)

    學(xué)習(xí)C和C++的9點經(jīng)驗總結(jié)

    本文給大家總結(jié)了一下我們在學(xué)習(xí)C和C++的時候的一些經(jīng)驗和需要注意的事項,希望能給大家一些幫助,少走些彎路
    2015-12-12
  • C++基礎(chǔ)知識之運算符重載詳解

    C++基礎(chǔ)知識之運算符重載詳解

    這篇文章主要為大家詳細(xì)介紹了C++基礎(chǔ)知識之運算符重載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++11 并發(fā)指南之std::mutex詳解

    C++11 并發(fā)指南之std::mutex詳解

    這篇文章主要介紹了C++11 并發(fā)指南之std::mutex詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語言基礎(chǔ)知識點指針的使用

    C語言基礎(chǔ)知識點指針的使用

    這篇文章主要介紹了C語言基礎(chǔ)知識點指針的使用,下面文章將讓我們掌握指針的概念和用法、指針與數(shù)組之間的關(guān)系、指針指向的指針、如何使用指針變量做函數(shù)參數(shù)等更多相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • C/C++ Qt TreeWidget 嵌套節(jié)點操作使用

    C/C++ Qt TreeWidget 嵌套節(jié)點操作使用

    本文主要介紹了TreeWidget的如何使用,實現(xiàn)對樹形框多節(jié)點的各種操作,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Linux vmstat命令實戰(zhàn)詳細(xì)解析

    Linux vmstat命令實戰(zhàn)詳細(xì)解析

    這個命令是我查看Linux/Unix最喜愛的命令,一個是Linux/Unix都支持,二是相比top,我可以看到整個機(jī)器的CPU,內(nèi)存,IO的使用情況,而不是單單看到各個進(jìn)程的CPU使用率和內(nèi)存使用率(使用場景不一樣)
    2013-09-09
  • C語言實現(xiàn)控制臺掃雷小游戲

    C語言實現(xiàn)控制臺掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)控制臺掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • c++如何控制對象的創(chuàng)建方式(禁止創(chuàng)建棧對象or堆對象)和創(chuàng)建的數(shù)量

    c++如何控制對象的創(chuàng)建方式(禁止創(chuàng)建棧對象or堆對象)和創(chuàng)建的數(shù)量

    這篇文章主要介紹了c++如何控制對象的創(chuàng)建方式和創(chuàng)建的數(shù)量,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08

最新評論

仪征市| 斗六市| 枣强县| 武汉市| 望谟县| 江门市| 长葛市| 鲁甸县| 阳山县| 阿克苏市| 砀山县| 阿坝| 哈巴河县| 汾西县| 隆子县| 博湖县| 南漳县| 容城县| 揭阳市| 孙吴县| 乐至县| 舒兰市| 仁化县| 无棣县| 天台县| 弥渡县| 阳城县| 汕尾市| 古浪县| 扬州市| 江安县| 玉田县| 平潭县| 武清区| 修武县| 鸡东县| 大港区| 五常市| 蒙城县| 临颍县| 舞钢市|