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

編譯器使用的為VS2013
代碼分為三個(gè)部分
1、頭文件 game.h
2、源文件 game.c 用來(lái)存放游戲中所有的函數(shù)
3、源文件 test.c 用來(lái)存放游戲的主題部分
代碼如下:
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 //初始化棋盤(pán),將雷設(shè)計(jì)成字符‘1' ,注意不是數(shù)字1,沒(méi)有雷設(shè)計(jì)成字符‘0',此處設(shè)計(jì)是為后續(xù)統(tǒng)計(jì)雷的個(gè)數(shù)做鋪墊 void InitBoard(char board[ROWS][COLS], int rows, int cols, char set); //打印棋盤(pán) 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)出沒(méi)有雷
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',沒(méi)有加字符‘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)周圍雷的信息打印在棋盤(pán)上
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)建棋盤(pán)對(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 開(kāi)始游戲 輸入 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)文章
解析C++中的虛擬函數(shù)及其靜態(tài)類型和動(dòng)態(tài)類型
虛擬函數(shù)(Visual Function)亦常被成為虛函數(shù),是C++中的一個(gè)重要特性,本文我們就來(lái)解析C++中的虛擬函數(shù)及其靜態(tài)類型和動(dòng)態(tài)類型2016-06-06
C語(yǔ)言實(shí)現(xiàn)三子棋小游戲的示例代碼
這篇文章主要介紹了如何通過(guò)C語(yǔ)言實(shí)現(xiàn)三子棋小游戲,三子棋小游戲的實(shí)現(xiàn)主要依賴于循環(huán)語(yǔ)句、函數(shù)和數(shù)組,感興趣的小伙伴可以嘗試一下2022-10-10
C語(yǔ)言計(jì)算代碼執(zhí)行所耗CPU時(shí)鐘周期
本文給大家介紹的是使用C語(yǔ)言來(lái)計(jì)算代碼執(zhí)行所耗CPU時(shí)鐘周期的代碼,非常的簡(jiǎn)單實(shí)用,不過(guò)要依托于sync,有需要的小伙伴自己參考下吧。2015-03-03
C++??STL?_?Vector使用及模擬實(shí)現(xiàn)
這篇文章主要介紹了C++ STL_Vector使用及模擬實(shí)現(xiàn),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
C++實(shí)現(xiàn)圖片轉(zhuǎn)base64的示例代碼
Base64就是一種 基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的表示方法,本文主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)圖片轉(zhuǎn)base64,需要的可以參考下2024-04-04

