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

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

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

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <time.h>
/*
 用 C 語言寫一個簡單的掃雷游戲
*/
// 1.寫一個游戲菜單 Menu()
// 2.開始游戲
 // 1.初始化二維數(shù)組 Init_Interface()
 // 2.打印游戲界面 Print_Interface()
 // 3.玩家掀起指定位置 Play() --> 指定輸入坐標(biāo)(判斷合法性)
 // 1.判斷該位置是否是雷
 // 2.判斷是否掀掉所有空地
 // 3.如果掀開的是空地,則判斷該空地周圍是否有雷
 // 1.如果周圍有雷,則統(tǒng)計(jì)周圍雷的個數(shù)
 // 2.如果周圍沒有雷,則掀開周圍除了雷的所有空地,并且統(tǒng)計(jì)所掀開空地周圍雷的個數(shù)
 // 4.更新地圖
 // 5.繼續(xù) 3 的循環(huán)

//定義全局變量:
//定義掃雷地圖的長和寬
#define MAX_ROW 9
#define MAX_COL 9
//定義默認(rèn)的雷數(shù)
#define DEFAULT_MINE 9
//定義兩個二維數(shù)組,分別存放初始地圖和雷陣
char show_map[MAX_ROW + 2][MAX_COL + 2];
char mine_map[MAX_ROW + 2][MAX_COL + 2];

//寫一個游戲菜單
int Menu() {
 printf("=========\n");
 printf("1.開始游戲\n");
 printf("0.結(jié)束游戲\n");
 printf("=========\n");
 printf("請選擇游戲菜單選項(xiàng):");
 int choice = 0;
 while (1) {
 scanf("%d", &choice);
 if (choice != 0 && choice != 1) {
 printf("您的輸入有誤, 請重新輸入\n");
 continue;
 }
 break;
 }
 return choice;
}

//開始游戲
//初始化數(shù)組
void Init_Interface() {
 for (int row = 0; row < MAX_ROW + 2; row++) {
 for (int col = 0; col < MAX_COL + 2; col++) {
 show_map[row][col] = '*';
 }
 }
 for (int row = 0; row < MAX_ROW + 2; row++) {
 for (int col = 0; col < MAX_COL + 2; col++) {
 mine_map[row][col] = '0';
 }
 }
 int mine_count = DEFAULT_MINE;
 while (mine_count > 0) {
 int row = rand() % MAX_ROW + 1;
 int col = rand() % MAX_COL + 1;
 if (mine_map[row][col] == '1') { //將雷設(shè)置為 1
 //此處已經(jīng)有雷
 continue;
 }
 mine_count--;
 mine_map[row][col] = '1';
 }
}
//打印初始界面
void Print_Interface(char map[MAX_ROW + 2][MAX_COL + 2]) {
 printf(" ");
 for (int col = 1; col <= MAX_COL; col++) {
 printf("%d ", col);
 }
 printf("\n ");
 for (int col = 1; col <= MAX_COL; col++) {
 printf("--");
 }
 printf("\n");
 for (int row = 1; row <= MAX_ROW ; row++) {
 printf("%02d |", row);
 for (int col = 1; col <= MAX_COL; col++) {
 printf("%c ", map[row][col]);
 }
 printf("\n");
 }
}
//寫一個統(tǒng)計(jì)周圍雷數(shù)個數(shù)的函數(shù)
int Around_Mine_count(int row, int col) {
 return (mine_map[row - 1][col - 1] - '0'
 + mine_map[row - 1][col] - '0'
 + mine_map[row - 1][col + 1] - '0'
 + mine_map[row][col - 1] - '0'
 + mine_map[row][col + 1] - '0'
 + mine_map[row + 1][col - 1] - '0'
 + mine_map[row + 1][col] - '0'
 + mine_map[row + 1][col + 1] - '0');
}
//寫一個判斷該位置周圍是否有雷的函數(shù)
int No_Mine(int row, int col) {
 if (Around_Mine_count(row, col) == 0) {
 return 1;
 }
 return 0;
}
//寫一個掀開該位置周圍空地的函數(shù)
void Open_Blank(int row, int col) {
 show_map[row - 1][col - 1] = '0' + Around_Mine_count(row - 1, col - 1);
 show_map[row - 1][col] = '0' + Around_Mine_count(row - 1, col);
 show_map[row - 1][col + 1] = '0' + Around_Mine_count(row - 1, col + 1);
 show_map[row][col - 1] = '0' + Around_Mine_count(row, col - 1);
 show_map[row][col + 1] = '0' + Around_Mine_count(row, col + 1);
 show_map[row + 1][col - 1] = '0' + Around_Mine_count(row + 1, col - 1);
 show_map[row + 1][col] = '0' + Around_Mine_count(row + 1, col);
 show_map[row + 1][col + 1] = '0' + Around_Mine_count(row + 1, col + 1);
}
//寫一個判斷游戲結(jié)束的函數(shù)
int Success_Sweep(char show_map[MAX_ROW + 2][MAX_COL + 2]) {
 int count = 0;
 for (int row = 1; row <= MAX_ROW; row++) {
 for (int col = 1; col <= MAX_COL; col++) {
 if (show_map[row][col] == '*') {
 count++;
 }
 }
 }
 if (count == DEFAULT_MINE) {
 return 1;
 }
 return 0;
}
//開始游戲
void StartGame() {
 while (1) {
 printf("請輸入您要掀開的坐標(biāo):");
 int row = 0;
 int col = 0;
 while (1) {
 scanf("%d %d", &row, &col);
 if (row < 1 || row > MAX_ROW || col < 1 || col > MAX_COL) {
 printf("您的輸入有誤,請重新輸入!\n");
 continue;
 }
 if (show_map[row][col] != '*') {
 printf("該位置已被掀開,請重新選擇\n");
 continue;
 }
 break;
 }
 //判斷該地方是否有雷
 if (mine_map[row][col] == '1') {
 Print_Interface(mine_map);
 printf("該地方有雷,游戲結(jié)束!!!\n");
 break;
 }
 if (No_Mine(row, col)) {
 show_map[row][col] = '0';
 Open_Blank(row, col);
 }
 show_map[row][col] = '0' + Around_Mine_count(row, col);
 //判斷是否掀開所有空地
 if (Success_Sweep(show_map) == 1) {
 Print_Interface(mine_map);
 printf("您已成功掃雷!!!\n");
 break;
 }
 system("cls");
 //更新地圖
 Print_Interface(show_map);
 }
}

