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

C語言實(shí)現(xiàn)簡單掃雷游戲

 更新時(shí)間:2020年02月07日 10:29:56   作者:ZD_free  
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

步驟

1.首先打印游戲選擇菜單
2.地圖及初始化
1)、展示給玩家的地圖(show_map)
2)、地雷的圖(mine_map可知地雷的位置)
3.打印地圖
4.用戶輸入坐標(biāo),并檢查坐標(biāo)的合理性
5.判斷當(dāng)前位置是否有地雷,沒有則出現(xiàn)數(shù)字(表示周圍格子中有幾個(gè)地雷)
6.打印新的地圖
7.重復(fù)3~6步驟,直到踩雷游戲結(jié)束,或勝利。
8重新繼續(xù)游戲或退出!

代碼

主函數(shù)及游戲選擇菜單

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
 
#define ROW 9
#define COL 9
#define COUNT 10 //地雷個(gè)數(shù)
 
int menu()
{
 printf("*************************\n");
 printf("****** 1.play ******\n");
 printf("****** 0.exit ******\n");
 printf("*************************\n");
 printf("請選擇:>");
 int choice = 0;
 scanf("%d", &choice);
 return choice;
}
 
int main()
{
 int choice = 0;
 srand((unsigned int)time(NULL));
 while (1)
 {
 choice = menu();
 if (choice == 1)
 {
 game();
 }
 else if (choice == 0)
 {
 printf("goodbye!\n");
 break;
 }
 else
 {
 printf("輸入有誤,請重新輸入!\n");
 }
 }
 
 system("pause");
 return 0;
} 

~ 進(jìn)入游戲

1.創(chuàng)建兩個(gè)二維數(shù)組;2.對兩個(gè)二維數(shù)組進(jìn)行初始化;3.打印地圖;4.讓用戶輸入一組坐標(biāo);5.判定是否踩雷;6.判斷游戲是否勝利;7.更新地圖,把當(dāng)前位置變成一個(gè)數(shù)字(數(shù)字為周圍格子里地雷個(gè)數(shù))

void game()
{
 //1.創(chuàng)建兩個(gè)二維數(shù)組
 char show_map[ROW][COL];
 char mine_map[ROW][COL];
 //2.對兩個(gè)二維數(shù)組進(jìn)行初始化
 Init(show_map, mine_map); 
 int blank_count = 0;
 while (1)
 {
 PrintMap(mine_map);//為了方便調(diào)試,臨時(shí)打印mine_map
 printf("\n");
 
 //3.打印地圖
 PrintMap(show_map);
 //4.讓用戶輸入一組坐標(biāo)
 printf("請輸入坐標(biāo):>");
 int i = 0;
 int j = 0;
 scanf("%d %d", &i, &j);
 if (i < 0 || i >= ROW || j < 0 || j >= COL)
 {
 printf("輸入有誤,請重新輸入!\n");
 continue;
 }
 if (show_map[i][j] != '*')
 {
 //這個(gè)位置已經(jīng)被翻開
 printf("輸入的位置已被翻開,請重新輸入!\n");
 continue;
 }
 //5.判定是否踩雷
 if (mine_map[i][j] == '1')
 {
 //踩雷了,提示游戲結(jié)束
 PrintMap(mine_map);
 printf("游戲結(jié)束!\n");
 break;
 }
 blank_count++;
 //6.游戲是否勝利
 if (blank_count == ROW * COL - COUNT)
 {
 printf("恭喜你,掃雷成功!\n");
 break;
 }
 //7.更新地圖,把當(dāng)前位置變成一個(gè)數(shù)字
 UpdateShowMa(show_map, mine_map, i, j);
 }
}

初始化地圖

void Init(char show_map[ROW][COL], char mine_map[ROW][COL])
{
 //1.show_map 全部初始化為 *
 for (int i = 0; i < ROW; i++)
 {
 for (int j = 0; j < COL; j++)
 {
 show_map[i][j] = '*';
 }
 }
 //2.mine_map初始化
 for (int i = 0; i < ROW; i++)
 {
 for (int j = 0; j < COL; j++)
 {
 mine_map[i][j] = '0';
 }
 }
 //3.隨機(jī)生成10個(gè)位置作為地雷
 int mine_count = COUNT;
 while (mine_count > 0)
 {
 //生成隨機(jī)坐標(biāo)
 int i = rand() % ROW;
 int j = rand() % COL;
 if (mine_map[i][j] == '1')
 {
 continue;
 }
 mine_map[i][j] = '1';
 --mine_count;
 }
}

打印地圖

void PrintMap(char map[ROW][COL])
{
 //1.先打印第一行(坐標(biāo))
 printf(" |");
 for (int j = 0; j < COL; j++)
 {
 printf(" %d", j);
 }
 printf("\n");
 //2.打印一行分隔符
 for (int j = 0; j < COL; j++)
 {
 printf("---");
 }
 printf("\n");
 //3.按照每行來分別打印
 for (int i = 0; i < ROW; i++)
 {
 printf(" %d|", i);
 for (int j = 0; j < COL; j++)
 {
 printf(" %c", map[i][j]);
 }
 printf("\n");
 }
}

判斷落子周圍格子地雷的個(gè)數(shù)

