c语言扫雷简化版小游戏
文章目录
- 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语言扫雷简化版小游戏相关推荐
- C语言编写2048小游戏
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104992424 2 ...
- C语言实现2048小游戏
C语言实现2048小游戏-粤嵌GE6818嵌入式系统实训 部分功能演示视频. 实现的全部功能: 1.字模显示封面组员名字 2.完成2048游戏在板子上的运行 3.成功或者失败需要有标志也可以计分 4. ...
- C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训
C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训 实现的全部功能: 功能演示: 版本介绍 简易版--大佬选这个 完整版--想保研.想得高分.想要装逼的同学选这个 至尊版--零基础的.想要装 ...
- C语言 剧情版小游戏
C语言超简单小游戏,,,剧情版,,, 运行效果图: #include<stdio.h>int main() {/*第一关*/int a,b,c,d,e,f,g,h; // int yx=8 ...
- c语言编写数据存储的游戏,c语言经典小程序和c语言编写的小游戏带注释(自动保存的).doc...
c语言经典小程序和c语言编写的小游戏带注释(自动保存的) 1.写一个定时?关机的小程?序,可以立即关?闭计算机,也可以一段?时间后关闭?计算机. #inclu?de #inclu?de #inclu? ...
- c语言小游戏10例,C语言的应用 小游戏为例.doc
C语言的应用 小游戏为例 贪吃蛇游戏设计 姓 名: 学 号: 班 级: 103511 指导老师: 张 印 2012年05月29日 <c语言程序设计>课程期末论文 PAGE I 目 录 TO ...
- linux 剪刀石头布c语言,利用C语言编写“剪刀石头布”小游戏
前言 大家好~ 我是一名C语言初学者,学了C语言基础后,我制作了一个小游戏:剪刀石头布. 希望大家能对我的思路和代码提出小Tips(eg.更简便的方法与程序) 我也会虚心接受大家的建议~ 一.游戏原理 ...
- java 2048游戏_JAVA2048游戏 本课程设计是基于java语言的2048小游戏设计 联合开发网 - pudn.com...
JAVA2048游戏 所属分类:游戏 开发工具:Java 文件大小:789KB 下载次数:4 上传日期:2020-11-23 10:57:11 上 传 者:滴滴滴大萌 说明: 本课程设计是基于jav ...
- C语言小游戏大全,C语言贪吃蛇小游戏(附源码)
一.C语言小游戏大全,C语言贪吃蛇小游戏(附源码) 贪吃蛇小游戏源码和更多C语言课设项目小游戏源码免 费 下 载 链 接 如下: c语言项目课设小游戏源码资料压缩包.zip-C文档类资源-CSDN下载 ...
最新文章
- 【洛谷 1345】 奶牛的电信
- 这年头连人用脑机接口信号都能无线传输了,瘫痪者可在家轻松上网看视频
- 在CMD窗口连接到Mysql
- 【机器学习】集成学习ensemble之随机森林
- 从 重复叠加字符串匹配 看Java String源码中的contains方法
- 汇顶科技外包java_汇顶科技——好好掂一掂它的技术含量(只谈基本面)
- STM32读取HMC5883L的偏航角数据
- mysql预处理stmt_mysqli_stmt类:使用预处理语句处理SELECT查询结果
- Cordova app中点击打开微信功能
- 部署项目启动提示找不到locahost:8080.....地址问题
- 大学学python用记笔记吗_python笔记(1)-关于我们应不应该继续学习
- 魔霸新锐2021版不接显示器开启独显的方式
- js两种拼接字符串方法
- 银行家舍入-四舍六入五成双
- 计算机网络怎么运行内存,运行内存,教您如何扩大电脑的运行内存
- 达摩院开源预训练数据微调框架UOT NeurIPS论文深入解读
- 口袋之旅html5超强账号,口袋之旅h5高级账号,h5裂空座多少高级狩猎卷
- 冒泡排序(代码+解析)
- 麦可网嵌入式linux,麦可网张凌华体系结构及裸板篇ARM嵌入式开发视频教程
- 一个数的因子个数求解公式