c语言开发扫雷开发思路,C语言开发实现扫雷游戏

本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下

简单描述:

输入要要扫的位置.

如果是雷,则游戏失败.

如果将所有不是雷的位置都扫了一遍,则游戏胜利.

主要细节

1、初始化(玩家扫雷图,地雷布局图)

展示出来的地图(玩家能看到的地图)showMap

for (int row = 0; row < ROW; row++){

for (int col = 0; col < COL; col++){

showMap[row][col] = "*";

}

}

地雷的布局地图(玩家看不到的地图)mineMap

for (int row = 0; row < ROW; row++){

for (int col = 0; col < COL; col++){

mineMap[row][col] = "*";

}

}

int count = 0;

while (count

int row = rand() % 9;

int col = rand() % 9;

mineMap[row][col] = "L";

count++;

}

}

3、打印地图

void print(char Map[ROW][COL]){

printf(" |0|1|2|3|4|5|6|7|8|

");

for (int row = 0; row < ROW; row++){

printf("%d |", row);

for (int col = 0; col < COL; col++){

printf("%c ", Map[row][col]);

}

printf("

");

}

}

5、玩家输入要扫的位置信息(9*9格子中某一特定位置)

void Input(char showMap[ROW][COL], char mineMap[ROW][COL], int* row, int* col){

while (1){

printf("请输入您要点的位置坐标:");

scanf("%d %d", row, col);

if (((*row) < 0) || ((*row) >= ROW)

|| ((*col) < 0) || ((*col) >= COL)){

printf("输入有误 ");

continue;

}

if (showMap[*row][*col] == "*"){

showMap[*row][*col] = " ";

break;

}

}

}

7、判断某一位置是不是地雷

//返回1表示雷;返回0表示不是雷

int isMine(char mineMap[ROW][COL], int row, int col){

if (mineMap[row][col] == "L"){

return 1;

}

return 0;

}

9、某一位置附近地雷的个数

int MineNerborhood(char mineMap[ROW][COL], int row, int col){

if (row < 0 || row >= ROW

|| col < 0 || col >= COL){

return "0";

}

int count = 0;

for (int r = row - 1; r <= row + 1; r++){

for (int c = col - 1; c <= col + 1; c++){

if (mineMap[r][c] == "L"){

count++;

}

}

}

return count + "0";

}

源代码:

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

#define ROW 9

#define COL 9

#define MINECOUNT 10

void Input(char showMap[ROW][COL], char mineMap[ROW][COL], int* row, int* col){

while (1){

printf("请输入您要点的位置坐标:");

scanf("%d %d", row, col);

if (((*row) < 0) || ((*row) >= ROW)

|| ((*col) < 0) || ((*col) >= COL)){

printf("输入有误 ");

continue;

}

if (showMap[*row][*col] == "*"){

showMap[*row][*col] = " ";

break;

}

}

}

//返回1表示雷;返回0表示不是雷

int isMine(char mineMap[ROW][COL], int row, int col){

if (mineMap[row][col] == "L"){

return 1;

}

return 0;

}

//

void init(char showMap[ROW][COL], char mineMap[ROW][COL]){

for (int row = 0; row < ROW; row++){

for (int col = 0; col < COL; col++){

showMap[row][col] = "*";

}

}

for (int row = 0; row < ROW; row++){

for (int col = 0; col < COL; col++){

mineMap[row][col] = "*";

}

}

int count = 0;

while (count

int row = rand() % 9;

int col = rand() % 9;

mineMap[row][col] = "L";

count++;

}

}

void print(char Map[ROW][COL]){

printf(" |0|1|2|3|4|5|6|7|8|

");

for (int row = 0; row < ROW; row++){

printf("%d |", row);

for (int col = 0; col < COL; col++){

printf("%c ", Map[row][col]);

}

printf("

");

}

}

//(row,col)附近格子地雷的个数

int MineNerborhood(char mineMap[ROW][COL], int row, int col){

if (row < 0 || row >= ROW

|| col < 0 || col >= COL){

return "0";

}

int count = 0;

for (int r = row - 1; r <= row + 1; r++){

for (int c = col - 1; c <= col + 1; c++){

if (mineMap[r][c] == "L"){

count++;

}

}

}

return count + "0";

}

//一局游戏

void game(){

srand(time(0));

//展示给玩家的地图

char showMap[ROW][COL];

//雷的布局图

char mineMap[ROW][COL];

//对两个地图进行初始化

init(showMap, mineMap);

//print(mineMap);

//玩家已经扫到的不是雷的格子的数目

int notMineCount = 0;

printf("扫雷游戏开始啦!

");

while (1){

//打印地图

print(showMap);

//输入地点

int row, col;

Input(showMap, mineMap, &row, &col);

//判断是否是雷区

if (isMine(mineMap, row, col) == 1){

printf(" 大兄弟,踩雷咧!

给您看看雷的布局

");

print(mineMap);

break;

}

//判断附近雷的情况

showMap[row][col]=MineNerborhood(mineMap, row, col);

notMineCount++;

//判断是否赢了

if (notMineCount == ROW*COL - MINECOUNT){

print(mineMap);

printf("恭喜您赢啦!

");

break;

}

}

}

int menu(){

printf("===================

");

printf("1.开始游戏

");

printf("0.结束游戏

");

printf("===================

");

printf("请输入您的选择:");

int choice;

scanf("%d", &choice);

return choice;

}

int main(){

while (1){

int choice = menu();

if (choice == 1){

game();

}else if (choice==0){

break;

}else{

printf("输入有误,请重新输入

");

}

}

system("pause");

return 0;

}

运行结果:

d52d1c930c8acbbd8b0a6c52f81a9c45.png

c881d1e4f189d804b9c16dc4b4d5a7c6.png

dfdd83998eb434695cfc6687475ef30d.png

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

原文链接:https://blog.csdn.net/m0_50527451/article/details/109517806

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值