还剩6页未读,继续阅读
文本内容:
本科学生实验报告项目组长熊峰学号―成员熊峰,赖勇_________________________________专业软件工程(二专)___________________实验项目Flash大作业扫雷__________________指导教师及职称_________________开课学期至学年下学期1415上课时间年月至月日201531966
一、实验设计方案实验名称扫雷游戏实验时间
2015.
3.19-
6.6小组合作是否组成员赖勇,熊峰O・、目的与要求1根据自己的爱好和能力设计某一游戏、课件或网站,要求程序代码不得少于行,个别1500作品可特殊处理,不得复制某一网络作品,且素材主要为原创小组合作完成一个项目2Flash熟练的基本操作,包括元件,帧,等简单操作;3flash熟练使用语言进行基本编程;4as3具有一定的创意与解决问题的能力;、实验场地及仪器、设备和材料:52设备计算机软件、实验思路实验内容、数据处理方法及实验步骤等adabe flashpro cs63
一、实验内容选择实验项目,这里我们经过比较后决定选择经典的扫雷游戏1研究设计思路,实现方案
①准备项目所需资源
②完整界面设计,包括各式按钮,游戏2界面等
③按钮事件监听,解决操作过程中棋盘变化以及游戏参数的变化
④完成游戏操ui作引擎,主要难题在扫雷中遇到显示空白区的递归问题
⑤完成功能优化,设计游戏难度操作,添加计时操作,添加地雷标记等
⑥优化,对界面进行优化ui指导老师对实验设计方案的意见:指导老师签名年月日
二、实验结果与分析、实验目的、场地及仪器、设备和材料、实验思路等见实验设计方案
1、实验现象、数据及结果实验现象21
①整个扫雷游戏分为简单中等困难三个等级,地雷个数分别为9X9,16X16,30X16个10,40,99简单中等■・■■■・・・・■・■■・・・・■・■・・・・■■■・・■■■・!■■■・品■■■・■■・・・
②每次点击时显示周围可暴露的非雷区,在点击雷区时显示所有格子未命名文件F视图V控制C调试D简单中等困难911
③由于在编写监听过程中右键存在问题,所以我们使用滚轮替代,滚动滚轮后标记雷,再次滚动取消标记,每次标记后总雷数减一文件F视图V控制C调试D育・・国■■・■n简单中等困难Q具体实现2
①简单,中等,困难等按钮点击事件,通过修改雷数,方格数设置不同等级,同时,随机放置地雷,绘制所有格子为盖住状态
②格子的鼠标事件,包括鼠标放置在格子上方时变亮,以及点击事件,主要是点击事件,涉及的函数包括点开格子显示格子周围雷数的函数点开格子显示周围的grid_content,可暴露情况的函数,后者较为复杂,具体实现方式:曾先判断点开位置的八个方向的方格雷数情况,分为三种情况雷,周围无雷周围有雷雷数不显示,周-10,-1围有雷显示雷数Q进行递归
③滚轮事件,监听滚轮首先判断事件源是否已标记,如果已标记则取消标记,如果未标记则加入标记,同时:修改显示的雷数、对实验现象、数据及观察结果的分析与讨论:3代码分析function open_emptyi:int j:int{//打开空格子周围八个落子----------------------------递归出问题var m:int;if i0inumX-1j0jnumY-lsH3ESHSfe5JaaHHlHMfor m=0;m3;m++addchildi-l+mj-l;//{if gridarr[i-1+m][j-1].number==0;//{;//open_emptyi-l+mj-l;//addchildi-l+m,j+1;//{if gridarr[i-1+m][j+1].number==0;//{;//open_emptyi-l+mj+l;//addchildi-lj;//if gridarr[i-l][j].number==0//{//open_emptyi-1J;//addchildi+l j;//if gridarr[i+number==0//{//open_emptyi+1J;//if i-0j!=0j!=numY-lfor m=0;m2;m++addchildi+mj-l;addchildi+m J+1;addchildi+l J;if i-numX-lj!=0j!=numY-lfor m=0;m2;m++;addchildi+m-1,j-1;addchildi+m-1,j+1addchildi-l j;二if j==i!=0i!numX-1for m=0;m3;m++addchildi-1+m,j+1;addchildi-lj;addchildi+l j;if j==numY-li!=0i!=numX-lfor m=0;m3;m++addchildi-1+m J-1;addchildi-l j;addchildi+l j;if i==0j==0addchildi+l j;addchildij+l;addchildi+lj+l;}二=if inumX-1j==0addchildi-lj;addchildi,j+l;addchildi-l j+1;if i-0j==numY-1addchildi+l J;addchildij-l;addchildi+l j-1;if i==numX-1j==numY-1addchildi-lj;addchildij-l;addchildi-l}gridarr[i][j].number=10;整个项目,可以实现扫雷的大部分,功能,但是我们在实现递归显示周围无雷区时,遇到一些障碍,比如递归时,由于需要实现多重多方向的递归,导致整个递归函数只能执行一个方向的递归,比如,只能往左上角方向递归,最终,考虑的解决方案通过我们的分析,产生的原因是囚为在对进行递归时,并未执行下面的另一段递归代码,从而导致整个递归只执行了前面的open.empty一部分代码,或者是因为两者产生了混乱解决方案:对每次递归封装到一个新的对象中,分离每次递归操作;或者是使用类似多线程的操作,后来发现并没有多线程机制as、结论:4指导老师评语及得分:签名年月日。