辽宁沈阳第十五中学高中数学图形计算器应用能力测试活动学生图形计算器游戏扫雷_第1页
辽宁沈阳第十五中学高中数学图形计算器应用能力测试活动学生图形计算器游戏扫雷_第2页
辽宁沈阳第十五中学高中数学图形计算器应用能力测试活动学生图形计算器游戏扫雷_第3页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

辽宁省沈阳市第十五中学2013年高中数学论文 图形计算器应用能力测试活动学生 图形计算器游戏扫雷 利用图形计算器的编程功能,在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暂停游戏菜单图 3游戏存档读取中特色:1. 游戏运行时,左上角会显示未标记的地雷个数。(如图1)2. 随机生成地图的游戏模式下,开始游戏时光标所在的方格一定没有地雷。如果总地雷数在范围内,则光标周围八个方格也没有地雷。这个设计是为了降低游戏难度。3. 程序根据方格上的数字的大小用不同的颜色显示。(如图4)图 4研究过程1. 确定程序功能,请参考“游戏功能说明”。2. 构思算法:本程序在游戏实现方面使用模拟法,挖开方格时用非递归的广度搜索算法实现。使用一个矩阵保存游戏时的地图,一个矩阵元素对应地图上的一个方格。需要记录的数据:光标位置、地图信息、未标记的地雷数、未挖开且无标记的方格数矩阵记录地图信息的方法:矩阵元素上的数字表示地图对应方格的当前状态:用负数表示此方格还没有被标记或被挖开;零表示表示地图的边界,对应地图上不显示的地方;正数表示此方格已经被挖开或被标记。矩阵元素数字表示的具体含义请见下表:数字含义正整数被标记的方格已被挖开的周围没有地雷的方格已被挖开的周围有1至8个地雷的方格零地图边界负整数未被挖开的周围有1至8个地雷的方格未被挖开的周围没有地雷的方格有地雷的方格游戏保存实现:将“需要记录的数据”用另一个矩阵记录起来。按键检测方法:使用“Getkey”命令获取按键后,因为该命令返回的数值最大为79且一定为非负整数,所以创建一个793的矩阵Mat H来判断按键。通过读取Mat HK,3(K为“Getkey”命令的返回值)即可立即判断按键是否有效。若按键有效,则可以非常方便地利用矩阵的数据移动光标。挖开方格的实现(广度优先搜索的实现):当玩家挖开的方格周围八个方格都没有地雷,程序将自动挖开这个八个方格,也就是说对这八个方格的处理和对玩家挖开的方格的处理是一样的。具体实现时,用一个队列储存待挖开的方格,先将光标所在的方格加入队首。如果队列不为空,从队尾中取出一个方格,判断该方格周围八个方格是否有地雷。如果没有,则这八个方格加入到队首,对应方格显示一个空格;否则,只显示该方格上的数字。用深度优先搜索算法也可以实现方格的挖开,但考虑到广度优先搜索的动态显示效果比深度优先搜索的好,所以选择了广度优先搜索算法。自动挖开和自动标记的实现:统计光标周围八个方格中的标记数和未挖开的方格数。存在未挖开方格的前提下,如果标记数等于光标所在方格上的数字,则将未挖开的方格加入到队首(即挖开这些方格);如果标记数加上未挖开的方格等于方格上的数字,则在未挖开的方格上添加标记。3. 使用图形计算器编程实现。4. 进行程序调试。5. 游戏试用。具体实现步骤如下:1. 打开图形计算器,按1进入“计算矩阵”模式。2. 按e进入矩阵存储器。并创建矩阵:矩阵名尺寸用途Mat A239程序运行时保存地图信息Mat C82八个方向的相对偏移量Mat D239游戏存档存放位置Mat E1002广度搜索时用作储存队列Mat H793按键判断15Mat 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. 创建程序“MDUG”,代码请参考“程序代码分析”或附件。6. 创建程序“MINIT”,代码请参考“程序代码分析”或附件。7. 创建程序“MSIGN”,代码请参考“程序代码分析”或附件。程序代码分析为了便于阅读和交流,笔者将由计算器转换成txt文件得出的代码加以修改并增加缩进,同时还添加了程序注释。如需将代码导入计算器中,请参见附件。一、 主程序MINEProgramMode:RUN_Mat _C,D,A,E,H(-)1Z变量Z记录设定的地雷个数,-1表示未定义Lbl 1“7 i”是程序MINIT的调用标志,表示此次调用由程序调用,以防误操作以致程序MINIT被单独运行7i:Prog MINIT游戏循环,M记录的是没标记或未挖开的方格数,N记录的是未标记的地雷个数While MNDo按键获取循环,同时使当前选中的方格闪烁,以显示光标位置Locate X,Y, Red Locate X,Y,Str 2GetkeyKLpWhile K=0If Mat HK,3:Then 判断是否按下了方向键光标发生移动,根据矩阵里的数据,恢复光标目前所在方格的显示Mat AX+1,Y+1R If RMagenta Locate X,Y,5IfEnd:IfEnd:IfEnd:IfEnd:IfEnd:IfEndX+Mat HK,1X光标移动Y+Mat HK,2YIf Mat AX+1,Y+1=0:Then 判断是否到达了地图边界,由于左上角有两个方格显示未标记的地雷个数,这种情况需要特殊处理If X=22:Then If Y=1:Then 3XElse 1X:IfEndElse X=0 Or (X=2 And Mat HK,1=(-)1)=21XIfEndIf Y=8:Then If X=3:Then 1YElse 2Y:IfEndElse Y=0 Or (Y=1 And Mat HK,2=(-)1)=7YIfEndIfEndMat AX+1,Y+1RIf R=1 And R9=Str 3Str 2IfEnd:IfEndElse If K=63 Or K=31 Or K=29:Then 按下了按键u、5或l,调用程序MDUGProg MDUGIf Mat AX+1,Y+1=(-)10:Then 判断游戏是否结束了,程序MDUG执行完毕后,如果光标停在了地雷上则游戏结束LoseStr 4显示错误的标记和所有地雷的所在位置For 2J To 8For 2I To 22If Mat AI,J90=Red Locate I-1,J-1,IfEndNextNextBreakIfEnd按下了按键y或m,标记地雷Else If K=43 Or K=39:Then Prog MSIGN Else If K=48:Then 按下了p,暂停游戏Menu Pause,Continue,3,Exit,4Lbl 3IfEnd:IfEnd:IfEnd:IfEndWhileEndFor 1I To 300:NextWhile Getkey=0WhileEndMenu Str 4,Play again,1,Exit,2游戏结束后的菜单Lbl 4游戏保存的实现Mat AMat DMMat D1,1NMat D1,2XMat D1,3YMat D1,4Lbl 2:Stop二、 子程序MINITProgramMode:RUN此子程序主要用于游戏前的初始化,主要是地图的随机生成和游戏存档的读取Ans7i=Prog MINE:0调用标志判断,如果不是由程序调用,则调用主程序Z(-)1=Goto 4地雷数已定义,直接开始随机生成地图字符串1保存未挖开且无标记方格的字符,字符串3保存标记地雷用的字符Str 1: Str 3没有游戏存档时,询问地雷数的设置Mat D1,1=0=Menu The num of mines,31,1,35,2,User-defined,3Goto 5有游戏存档时直接读取游戏存档Lbl 1:31Z:Goto 4Lbl 2:35Z:Goto 4Lbl 3:Num of mines=?ZLbl 4Int ZNN99=Goto 3ClrTextYou winStr 4初始化游戏结果,用于游戏结束时显示Str 1Str 2初始化字符串2,字符串2保存当前光标位置的字符初始化矩阵A,并随机生成地图Fill(0,Mat A)For 1I To NDoRanInt#(2,22)XRanInt#(2,8)YLpWhile (Y=2 And (X=2 Or X=3) Or (Mat AX,Y(-)9Mat AI,JNextNext定义边界For 1I To 230Mat AI,10Mat AI,9NextFor 2I To 8显示地图,因为未挖开任何一个方格,所以全为黑色的正方形。用这种方法显示可以加快显示速度Locate 1,I-1,0Mat A1,I0Mat A23,INext0Mat A2,20Mat A3,2显示未标记的地雷个数If N9:Then Locate 1,1,NElse Locate 1,1,0Locate 2,1,NIfEndIf N30 And N=60:Then 使总地雷数在范围内时,光标所在方格及其周围八个方格上没有地雷DoRanInt#(1,21)XRanInt#(1,7)YLpWhile (Y=1 And (X=1 Or X=2) Or (Mat AX+1,Y+1(-)9)Else 使光标所在的方格一定没有地雷DoRanInt#(1,21)XRanInt#(1,7)YLpWhile (Y=1 And (X=1 Or X=2) Or (Mat AX+1,Y+1=(-)10)IfEnd145M:0E:0FReturnLbl 5You winStr 4游戏存档的读取Mat DMat AMat A1,1M:Mat A1,2NMat A1,3X:Mat A1,4Y0Mat D1,1: 0Mat A1,1: 0Mat A1,2: 0Mat A1,3: 0Mat A1,4Mat AX+1,Y+1RIf R30Then Str 3Str 2Else R=1 And RStrMid(12345678,R,1)Str 2IfEnd:IfEndN的显示If N9:Then Locate 1,1,NElse Locate 1,1,0Locate 2,1,NIfEnd地图的显示For 1J To 7For 1I To 21Mat AI+1,J+1RIf R=30:Then Red Locate I,J,Str 3Else If R=1:Then Green Locate I,J,1Else If R=2:Then Cyan Locate I,J,2Else If R=3:Then Blue Locate I,J,3Else If R=4:Then Yellow Locate I,J,4Else If R=5:Then Magenta Locate I,J,5Else R=6 And RRed Locate I,J,RIfEnd:IfEnd:IfEndIfEnd:IfEnd:IfEndIfEnd:NextNext三、 子程序MDUGProgramMode:RUN按下按键u、5或l后的所有操作都由这个子程序实现Mat AX+1,Y+1RR=9=Return如果当前方格有地雷或标记,则返回主程序If R0:Then 当前方格显示数字,则统计未挖开方格数A和标记数B0P变量P记录队首在矩阵E中的位置0A:0BFor 1I To 8If Mat AX+Mat CI,1+1,Y+Mat CI,2+1=30=1+BBIfEndNextIf A0 And R=B:Then 实现自动挖开功能For 1I To 8X+Mat CI,1XY+Mat CI,2YIf Mat AX+1,Y+10:Then 挖开了地雷说明标记有错误,返回主程序,游戏结束Mat AX+1,Y+1Return1+PPX+1Mat EP,1Y+1Mat EP,2(-)Mat AX+1,Y+1Mat AX+1,Y+1IfEndX-Mat CI,1XY-Mat CI,2YNextElse If A0 And R=A+B:Then 实现自动标记功能For 1I To 8X+Mat CI,1XY+Mat CI,2YMat AX+1,Y+1Prog MSIGNX-Mat CI,1XY-Mat CI,2YNextStrMid(12345678,Mat AX+1,Y+1,1)Str 2IfEnd:IfEndElse (-)RMat AX+1,Y+1StrMid(12345678,Mat AX+1,Y+1,1)Str 2将当前方格加入队首1PX+1Mat E1,1Y+1Mat E1,2IfEnd0Q变量Q记录队尾的下一个位置Wh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论