文章目录

  • 1扫雷游戏说明:
  • 2、编程逻辑
  • 3整体的代码实现

1扫雷游戏说明:

9*9方格中有10个地雷,用户翻看一个方格,如果是地雷,游戏结束,翻看不是地雷,则显示周围地雷的个数。知道10个地雷全部被找到。

2、编程逻辑

1、创建地图并且初始化、

我们需要创建两个地图,一个地图展示用户输入,另一个地图电脑内置有地雷的地图,

void init(char showmap[MAX_ROW][MAX_COL], char minemap[MAX_ROW][MAX_COL]){//对showmap进行初始化  界面用*表示地图for (int row = 0; row < MAX_ROW; row++){for (int col= 0; col < MAX_COL; col++){showmap[row][col] = '*';}}//对mine进行初始化   界面用‘0’表示地图 用‘1’表示地雷for (int row = 0; row < MAX_ROW; row++){for (int col = 0; col < MAX_COL; col++){minemap[row][col] = '0';}}//电脑随机生成地雷  生成是个地雷int n = DEFAULT_MINE_COUNT;while (n>0){int row = rand() % MAX_ROW;int col = rand() % MAX_COL;if (minemap[row][col] == '1'){continue;}minemap[row][col] = '1';n--;}
}

2、打印地图

void printmap(char themap[MAX_ROW][MAX_COL]){//打印showmaop printf(" |");for (int col = 0; col < MAX_COL; col++){printf(" %d", col);}printf("\n");printf("-+------------------\n");for (int row = 0; row < MAX_ROW; row++){printf("%d| ", row);for (int col = 0; col < MAX_COL; col++){printf("%c ", themap[row][col]);}printf("\n");}printf("\n");
}

3、用户输入坐标

用户输入坐标我们还得进行校验,用户输入的位置坐标必须在地图坐标内,也不能在用户输入过的位置再次输入。

int row;int col;printf("请输入翻开的*(row,col)\n");scanf("%d %d", &row, &col);printmap(showmap);if (showmap[row][col] != '*'){printf("您已经翻开此位置了,请重新输入\n");continue;}if (row >= MAX_ROW || row < 0 || col >= MAX_COL || col < 0){printf("您输入的位置有误,请重新输入\n");continue;}

4、判断用户输入的位置是否是地雷

判断用户输入的位置是否是地雷 ,是地雷直接‘gameover’shoumap[row][col] == ‘1’ 踩雷了

if (minemap[row][col] == '1'){printf("gameover!!!!!\n");printmap(minemap);break;}

5、不是地雷的话,显示用户周围所点开地雷的个数

不是地雷的情况下我们需要对用户所点开的位置周围判断雷的个数,
可以形象的理解周围就是一个3*3的方格,用户输入的坐标是(row,col)左上角的格子坐标是(row -1,col -1),右下角格子坐标为(row+1,col+1)来表示,

void updateshowmap(char showmap[MAX_ROW][MAX_COL], char minemap[MAX_ROW][MAX_COL], int row, int col){int count = 0;for (int i = row - 1; i <= row + 1; i++){for (int m = col - 1; m <= col + 1; m++){if (i < 0 || i >= MAX_ROW || m < 0 || m >= MAX_COL) {continue;}if (minemap[i][m] == '1'){count++;}}}showmap[row][col] = count + '0';
}

6、判断游戏是否胜利

(用户翻开的* = 方格子总数-地雷数)两者相等,则游戏胜利,否则游戏失败

if (playmove == MAX_ROW*MAX_COL - DEFAULT_MINE_COUNT){printf("恭喜你游戏胜利了\n");printmap(minemap);break;}

