| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 扫雷游戏(递归算法进行扩展) -> 正文阅读 |
|
[C++知识库]扫雷游戏(递归算法进行扩展) |
思路:定义要用到的标识符常量 #define ROW 9 //棋盘大小 #define COL?9?//棋盘大小 #define ROWS ROW+2? //实际数组大小,比棋盘大小多出一圈,在计算棋盘边界处的周围地雷数量时数组大小不会溢出。 #define COLS COL+2?//实际数组大小 #define Count 10 //地雷数量 menu();//显示菜单栏 以下函数存储在game.c中: 定义两个同样大小的二维数组mine[ROWS][COLS]和show[ROWS][COLS],一个用来存储地雷信息,一个用来展示给玩家。 Init_board(mine, ROWS, COLS,'0');? //初始化存雷数组,全置'0' Init_board(show, ROWS, COLS,'#');? //初始化展示数组,全置'#' Set_mine(mine, ROW, COL);? //随机安放地雷 //Display_board(mine, ROW, COL);? //打印设置地雷后的地雷数组 //扫雷 Display_board(show, ROW, COL);? //打印设置地雷后的展示数组 Find_board(mine, show, ROW, COL);? //开始找雷 难点:Find_board(mine, show, ROW, COL)的实现难点1:当排雷坐标没有地雷,且周围一圈也没有地雷时,应该把周围一圈的数字(每个位置周围一圈的地雷总数)显示出来。如果某一位置显示的数字是0,继续把该位置周围一圈的数字显示,数字为0则继续显示周围一圈的数字,往外扩展,数字不为0只显示当前位置的数字。? 需要注意的问题:递归过后的位置下一次不需要递归,否则会使递归函数无限循环!解决办法:在第一次输入排雷坐标时定义一个Contrast[ROWS][COLS]数组,当某个位置判断过后就将该位置对应的Contrast[ROWS][COLS]数组元素置为'$',下一次递归时,如果该坐标在Contrast[ROWS][COLS]数组中对应的元素为'$',则跳过递归。
难点2:判断什么时候赢 在show[ROWS][COLS]数组中,没有排查过的位置存储的是'#' 在玩家每次选择坐标后,如果该位置是地雷,则扫雷失败,如果不是地雷,显示数组,如果数组不是0,不需要扩展,如果是0,调用扩展函数。 上诉程序执行后,进行一次show棋盘上‘#’数量的查找,如果棋盘上剩余的'#'数量总和与地雷总数一样,则说明扫雷成功
补充知识点: 在调用随机数时需要配置随机数生成器,随机数生成器生成一次就行,可以放在主函数前部,引用头文件 #include<stdlib.h> #include<time.h> int x = 0 ; srand( ( unsigned int ) time ( NULL ) ) //time()函数返回的类型为time_t x = rand() ; //生成随机数 Scanf()函数在输入数据后按enter键确认,输入的数据和‘/n’会一并存入缓存区,在下一次调用scanf()函数时,‘/n’会被scanf()函数提取,应该先用getchar()函数拿掉这个字符。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 8:57:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |