




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 辽宁省沈阳市第十五中学辽宁省沈阳市第十五中学 20132013 年高中数学论文年高中数学论文 图形计算器应用能图形计算器应用能 力测试活动学生力测试活动学生 图形计算器游戏扫雷图形计算器游戏扫雷 利用图形计算器的编程功能 在 CASIO fx CG20 图形计算器平台上实现了扫雷游戏 本文中的程序利用了图形计算器中的矩阵来储存数据 通过模拟法和广度搜索算法实现扫 雷游戏 游戏中提供了自动挖开和自动标志功能 并能中途保存游戏 关键词关键词 图形计算器 扫雷 前言前言 观察过以前的获奖论文 大多数的论文只利用到图形计算器的画图功能和小部分的编 程功能 图形计算器编程功能的强大之处并未充分体现出来 而本文正是利用了图形计算 器强大的编程功能 从而在图形计算器上实现了扫雷游戏 研究目的研究目的 利用图形计算器的编程功能 在图形计算器上实现扫雷游戏 从而锻炼编程能力和算 法能力 加深对广度优先搜索算法的理解 同时增强了 CASIO 图形计算器的娱乐功能 丰 富同学们的课余生活 程序功能说明程序功能说明 游戏功能 玩家通过数字键 1 3 7 9 2 4 6 和 8 或 B N 和 移动光标选择 方格 按 u 5 或 l 可以挖开当前选定的方格 如果挖到地雷则游戏结束并显示所有地雷 的位置和标记错误的地方 如果当前方格挖开后显示一个数字 n 表示这个方格周围 8 个方 块里总共有 n 个地雷 如果当前方格和周围 8 个方块里都没有地雷 则会自动挖开一片没 有地雷的区域 按 y 或 m 标记当前方格 在有标记的方格再按一次 y 或 m 则取消标记 如图 1 图 1 自动挖开和自动标记功能 如果玩家选择了一个已挖开的显示数字的方格 并按下按 键 u 5 或 l 则程序会自动判断周围 8 个方格的情况 从而进行自动标记或自动挖开周围 的方格 游戏保存功能 游戏中途按 p 可暂停游戏 选择 Exit 可退出并保存游戏 如图 2 下次运行程序时 程序会自动读取存档 如图 3 2 图 2 暂停游戏菜单图 3 游戏存档读取中 特色 1 游戏运行时 左上角会显示未标记的地雷个数 如图 1 2 随机生成地图的游戏模式下 开始游戏时光标所在的方格一定没有地雷 如果总地 雷数在范围内 则光标周围八个方格也没有地雷 这个设计是为了降低游戏难度 3 程序根据方格上的数字的大小用不同的颜色显示 如图 4 图 4 研究过程研究过程 1 确定程序功能 请参考 游戏功能说明 2 构思算法 本程序在游戏实现方面使用模拟法 挖开方格时用非递归的广度搜索算法实现 使用一个矩阵保存游戏时的地图 一个矩阵元素对应地图上的一个方格 需要记录的数据 光标位置 地图信息 未标记的地雷数 未挖开且无标记的方 格数 矩阵记录地图信息的方法 矩阵元素上的数字表示地图对应方格的当前状态 用 负数表示此方格还没有被标记或被挖开 零表示表示地图的边界 对应地图上不显示 的地方 正数表示此方格已经被挖开或被标记 矩阵元素数字表示的具体含义请见下 表 数字含义 3 被标记的方格 已被挖开的周围没有地雷的方格 正整数 已被挖开的周围有 1 至 8 个地雷的方格 零地图边界 未被挖开的周围有 1 至 8 个地雷的方格 未被挖开的周围没有地雷的方格 负整数 有地雷的方格 游戏保存实现 将 需要记录的数据 用另一个矩阵记录起来 按键检测方法 使用 Getkey 命令获取按键后 因为该命令返回的数值最大为 79 且一定为非负整数 所以创建一个 79 3 的矩阵 Mat H 来判断按键 通过读取 Mat H K 3 K 为 Getkey 命令的返回值 即可立即判断按键是否有效 若按键有效 则可以非常方便地利用矩阵的数据移动光标 挖开方格的实现 广度优先搜索的实现 当玩家挖开的方格周围八个方格都没 有地雷 程序将自动挖开这个八个方格 也就是说对这八个方格的处理和对玩家挖开 的方格的处理是一样的 具体实现时 用一个队列储存待挖开的方格 先将光标所在 的方格加入队首 如果队列不为空 从队尾中取出一个方格 判断该方格周围八个方 格是否有地雷 如果没有 则这八个方格加入到队首 对应方格显示一个空格 否则 只显示该方格上的数字 用深度优先搜索算法也可以实现方格的挖开 但考虑到广度 优先搜索的动态显示效果比深度优先搜索的好 所以选择了广度优先搜索算法 自动挖开和自动标记的实现 统计光标周围八个方格中的标记数和未挖开的方格 数 存在未挖开方格的前提下 如果标记数等于光标所在方格上的数字 则将未挖开 的方格加入到队首 即挖开这些方格 如果标记数加上未挖开的方格等于方格上的 数字 则在未挖开的方格上添加标记 3 使用图形计算器编程实现 4 进行程序调试 5 游戏试用 具体实现步骤如下 1 打开图形计算器 按 1 进入 计算 矩阵 模式 2 按 e 进入矩阵存储器 并创建矩阵 矩阵名尺寸用途 Mat A 23 9 程序运行时保存地图信息 Mat C 8 2 八个方向的相对偏移量 4 Mat D 23 9 游戏存档存放位置 Mat E 100 2 广度搜索时用作储存队列 Mat H 79 3 按键判断 Mat C 的初始化 Mat H 的初始化 第 27 行为 1 0 2 第 28 行为 0 1 1 第 37 行为 0 1 3 第 38 行为 1 0 4 第 52 行为 1 1 1 第 53 行为 1 0 2 第 54 行为 1 1 1 第 62 行为 0 1 3 第 64 行为 0 1 1 第 72 行为 1 1 1 第 73 行为 1 0 4 第 74 行为 1 1 1 其余矩阵元素为 0 3 返回主菜单 进入 程序 模式 4 创建程序 MINE 代码请参考 程序代码分析 或附件 5 创建程序 M DUG 代码请参考 程序代码分析 或附件 6 创建程序 M INIT 代码请参考 程序代码分析 或附件 7 创建程序 M SIGN 代码请参考 程序代码分析 或附件 程序代码分析程序代码分析 1 1 一 一 主程序主程序 MINE ProgramMode RUN Mat C D A E H 1 Z 变量 Z 记录设定的地雷个数 1 表示未定义 Lbl 1 7 i 是程序 M INIT 的调用标志 表示此次调用由程序调用 以防误操作以致程序 M INIT 被单独运行 7i Prog M INIT 游戏循环 M 记录的是没标记或未挖开的方格数 N 记录的是未标记的地雷个数 1为了便于阅读和交流 笔者将由计算器转换成 txt 文件得出的代码加以修改并增加缩进 同时还添加了 程序注释 如需将代码导入计算器中 请参见附件 5 While M N Do 按键获取循环 同时使当前选中的方格闪烁 以显示光标位置 Locate X Y Red Locate X Y Str 2 Getkey K LpWhile K 0 If Mat H K 3 Then 判断是否按下了方向键 光标发生移动 根据矩阵里的数据 恢复光标目前所在方格的显示 Mat A X 1 Y 1 R If RMagenta Locate X Y 5 IfEnd IfEnd IfEnd IfEnd IfEnd IfEnd X Mat H K 1 X 光标移动 Y Mat H K 2 Y If Mat A X 1 Y 1 0 Then 判断是否到达了地图边界 由于左上角有两个方格显示未标记的地 雷个数 这种情况需要特殊处理 If X 22 Then If Y 1 Then 3 X Else 1 X IfEnd Else X 0 Or X 2 And Mat H K 1 1 21 X IfEnd If Y 8 Then If X 3 Then 1 Y Else 2 Y IfEnd Else Y 0 Or Y 1 And Mat H K 2 1 7 Y 6 IfEnd IfEnd Mat A X 1 Y 1 R If R 1 And R9 Str 3 Str 2 IfEnd IfEnd Else If K 63 Or K 31 Or K 29 Then 按下了按键 u 5 或 l 调用程序 M DUG Prog M DUG If Mat A X 1 Y 1 10 Then 判断游戏是否结束了 程序 M DUG 执行完毕后 如果光标停在了地雷上则游戏结束 Lose Str 4 显示错误的标记和所有地雷的所在位置 For 2 J To 8 For 2 I To 22 If Mat A I J 90 Red Locate I 1 J 1 IfEnd Next Next Break IfEnd 按下了按键 y 或 m 标记地雷 Else If K 43 Or K 39 Then Prog M SIGN Else If K 48 Then 按下了 p 暂停游戏 7 Menu Pause Continue 3 Exit 4 Lbl 3 IfEnd IfEnd IfEnd IfEnd WhileEnd For 1 I To 300 Next While Getkey 0 WhileEnd Menu Str 4 Play again 1 Exit 2 游戏结束后的菜单 Lbl 4 游戏保存的实现 Mat A Mat D M Mat D 1 1 N Mat D 1 2 X Mat D 1 3 Y Mat D 1 4 Lbl 2 Stop 二 二 子程序子程序 M INIT ProgramMode RUN 此子程序主要用于游戏前的初始化 主要是地图的随机生成和游戏存档的读取 Ans7i Prog MINE 0 调用标志判断 如果不是由程序调用 则调用主程序 Z 1 Goto 4 地雷数已定义 直接开始随机生成地图 字符串 1 保存未挖开且无标记方格的字符 字符串 3 保存标记地雷用的字符 Str 1 Str 3 没有游戏存档时 询问地雷数的设置 Mat D 1 1 0 Menu The num of mines 31 1 35 2 User defined 3 Goto 5 有游戏存档时直接读取游戏存档 Lbl 1 31 Z Goto 4 Lbl 2 35 Z Goto 4 Lbl 3 Num of mines Z Lbl 4 Int Z N N99 Goto 3 8 ClrText You win Str 4 初始化游戏结果 用于游戏结束时显示 Str 1 Str 2 初始化字符串 2 字符串 2 保存当前光标位置的字符 初始化矩阵 A 并随机生成地图 Fill 0 Mat A For 1 I To N Do RanInt 2 22 X RanInt 2 8 Y LpWhile Y 2 And X 2 Or X 3 Or Mat A X Y 9 Mat A I J Next Next 定义边界 For 1 I To 23 0 Mat A I 1 0 Mat A I 9 Next For 2 I To 8 显示地图 因为未挖开任何一个方格 所以全为黑色的正方形 用这种方法显示 可以加快显示速度 Locate 1 I 1 9 0 Mat A 1 I 0 Mat A 23 I Next 0 Mat A 2 2 0 Mat A 3 2 显示未标记的地雷个数 If N 9 Then Locate 1 1 N Else Locate 1 1 0 Locate 2 1 N IfEnd If N 30 And N 60 Then 使总地雷数在范围内时 光标所在方格及其周围八个方格上没有地雷 Do RanInt 1 21 X RanInt 1 7 Y LpWhile Y 1 And X 1 Or X 2 Or Mat A X 1 Y 1 9 Else 使光标所在的方格一定没有地雷 Do RanInt 1 21 X RanInt 1 7 Y LpWhile Y 1 And X 1 Or X 2 Or Mat A X 1 Y 1 10 IfEnd 145 M 0 E 0 F Return Lbl 5 You win Str 4 游戏存档的读取 Mat D Mat A 10 Mat A 1 1 M Mat A 1 2 N Mat A 1 3 X Mat A 1 4 Y 0 Mat D 1 1 0 Mat A 1 1 0 Mat A 1 2 0 Mat A 1 3 0 Mat A 1 4 Mat A X 1 Y 1 R If R30 Then Str 3 Str 2 Else R 1 And RStrMid 12345678 R 1 Str 2 IfEnd IfEnd N 的显示 If N 9 Then Locate 1 1 N Else Locate 1 1 0 Locate 2 1 N IfEnd 地图的显示 For 1 J To 7 For 1 I To 21 Mat A I 1 J 1 R If R 30 Then Red Locate I J Str 3 Else If R 1 Then Green Locate I J 1 Else If R 2 Then Cyan Locate I J 2 Else If R 3 Then Blue Locate I J 3 Else If R 4 Then Yellow Locate I J 4 Else If R 5 Then Magenta Locate I J 5 Else R 6 And RRed Locate I J R IfEnd IfEnd IfEnd IfEnd IfEnd IfEnd 11 IfEnd Next Next 三 三 子程序子程序 M DUG ProgramMode RUN 按下按键 u 5 或 l 后的所有操作都由这个子程序实现 Mat A X 1 Y 1 R R 9 Return 如果当前方格有地雷或标记 则返回主程序 If R 0 Then 当前方格显示数字 则统计未挖开方格数 A 和标记数 B 0 P 变量 P 记录队首在矩阵 E 中的位置 0 A 0 B For 1 I To 8 If Mat A X Mat C I 1 1 Y Mat C I 2 1 30 1 B B IfEnd Next If A0 And R B Then 实现自动挖开功能 For 1 I To 8 X Mat C I 1 X Y Mat C I 2 Y If Mat A X 1 Y 1 0 Then 挖开了地雷说明标记有错误 返回主程序 游戏结束 Mat A X 1 Y 1 Return 1 P P X 1 Mat E P 1 Y 1 Mat E P 2 Mat A X 1 Y 1 Mat A X 1 Y 1 IfEnd X Mat C I 1 X 12 Y Mat C I 2 Y Next Else If A0 And R A B Then 实现自动标记功能 For 1 I To 8 X Mat C I 1 X Y Mat C I 2 Y Mat A X 1 Y 1 Prog M SIGN X Mat C I 1 X Y Mat C I 2 Y Next StrMid 12345678 Mat A X 1 Y 1 1 Str 2 IfEnd IfEnd Else R Mat A X 1 Y 1 StrMid 12345678 Mat A X 1 Y 1 1 Str 2 将当前方格加入队首 1 P X 1 Mat E 1 1 Y 1 Mat E 1 2 IfEnd 0 Q 变量
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 监事聘任与公司内部控制与合规风险防范合同范本
- 离职员工知识产权转让与保密协议书
- 知识产权保护与保密协议范本(适用于动漫产业)
- 上市公司高管离职补偿金及离职后竞业限制协议
- 离婚申请书模板及子女抚养权及赡养费支付合同
- 数字化转型对区域经济发展协调性的作用
- 2025年烧结理论考试试题及答案
- 电炉炉前工考试题及答案
- 西双版纳活动拓展策划方案
- 2025年五级下册数学的试卷及答案
- (高清版)DG∕TJ 08-2251-2018 消防设施物联网系统技术标准
- 钣金生产安全培训
- 《解剖学课件:人体解剖学概要》
- T∕CACM 1096-2018 中医治未病技术操作规范 熏蒸
- 2024年浦东新区社区工作者招聘笔试真题
- 花艺沙龙合同协议
- 糖尿病酮症酸中毒课件
- 集团内部资金管理制度
- 电力系统安全风险评估报告
- 股权投资意向协议书范本7篇
- 软件测试师面试题及答案
评论
0/150
提交评论