3整体的代码实现

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<time.h>
#define MAX_ROW 9
#define MAX_COL 9
#define DEFAULT_MINE_COUNT 10int menu(){printf("==========================\n");printf("======== 0;开始游戏=======\n");printf("======== 1;退出游戏=======\n");printf("==========================\n");int choice;printf("请输入您的选择:\n");scanf("%d", &choice);return choice;
}
//1、创建地图并且初始化、
void init(char showmap[MAX_ROW][MAX_COL], char minemap[MAX_ROW][MAX_COL]){//对showmap进行初始化  界面用*表示地图for (int row = 0; row < MAX_ROW; row++){for (int col= 0; col < MAX_COL; col++){showmap[row][col] = '*';}}//对mine进行初始化   界面用‘0’表示地图 用‘1’表示地雷for (int row = 0; row < MAX_ROW; row++){for (int col = 0; col < MAX_COL; col++){minemap[row][col] = '0';}}//电脑随机生成地雷  生成是个地雷int n = DEFAULT_MINE_COUNT;while (n>0){int row = rand() % MAX_ROW;int col = rand() % MAX_COL;if (minemap[row][col] == '1'){continue;}minemap[row][col] = '1';n--;}
}
//2、打印地图
void printmap(char themap[MAX_ROW][MAX_COL]){//打印showmaop printf(" |");for (int col = 0; col < MAX_COL; col++){printf(" %d", col);}printf("\n");printf("-+------------------\n");for (int row = 0; row < MAX_ROW; row++){printf("%d| ", row);for (int col = 0; col < MAX_COL; col++){printf("%c ", themap[row][col]);}printf("\n");}printf("\n");
}
//不是地雷增加,显示周围地雷的个数
void updateshowmap(char showmap[MAX_ROW][MAX_COL], char minemap[MAX_ROW][MAX_COL], int row, int col){int count = 0;for (int i = row - 1; i <= row + 1; i++){for (int m = col - 1; m <= col + 1; m++){if (i < 0 || i >= MAX_ROW || m < 0 || m >= MAX_COL) {continue;}if (minemap[i][m] == '1'){count++;}}}showmap[row][col] = count + '0';
}
void game(){//1、创建地图并且初始化、char showmap[MAX_ROW][MAX_COL] = { 0 };char minemap[MAX_ROW][MAX_COL] = { 0 };init(showmap, minemap);int playmove = 0;while (1){//2、打印地图、printmap(showmap);printmap(minemap);//3、用户输入坐标,对应点开某个位置。进行校验。//要不要写个函数呢呀?还是直接在这用户输入*.*int row;int col;printf("请输入翻开的*(row,col)\n");scanf("%d %d", &row, &col);printmap(showmap);if (showmap[row][col] != '*'){printf("您已经翻开此位置了,请重新输入\n");continue;}if (row >= MAX_ROW || row < 0 || col >= MAX_COL || col < 0){printf("您输入的位置有误,请重新输入\n");continue;}//4、判断用户输入的位置是否是地雷 ,是地雷直接‘gameover’shoumap[row][col] == '1'  踩雷了if (minemap[row][col] == '1'){printf("gameover!!!!!\n");printmap(minemap);break;}//5、不是地雷的话,显示用户周围所点开地雷的个数,updateshowmap(showmap, minemap, row, col);//6、判断游戏是否胜利(用户翻开的*  =  方格子总数-地雷数)两者相等,则游戏胜利,否则游戏失败playmove ++;  if (playmove == MAX_ROW*MAX_COL - DEFAULT_MINE_COUNT){printf("恭喜你游戏胜利了\n");printmap(minemap);break;}}}
int main()
{srand((unsigned)time(0));while (1){int choice = menu();if (choice == 0){game();}else if (choice == 1){printf("bye~~bye~~\n");break;}else{printf("您输入有误,请您重新输入;\n");}}system("pause");return 0;
}

c语言扫雷简化版小游戏相关推荐

  1. C语言编写2048小游戏

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104992424 2 ...

  2. C语言实现2048小游戏

    C语言实现2048小游戏-粤嵌GE6818嵌入式系统实训 部分功能演示视频. 实现的全部功能: 1.字模显示封面组员名字 2.完成2048游戏在板子上的运行 3.成功或者失败需要有标志也可以计分 4. ...

  3. C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训

    C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训 实现的全部功能: 功能演示: 版本介绍 简易版--大佬选这个 完整版--想保研.想得高分.想要装逼的同学选这个 至尊版--零基础的.想要装 ...

  4. C语言 剧情版小游戏

    C语言超简单小游戏,,,剧情版,,, 运行效果图: #include<stdio.h>int main() {/*第一关*/int a,b,c,d,e,f,g,h; // int yx=8 ...

  5. c语言编写数据存储的游戏,c语言经典小程序和c语言编写的小游戏带注释(自动保存的).doc...

    c语言经典小程序和c语言编写的小游戏带注释(自动保存的) 1.写一个定时?关机的小程?序,可以立即关?闭计算机,也可以一段?时间后关闭?计算机. #inclu?de #inclu?de #inclu? ...

  6. c语言小游戏10例,C语言的应用 小游戏为例.doc

    C语言的应用 小游戏为例 贪吃蛇游戏设计 姓 名: 学 号: 班 级: 103511 指导老师: 张 印 2012年05月29日 <c语言程序设计>课程期末论文 PAGE I 目 录 TO ...

  7. linux 剪刀石头布c语言,利用C语言编写“剪刀石头布”小游戏

    前言 大家好~ 我是一名C语言初学者,学了C语言基础后,我制作了一个小游戏:剪刀石头布. 希望大家能对我的思路和代码提出小Tips(eg.更简便的方法与程序) 我也会虚心接受大家的建议~ 一.游戏原理 ...

  8. java 2048游戏_JAVA2048游戏 本课程设计是基于java语言的2048小游戏设计 联合开发网 - pudn.com...

    JAVA2048游戏 所属分类:游戏 开发工具:Java 文件大小:789KB 下载次数:4 上传日期:2020-11-23 10:57:11 上 传 者:滴滴滴大萌 说明:  本课程设计是基于jav ...

  9. C语言小游戏大全,C语言贪吃蛇小游戏(附源码)

    一.C语言小游戏大全,C语言贪吃蛇小游戏(附源码) 贪吃蛇小游戏源码和更多C语言课设项目小游戏源码免 费 下 载 链 接 如下: c语言项目课设小游戏源码资料压缩包.zip-C文档类资源-CSDN下载 ...

最新文章

  1. 【洛谷 1345】 奶牛的电信
  2. 这年头连人用脑机接口信号都能无线传输了,瘫痪者可在家轻松上网看视频
  3. 在CMD窗口连接到Mysql
  4. 【机器学习】集成学习ensemble之随机森林
  5. 从 重复叠加字符串匹配 看Java String源码中的contains方法
  6. 汇顶科技外包java_汇顶科技——好好掂一掂它的技术含量(只谈基本面)
  7. STM32读取HMC5883L的偏航角数据
  8. mysql预处理stmt_mysqli_stmt类:使用预处理语句处理SELECT查询结果
  9. Cordova app中点击打开微信功能
  10. 部署项目启动提示找不到locahost:8080.....地址问题
  11. 大学学python用记笔记吗_python笔记(1)-关于我们应不应该继续学习
  12. 魔霸新锐2021版不接显示器开启独显的方式
  13. js两种拼接字符串方法
  14. 银行家舍入-四舍六入五成双
  15. 计算机网络怎么运行内存,运行内存,教您如何扩大电脑的运行内存
  16. 达摩院开源预训练数据微调框架UOT NeurIPS论文深入解读
  17. 口袋之旅html5超强账号,口袋之旅h5高级账号,h5裂空座多少高级狩猎卷
  18. 冒泡排序(代码+解析)
  19. 麦可网嵌入式linux,麦可网张凌华体系结构及裸板篇ARM嵌入式开发视频教程
  20. 一个数的因子个数求解公式

热门文章

  1. C/C++游戏(game)
  2. GUI(图形界面编程)
  3. CMD 命令速查手册
  4. RISC-V IDE MRS使用笔记(二):Board chip status error
  5. Python基础入门篇【2】--python脚本结构
  6. TI DSP处理器中的CMD 文件
  7. 二维码登录——原理区
  8. 笔记 Java SE - 06 Java SE IO
  9. 【matlab图像处理】图像处理的逻辑运算
  10. [Linux基础与服务管理——常用集群高可用软件 Keepalived]