C语言开发实现扫雷游戏

 更新时间:2020年11月12日 08:45:32   作者:F....  
这篇文章主要为大家详细介绍了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<MINECOUNT){
 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|\n");
 for (int row = 0; row < ROW; row++){
 printf("%d |", row);
 for (int col = 0; col < COL; col++){
 printf("%c ", Map[row][col]);
 }
 printf("\n");
 }
}

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<stdio.h>
#include<stdlib.h>
#include<math.h>
#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<MINECOUNT){
 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|\n");
 for (int row = 0; row < ROW; row++){
 printf("%d |", row);
 for (int col = 0; col < COL; col++){
 printf("%c ", Map[row][col]);
 }
 printf("\n");
 }
}
//(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("扫雷游戏开始啦!\n");
 while (1){
 //打印地图
 print(showMap);
 //输入地点
 int row, col;
 Input(showMap, mineMap, &row, &col);
 //判断是否是雷区
 if (isMine(mineMap, row, col) == 1){
 printf(" 大兄弟,踩雷咧!\n给您看看雷的布局\n");
 print(mineMap);
 break;
 }
 //判断附近雷的情况
 showMap[row][col]=MineNerborhood(mineMap, row, col);

 notMineCount++;
 //判断是否赢了
 if (notMineCount == ROW*COL - MINECOUNT){
 print(mineMap);
 printf("恭喜您赢啦!\n");
 break;
 }
 }
 
}
int menu(){
 printf("===================\n");
 printf("1.开始游戏\n");
 printf("0.结束游戏\n");
 printf("===================\n");
 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("输入有误,请重新输入\n");
 }
 }
 system("pause");
 return 0;
}

运行结果:



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

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

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

相关文章

  • C++中stringstream的用法和实例

    C++中stringstream的用法和实例

    下面小编就为大家带来一篇C++中stringstream的用法和实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 基于C语言实现的迷宫游戏代码

    基于C语言实现的迷宫游戏代码

    这篇文章主要介绍了基于C语言实现的迷宫游戏代码,对于学习游戏开发的朋友相信有一定的借鉴价值,需要的朋友可以参考下
    2014-08-08
  • C语言键盘控制走迷宫小游戏

    C语言键盘控制走迷宫小游戏

    这篇文章主要为大家详细介绍了C语言键盘控制走迷宫小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • C++实现LeetCode(208.实现字典树(前缀树))

    C++实现LeetCode(208.实现字典树(前缀树))

    这篇文章主要介绍了C++实现LeetCode(208.实现字典树(前缀树)),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C语言解字符串逆序和单向链表逆序问题的代码示例

    C语言解字符串逆序和单向链表逆序问题的代码示例

    这篇文章主要介绍了C语言解字符串逆序和单向链表逆序问题的代码示例,求逆序也是考研和面试中的基础算法题类型,需要的朋友可以参考下
    2016-06-06
  • C++实现线程同步的四种方式总结

    C++实现线程同步的四种方式总结

    这篇文章主要为大家详细介绍了C++实现线程同步的四种方式,文中的示例代码讲解详细,对我们学习C++有一定的帮助,需要的可以参考一下
    2022-11-11
  • 用C语言实现简单的计算器功能

    用C语言实现简单的计算器功能

    这篇文章主要为大家详细介绍了用C语言实现简单的计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Matlab实现绘制有气泡感的网络图

    Matlab实现绘制有气泡感的网络图

    这篇文章主要介绍了如何利用Matlab实现绘制有气泡感的网络图,文中的示例代码讲解详细,对我们学习Matlab有一定的帮助,需要的可以参考一下
    2023-02-02
  • 通俗易懂的C++前缀和与差分算法图文示例详解

    通俗易懂的C++前缀和与差分算法图文示例详解

    这篇文章主要为大家非常通俗易懂的讲解了C++前缀和与差分算法的图文分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • C++中的移动构造函数及move语句示例详解

    C++中的移动构造函数及move语句示例详解

    这篇文章主要给大家介绍了关于C++中移动构造函数及move语句的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10

最新评论