void UpdateShowMa(char show_map[ROW][COL], char mine_map[ROW][COL], int i, int j)
{
 //判定當(dāng)前位置(i,j),周圍8個(gè)格子有幾個(gè)雷
 int count = 0;
 if (i - 1 >= 0 && j - 1 >= 0 && mine_map[i - 1][j - 1] == '1')
 { 
 count++;
 }
 if (i - 1 >= 0 && mine_map[i - 1][j] == '1')
 {
 count++;
 }
 if (i - 1 >= 0 && j + 1 < COL && mine_map[i - 1][j + 1] == '1')
 {
 count++;
 }
 if (j - 1 >= 0 && mine_map[i][j - 1] == '1')
 {
 count++;
 }
 if (j + 1 < COL && mine_map[i][j + 1] == '1')
 {
 count++;
 }
 if (i + 1 < ROW && j - 1 >= 0 && mine_map[i + 1][j - 1] == '1')
 {
 count++;
 }
 if (i + 1 < ROW && mine_map[i + 1][j] == '1')
 {
 count++;
 }
 if (i + 1 < ROW && j + 1 < COL && mine_map[i + 1][j + 1] == '1')
 {
 count++;
 }
 //count 里面的值就已經(jīng)是周圍雷的個(gè)數(shù)了
 show_map[i][j] = count + '0';
}

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

相關(guān)文章

  • QT應(yīng)用啟動失敗排查方法小結(jié)

    QT應(yīng)用啟動失敗排查方法小結(jié)

    啟動QT應(yīng)用經(jīng)常會碰到應(yīng)用啟動失敗,qt platform plugin無法啟動,本文就來介紹一下QT應(yīng)用啟動失敗排查方法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解以下
    2023-09-09
  • 如何使用C++獲取指定的重載函數(shù)地址

    如何使用C++獲取指定的重載函數(shù)地址

    重載函數(shù)是完全不同的幾個(gè)函數(shù),有不同的函數(shù)地址,下面這篇文章主要給大家介紹了關(guān)于如何使用C++獲取指定的重載函數(shù)地址的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • C語言fillpoly函數(shù)詳解

    C語言fillpoly函數(shù)詳解

    在C語言中,fillpoly函數(shù)的功能是畫一個(gè)多邊形,并且把多邊形填充。填充邊框所定義的多邊形的內(nèi)部。fillpoly 函數(shù)的用法:void far fillpoly(int numpoints, int far *polypoints);。
    2015-10-10
  • 基于C++實(shí)現(xiàn)五子棋AI算法思想

    基于C++實(shí)現(xiàn)五子棋AI算法思想

    這篇文章主要為大家詳細(xì)介紹了基于C++實(shí)現(xiàn)五子棋AI算法思想,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C++繼承的賦值轉(zhuǎn)換與菱形虛擬繼承深入詳解

    C++繼承的賦值轉(zhuǎn)換與菱形虛擬繼承深入詳解

    今天我要給大家介紹C++中更深入的內(nèi)容了,C++繼承的賦值轉(zhuǎn)換與菱形虛擬繼承。C++這門語言為了使代碼不冗余,做了些什么操作呢?C++的繼承就很好地實(shí)現(xiàn)了類層次的代碼復(fù)用,今天我就要來和大家好好聊一聊它了
    2022-08-08
  • C++異常使用詳解(看這一篇就夠了)

    C++異常使用詳解(看這一篇就夠了)

    C++中的異常是指在程序執(zhí)行過程中發(fā)生錯(cuò)誤,導(dǎo)致程序無法正常運(yùn)行的情況,下面這篇文章主要給大家介紹了關(guān)于C++異常使用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • C/C++中的atan和atan2函數(shù)實(shí)例用法

    C/C++中的atan和atan2函數(shù)實(shí)例用法

    在本篇文章里小編給大家分享的是一篇關(guān)于C/C++中的atan和atan2函數(shù)實(shí)例用法相關(guān)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • C語言實(shí)現(xiàn)學(xué)生打卡系統(tǒng)

    C語言實(shí)現(xiàn)學(xué)生打卡系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)生打卡系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語言小游戲之小熊跳板功能的實(shí)現(xiàn)

    C語言小游戲之小熊跳板功能的實(shí)現(xiàn)

    這篇文章主要介紹了C語言小游戲之小熊跳板功能的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • C++數(shù)據(jù)封裝以及定義結(jié)構(gòu)的詳細(xì)講解

    C++數(shù)據(jù)封裝以及定義結(jié)構(gòu)的詳細(xì)講解

    這篇文章主要詳細(xì)講解了C++數(shù)據(jù)封裝以及定義結(jié)構(gòu),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評論

微山县| 红原县| 卢龙县| 高邑县| 通海县| 宁国市| 旬邑县| 密云县| 黄梅县| 井陉县| 临沂市| 大埔区| 阜宁县| 汶川县| 沅江市| 织金县| 开江县| 合川市| 大同县| 中牟县| 东乌珠穆沁旗| 吴桥县| 黔南| 田林县| 西华县| 吉安市| 沁水县| 华宁县| 乐清市| 谢通门县| 浪卡子县| 永泰县| 米易县| 贵南县| 大洼县| 郴州市| 察隅县| 大厂| 东乌珠穆沁旗| 枣阳市| 沙坪坝区|