C語言實(shí)現(xiàn)簡(jiǎn)單的掃雷游戲操作
掃雷小游戲的代碼實(shí)現(xiàn),供大家參考,具體內(nèi)容如下

編譯器使用的為VS2013
代碼分為三個(gè)部分
1、頭文件 game.h
2、源文件 game.c 用來存放游戲中所有的函數(shù)
3、源文件 test.c 用來存放游戲的主題部分
代碼如下:
game.h部分
#include<stdio.h> #include<time.h> #include<stdlib.h> #define EASY_COUNT 5 //存放雷的個(gè)數(shù),此處為5,可任意改變 #define ROW 5 //行 #define COL 5 //列 #define ROWS ROW+2 #define COLS COL+2 //初始化棋盤,將雷設(shè)計(jì)成字符‘1' ,注意不是數(shù)字1,沒有雷設(shè)計(jì)成字符‘0',此處設(shè)計(jì)是為后續(xù)統(tǒng)計(jì)雷的個(gè)數(shù)做鋪墊 void InitBoard(char board[ROWS][COLS], int rows, int cols, char set); //打印棋盤 void DisplayBoard(char board[ROWS][COLS], int row, int col); //對(duì)雷進(jìn)行布置 void SetMine(char mine[ROWS][COLS], int row, int col, int count); //排雷 void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
game.c部分
#include "game.h"
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
int i = 0;
for (i = 1; i <= rows - 2; i++)
{
int j = 0;
for (j = 1; j <= cols - 2; j++)
{
board[i][j] = set;
}
}
}
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
int i = 0;
printf("----------掃雷游戲----------\n");
for (i = 0; i <= col; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= row; i++)
{
int j = 0;
printf("%d ", i);
for (j = 1; j <= col; j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
printf("----------掃雷游戲----------\n");
}
void SetMine(char mine[ROW][COL], int row, int col, int count)
{
while (count)
{
int x = rand() % row + 1;
int y = rand() % col + 1;
if (mine[x][y] == '0')
{
//x,y坐標(biāo)出沒有雷
mine[x][y] = '1';
count--;
}
}
}
int GetMineCount(char mine[ROWS][COLS], int x, int y)//統(tǒng)計(jì)雷時(shí),只需將該坐標(biāo)周圍的8個(gè)位置坐標(biāo)是否有雷計(jì)算一下即可,有就加字符‘1',沒有加字符‘0'等同于不加
{
int i = 0;
int count = 0;
for (i = x - 1; i <= x + 1; i++)
{
int j = 0;
for (j = y - 1; j <= y + 1; j++)
{
if (mine[i][j] == '1')
{
count++;
}
}
}
return count;
}
//對(duì)雷的情況進(jìn)行排查
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
int win = 0;
while (win < row * col - EASY_COUNT)
{
int x;
int y;
printf("請(qǐng)輸入要排查的坐標(biāo):");
scanf("%d%d", &x, &y);
// 1.先判斷坐標(biāo)是否非法,即可能出現(xiàn)的越界行為
// 2.坐標(biāo)合法,判斷該處坐標(biāo)是不是雷,如果是,則游戲結(jié)束
if (x >= 1 && x <= row &&y >= 1 && y <= col)
{
if (mine[x][y] == '1')
{
printf("很遺憾,你被炸死了?。?!\n");
DisplayBoard(mine, row, col);
break;
}
else //坐標(biāo)合法時(shí),且該坐標(biāo)不是雷時(shí),統(tǒng)計(jì)該坐標(biāo)處雷的個(gè)數(shù)
{
int count = GetMineCount(mine, x, y);//設(shè)計(jì)GetMineCount函數(shù),統(tǒng)計(jì)該坐標(biāo)處雷的個(gè)數(shù)
show[x][y] = count + '0';
//將該坐標(biāo)周圍雷的信息打印在棋盤上
DisplayBoard(show, row, col);
win++;
}
}
else
{
printf("坐標(biāo)非法,請(qǐng)重新輸入!!!\n");
}
}
if (row*col - EASY_COUNT == win)
{
printf("恭喜你,你贏了,掃雷成功!!!\n");
printf("雷的布局為:\n");
DisplayBoard(show, row, col);
}
}
test.c部分
#include "game.h"
void menu()
{
printf("***************************\n");
printf("******* 1.PLAY ********\n");
printf("******* 2.EXIT ********\n");
printf("***************************\n");
}
void game()
{
//創(chuàng)建棋盤對(duì)應(yīng)的數(shù)組
char mine[ROWS][COLS];
char show[ROWS][COLS];
InitBoard(mine, ROWS, COLS, '0');//存放布置雷的信息
InitBoard(show, ROWS, COLS, '*');//存放排查出雷的信息
//DisplayBoard(mine, ROW, COL);
DisplayBoard(show, ROW, COL);
//布置雷
SetMine(mine, ROW, COL, EASY_COUNT);
//DisplayBoard(mine, ROW, COL);
FindMine(mine, show, ROW, COL);
}
int main()
{
int input;
srand((unsigned int)time(NULL));
do
{
menu();
printf("請(qǐng)輸入 1 開始游戲 輸入 0 退出游戲> \n");
scanf("%d", &input);
switch (input)
{
case 1:
game();//掃雷游戲的實(shí)現(xiàn)
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯(cuò)誤,請(qǐng)重新選擇\n");
}
} while (input);
return 0;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Qt數(shù)據(jù)庫應(yīng)用之通用數(shù)據(jù)庫同步
數(shù)據(jù)庫同步的主要功能是將本地的數(shù)據(jù)庫記錄同步到遠(yuǎn)程的數(shù)據(jù)庫。本文將利用Qt實(shí)現(xiàn)通用數(shù)據(jù)庫同步功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-03-03
C語言數(shù)據(jù)的存儲(chǔ)超詳細(xì)講解下篇浮點(diǎn)型在內(nèi)存中的存取
使用編程語言進(jìn)行編程時(shí),需要用到各種變量來存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么2022-04-04
C++拷貝構(gòu)造函數(shù)和賦值運(yùn)算符重載詳解
拷貝構(gòu)造函數(shù)是特殊的構(gòu)造函數(shù),是用一個(gè)已經(jīng)存在的對(duì)象,賦值拷貝給另一個(gè)新創(chuàng)建的已經(jīng)存在的對(duì)象,這篇文章主要介紹了C++拷貝構(gòu)造函數(shù)和賦值運(yùn)算符重載,需要的朋友可以參考下2024-05-05
C++實(shí)現(xiàn)String類實(shí)例代碼
這篇文章主要介紹了C++實(shí)現(xiàn)String類實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-04-04
C++控制臺(tái)強(qiáng)化如何實(shí)現(xiàn)一定界面效果(簡(jiǎn)潔版)
這篇文章主要介紹了C++控制臺(tái)強(qiáng)化如何實(shí)現(xiàn)一定界面效果(簡(jiǎn)潔版),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07

