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

C語言實(shí)現(xiàn)掃雷代碼

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

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

前言

掃雷實(shí)現(xiàn)的基本規(guī)劃:

1、玩家可以自由選擇進(jìn)入和退出游戲
2、玩家通過輸入坐標(biāo)來排雷
3、排查雷給出提示
4、玩家可以任意標(biāo)記雷區(qū)
5、排雷同時(shí)展開非雷區(qū)

下面為效果圖:

一、主函數(shù)(test.c):

通過do while嵌套switch對(duì)游戲菜單進(jìn)行控制:

  • 玩游戲輸入1:進(jìn)入case1開始游戲。
  • 輸入2:進(jìn)入case2退出游戲 。
  • 輸入錯(cuò)誤:進(jìn)入default,進(jìn)入下一次循環(huán)重新輸入。
  • 菜單給出標(biāo)記操作提示。
#include "game.h"
void menu()//游戲菜單
{
?? ?printf("**********************************\n");
?? ?printf("******* ? ? ?掃雷游戲 ? ? ********\n");
?? ?printf("******* ? ? ? 1.play ? ? ?********\n");
?? ?printf("******* ? ? ? 2.exit ? ? ?********\n");
?? ?printf("*******tip1:坐標(biāo)輸入 0 0 ?********\n");
?? ?printf("******* ? ?進(jìn)行標(biāo)記操作 ? ********\n");
?? ?printf("*******tip2:坐標(biāo)輸入 0 1 ?********\n");
?? ?printf("******* ? ?取消標(biāo)記操作 ? ********\n");
?? ?printf("**********************************\n");
}
void game()
{
?? ?//定義兩個(gè)棋盤,mine里面雷圖,'*'為雷,' '為非雷
?? ?//show里面-為未排雷區(qū)域,數(shù)字為周圍有幾顆雷
?? ?//空格區(qū)域表示安全區(qū)域,周圍沒有雷
?? ?char mine[ROWS][COLS] = { 0 };
?? ?char show[ROWS][COLS] = { 0 };
?? ?//初始化棋盤
?? ?init_board(mine, ROWS, COLS, ' ');
?? ?init_board(show, ROWS, COLS, '-');
?? ?//布置雷
?? ?set_mine(mine, ROW, COL);
?? ?Display_board(show, ROW, COL);//打印棋盤
?? ?//排查雷
?? ?find_mine(mine, show, ROW, COL);
}
int main()
{
?? ?int input = 0;
?? ?srand((unsigned int)time(NULL));
?? ?do
?? ?{
?? ??? ?menu();
?? ??? ?printf("請(qǐng)選擇:>");
?? ??? ?scanf("%d", &input);
?? ??? ?switch (input)
?? ??? ?{
?? ??? ?case 1:
?? ??? ??? ?printf("開始游戲\n");
?? ??? ??? ?game();
?? ??? ??? ?break;
?? ??? ?case 2:
?? ??? ??? ?printf("游戲結(jié)束\n");
?? ??? ??? ?break;
?? ??? ?default:
?? ??? ??? ?printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");
?? ??? ?}
?? ?} while (input != 2);
?? ?return 0;
}

二、頭文件及定義(game.h):

行數(shù)、列數(shù)、雷數(shù)可隨時(shí)更改

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ROW 9 //定義行數(shù)為9
#define COL 9 //定義列數(shù)為9
#define EASY_COUNT 10 //簡(jiǎn)單定義一下雷數(shù)

#define ROWS ROW+2
#define COLS COL+2


//初始化棋盤
void init_board(char arr[ROWS][COLS], int rows, int cols, char set);

//打印棋盤
void Display_board(char arr[ROWS][COLS], int row, int col);

//布置雷
void set_mine(char mine[ROWS][COLS], int row, int col);

//排查雷
void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

//標(biāo)記坐標(biāo)
void sign_show(char show[ROWS][COLS], int row, int col);

//刪除標(biāo)記坐標(biāo)
void del_sign_show(char show[ROWS][COLS], int row, int col);