int main() {
 if (Menu() == 0) {
 exit(0);
 }
 srand((unsigned int)time(NULL));
 Init_Interface();
 Print_Interface(show_map);
 StartGame();

 system("pause");
 return 0;
}

效果圖:

數(shù)字代表周圍雷的個數(shù)

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

相關(guān)文章

  • C++實(shí)現(xiàn)二叉樹非遞歸遍歷算法詳解

    C++實(shí)現(xiàn)二叉樹非遞歸遍歷算法詳解

    在C++中,二叉樹非遞歸遍歷是一種常用的算法,可避免遞歸過程中的系統(tǒng)開銷和棧溢出問題。非遞歸遍歷算法利用棧數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),可以實(shí)現(xiàn)前序、中序和后序遍歷,是C++程序員必備技能之一
    2023-04-04
  • 函數(shù)指針的強(qiáng)制類型轉(zhuǎn)換實(shí)現(xiàn)代碼

    函數(shù)指針的強(qiáng)制類型轉(zhuǎn)換實(shí)現(xiàn)代碼

    函數(shù)指針的強(qiáng)制類型轉(zhuǎn)換實(shí)現(xiàn)代碼。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C++的靜態(tài)聯(lián)編和動態(tài)聯(lián)編詳解

    C++的靜態(tài)聯(lián)編和動態(tài)聯(lián)編詳解

    這篇文章主要介紹了C++的靜態(tài)聯(lián)編和動態(tài)聯(lián)編詳解,對于深入理解C++編譯運(yùn)行原理有很大幫助,需要的朋友可以參考下
    2014-07-07
  • C++貪心算法實(shí)現(xiàn)馬踏棋盤

    C++貪心算法實(shí)現(xiàn)馬踏棋盤

    這篇文章主要為大家詳細(xì)介紹了C++貪心算法實(shí)現(xiàn)馬踏棋盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 深入理解c/c++ 內(nèi)存對齊

    深入理解c/c++ 內(nèi)存對齊

    這篇文章主要介紹了c/c++ 內(nèi)存對齊,有需要的朋友可以參考一下
    2014-01-01
  • 程序員都不知道C語言中的這些小細(xì)節(jié)

    程序員都不知道C語言中的這些小細(xì)節(jié)

    本文通過7到實(shí)例題目給大家展示C語言中的一些小細(xì)節(jié),很少有朋友真正的掌握,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • c語言++放在前面和后面的區(qū)別分析

    c語言++放在前面和后面的區(qū)別分析

    在C語言中,前綴自增(++i)和后綴自增(i++)操作符并不是同一個操作符,前綴自增操作符的優(yōu)先級高于后綴自增,同時得到的結(jié)果并不完全一致,因此需要區(qū)分
    2015-11-11
  • C++ 在堆上開辟與釋放二維、三維指針詳細(xì)解析

    C++ 在堆上開辟與釋放二維、三維指針詳細(xì)解析

    一維指針其實(shí)就相當(dāng)于一維數(shù)組,不用去看書上所說的數(shù)組在內(nèi)存中的首地址這些晦澀的話,以此類推 二維指針就相當(dāng)于二維數(shù)組,新手對一維數(shù)組的開辟與釋放比較容易熟悉
    2013-09-09
  • C++簡單實(shí)現(xiàn)shared_ptr的代碼

    C++簡單實(shí)現(xiàn)shared_ptr的代碼

    智能指針用于資源管理,為了保證資源的操作得到順利的執(zhí)行防止資源泄露,因此大多數(shù)實(shí)現(xiàn)都以noexcept在參數(shù)列表后聲明為不拋出異常,這篇文章主要介紹了C++簡單實(shí)現(xiàn)shared_ptr的代碼,需要的朋友可以參考下
    2022-09-09
  • OpenCV實(shí)現(xiàn)雙邊濾波算法

    OpenCV實(shí)現(xiàn)雙邊濾波算法

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)雙邊濾波算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論