三、game.c(游戲代碼實(shí)現(xiàn)全過程):

基本邏輯就是兩個(gè)棋盤:

1、mine棋盤為設(shè)雷棋盤,用來設(shè)置雷。
2、show棋盤給玩家看,打印信息給玩家。

#include "game.h"

//初始化棋盤
void init_board(char arr[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++)
?? ??? ?{
?? ??? ??? ?arr[i][j] = set;
?? ??? ?}
?? ?}
}

//打印棋盤
void Display_board(char arr[ROWS][COLS], int row, int col)
{
?? ?int i = 0;
?? ?int j = 0;
?? ?for (i = 0; i <= col; i++)
?? ?{
?? ??? ?printf(" %d ", i);
?? ??? ?if (i < col)
?? ??? ?{
?? ??? ??? ?printf("|");
?? ??? ?}
?? ?}
?? ?printf("\n");
?? ?for (i = 0; i <= col; i++)
?? ?{
?? ??? ?printf("---");
?? ??? ?if (i < col)
?? ??? ?{
?? ??? ??? ?printf("|");
?? ??? ?}
?? ?}
?? ?printf("\n");
?? ?for (i = 1; i <= row; i++)
?? ?{
?? ??? ?printf(" %d ", i);
?? ??? ?printf("|");
?? ??? ?for (j = 1; j <= col; j++)
?? ??? ?{
?? ??? ??? ?printf(" %c ", arr[i][j]);
?? ??? ??? ?if (j < col)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("|");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?printf("\n");
?? ??? ?if (i < row)
?? ??? ?{
?? ??? ??? ?for (j = 0; j <= col; j++)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("---");
?? ??? ??? ??? ?if (j < col)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?printf("|");
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?printf("\n");
?? ?}
?? ?printf("=======================================\n");
}

//布置雷
void set_mine(char mine[ROWS][COLS], int row, int col)
{
?? ?int count = EASY_COUNT;
?? ?int x = 0;
?? ?int y = 0;
?? ?while (count)
?? ?{
?? ??? ?x = rand() % row + 1;
?? ??? ?y = rand() % col + 1;
?? ??? ?if (mine[x][y] == ' ')
?? ??? ?{
?? ??? ??? ?mine[x][y] = '*';
?? ??? ??? ?count--;
?? ??? ?}
?? ?}
}

//排查雷
static int get_mine_count(char mine[ROWS][COLS], int x, int y)//查輸入坐標(biāo)周圍雷數(shù)
{
?? ?int i = 0;
?? ?int j = 0;
?? ?int count = 0;
?? ?for (i = x - 1; i <= x + 1; i++)
?? ?{
?? ??? ?for (j = y - 1; j <= y + 1; j++)
?? ??? ?{
?? ??? ??? ?if (mine[i][j] == '*')
?? ??? ??? ?{
?? ??? ??? ??? ?count++;
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?return count;
}
void spread_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y)//展開非雷區(qū)
{
?? ?int i = 0;
?? ?int j = 0;
?? ?for (i = x - 1; i <= x + 1; i++)
?? ?{
?? ??? ?for (j = y - 1; j <= y + 1; j++)
?? ??? ?{
?? ??? ??? ?if (i >= 1 && i <= ROW && j >= 1 && j <= COL)
?? ??? ??? ?{
?? ??? ??? ??? ?if (get_mine_count(mine, i, j) == 0 && show[i][j] == '-')
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?show[i][j] = ' ';
?? ??? ??? ??? ??? ?spread_mine(mine, show, i, j);
?? ??? ??? ??? ?}
?? ??? ??? ??? ?else if(get_mine_count(mine, i, j) != 0 && show[i][j] == '-')
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?int count = get_mine_count(mine, i, j);
?? ??? ??? ??? ??? ?show[i][j] = count + '0';
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
}
int is_win(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
?? ?int i = 0;
?? ?int j = 0;
?? ?int count = 0;
?? ?for (i = 1; i <= row; i++)
?? ?{
?? ??? ?for (j = 1; j <= col; j++)
?? ??? ?{
?? ??? ??? ?if (mine[i][j] != '*' && show[i][j] == '-')
?? ??? ??? ?{
?? ??? ??? ??? ?return 0;
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?return 1;
}
void sign_show(char show[ROWS][COLS], int row, int col)//標(biāo)記坐標(biāo)
{
?? ?int x = 0;
?? ?int y = 0;
?? ?printf("請(qǐng)選擇需要標(biāo)記的坐標(biāo):>");
?? ?while (1)
?? ?{
?? ??? ?scanf("%d %d", &x, &y);
?? ??? ?if (show[x][y] == '-')
?? ??? ?{
?? ??? ??? ?show[x][y] = '#';
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("輸入錯(cuò)誤,請(qǐng)重新輸入");
?? ??? ?}
?? ?}
}
void del_sign_show(char show[ROWS][COLS], int row, int col)//刪除標(biāo)記坐標(biāo)
{
?? ?int x = 0;
?? ?int y = 0;
?? ?printf("請(qǐng)選擇需要?jiǎng)h除標(biāo)記的坐標(biāo):>");
?? ?while (1)
?? ?{
?? ??? ?scanf("%d %d", &x, &y);
?? ??? ?if (show[x][y] == '#')
?? ??? ?{
?? ??? ??? ?show[x][y] = '-';
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("輸入錯(cuò)誤,請(qǐng)重新輸入");
?? ??? ?}
?? ?}
}
void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
?? ?int x = 0;
?? ?int y = 0;
?? ?while (1)
?? ?{
?? ??? ?printf("請(qǐng)輸入排雷的坐標(biāo):>");
?? ??? ?scanf("%d %d", &x, &y);
?? ??? ?if (show[x][y] != '-')
?? ??? ?{
?? ??? ??? ?printf("此坐標(biāo)已掃過,請(qǐng)重新輸入\n");
?? ??? ??? ?continue;
?? ??? ?}
?? ??? ?else if (x >= 1 && x <= row && y >= 1 && y <= col)
?? ??? ?{
?? ??? ??? ?if (mine[x][y] == '*')
?? ??? ??? ?{
?? ??? ??? ??? ?printf("很遺憾,你被炸死了\n");
?? ??? ??? ??? ?Display_board(mine, ROW, COL);
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?int count = get_mine_count(mine, x, y);
?? ??? ??? ??? ?if (count + '0' == '0')
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?show[x][y] = ' ';
?? ??? ??? ??? ??? ?spread_mine(mine, show, x, y);//展開非雷區(qū)
?? ??? ??? ??? ?}
?? ??? ??? ??? ?else
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?show[x][y] = count + '0';
?? ??? ??? ??? ?}
?? ??? ??? ??? ?Display_board(show, ROW, COL);
?? ??? ??? ?}
?? ??? ?}
?? ??? ?else if (x == 0 && y == 0)//輸入坐標(biāo)為兩個(gè)0時(shí)進(jìn)行標(biāo)記操作
?? ??? ?{
?? ??? ??? ?sign_show(show, row, col);//標(biāo)記坐標(biāo)
?? ??? ??? ?Display_board(show, ROW, COL);
?? ??? ?}
?? ??? ?else if (x == 0 && y == 1)//輸入坐標(biāo)為兩個(gè)0時(shí)進(jìn)行標(biāo)記操作
?? ??? ?{
?? ??? ??? ?del_sign_show(show, row, col);//刪除標(biāo)記
?? ??? ??? ?Display_board(show, ROW, COL);
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("輸入坐標(biāo)超出雷區(qū)范圍,請(qǐng)重新輸入\n");
?? ??? ?}
?? ??? ?if (is_win(mine,show,row,col)==1)
?? ??? ?{
?? ??? ??? ?printf("恭喜你,掃雷成功\n");
?? ??? ??? ?Display_board(mine, ROW, COL);
?? ??? ?}
?? ?}
}

總結(jié)

以上就是自寫C語言掃雷的代碼全部?jī)?nèi)容了:

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

相關(guān)文章

  • c++實(shí)現(xiàn)俄羅斯方塊游戲代碼

    c++實(shí)現(xiàn)俄羅斯方塊游戲代碼

    大家好,本篇文章主要講的是c++實(shí)現(xiàn)俄羅斯方塊游戲代碼,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C++中STL的優(yōu)先隊(duì)列priority_queue詳解

    C++中STL的優(yōu)先隊(duì)列priority_queue詳解

    這篇文章主要介紹了C++中STL的優(yōu)先隊(duì)列priority_queue詳解,今天講一講優(yōu)先隊(duì)列(priority_queue),實(shí)際上,它的本質(zhì)就是一個(gè)heap,我從STL中扒出了它的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2023-08-08
  • C/C++回調(diào)函數(shù)介紹

    C/C++回調(diào)函數(shù)介紹

    回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用為調(diào)用它所指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)
    2013-10-10
  • C++中的ilst使用以及模擬實(shí)現(xiàn)

    C++中的ilst使用以及模擬實(shí)現(xiàn)

    list是一個(gè)類模板,加<類型>實(shí)例化才是具體的類,可以在任意位置進(jìn)行插入和刪除的序列式容器,本文將通過代碼示例給大家介紹一下C++中的ilst使用以及模擬實(shí)現(xiàn),需要的朋友可以參考下
    2023-08-08
  • C++?std::thread?使用方法

    C++?std::thread?使用方法

    這篇文章主要介紹了C++?std::thread?如何使用,C++中的std::thread類提供了一種方便的多線程編程方式,在使用std::thread類時(shí),我們需要注意線程間的同步和通信問題,以確保多個(gè)線程之間的正確協(xié)同工作需要的朋友可以參考下
    2023-03-03
  • C語言堆實(shí)現(xiàn)建堆算法和堆排序

    C語言堆實(shí)現(xiàn)建堆算法和堆排序

    本文主要介紹了C語言堆實(shí)現(xiàn)建堆算法和堆排序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • C語言數(shù)組和指針的問題一道非常值得深思的筆試題

    C語言數(shù)組和指針的問題一道非常值得深思的筆試題

    今天小編就為大家分享一篇關(guān)于C語言數(shù)組和指針的問題一道非常值得深思的筆試題,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C語言練習(xí)題:自由落體的小球簡(jiǎn)單實(shí)例

    C語言練習(xí)題:自由落體的小球簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)硪黄狢語言練習(xí)題:自由落體的小球簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧
    2016-05-05
  • c++中將二維數(shù)組元素變換為逆向存放的實(shí)現(xiàn)代碼

    c++中將二維數(shù)組元素變換為逆向存放的實(shí)現(xiàn)代碼

    編程將一個(gè)二維數(shù)組元素變換為逆向存放,即按元素在內(nèi)存中的物理排列位置,第一個(gè)元素變成倒數(shù)第一個(gè)元素,第二個(gè)元素變成倒數(shù)第二個(gè)元素,依此類推
    2020-11-11
  • C語言實(shí)現(xiàn)全排列算法模板的方法

    C語言實(shí)現(xiàn)全排列算法模板的方法

    這篇文章主要介紹了C語言實(shí)現(xiàn)全排列算法模板的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評(píng)論

余江县| 昆明市| 河曲县| 塔河县| 霍邱县| 呈贡县| 荃湾区| 白河县| 交城县| 蓬安县| 迁安市| 宣城市| 息烽县| 宜君县| 饶河县| 道孚县| 贡嘎县| 托克托县| 紫阳县| 吉木乃县| 辽宁省| 内乡县| 左贡县| 常熟市| 洪湖市| 肥城市| 济阳县| 乐业县| 罗平县| 天门市| 鄂温| 无锡市| 鹿泉市| 墨玉县| 光泽县| 兴国县| 德阳市| 旌德县| 疏附县| 文水县| 休宁县|