实验五 扫雷游戏的实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验五 扫雷游戏的实现

上机实验须知 实验名称: 扫雷游戏的实现 实验目的: 利用二维编码方式编码地雷地图,然后基于二维地图实现扫雷游戏的各个部分的算法,最终实现扫雷游戏。 实验环境: 高档微机 Windows操作系统中文版 Flash CS3 Professional中文版 实验原理: 地图是许多游戏的重要组成。小游戏例如俄罗斯方块、各种棋类游戏、搬运工游戏等,大型游戏例如英雄无敌、魔兽争霸,无不与地图紧密关联。 一般来说,游戏中的地图是由地图元件、编码数据和基于编码的算法三个部分组成。例如下图是已经完成的扫雷游戏的截图: 其地图(即游戏中的地板方块组合)的三个部分分为为: 地图元件、编码数据以及基于编码的算法 地图元件就是游戏中的每个方块,它记录着是否有雷,位置所引,是否已经被打开,是否被插上旗帜以及是否爆炸等属性,状态和效果。可以采用角色设计思想设计。 地图编码的作用其实是在地图元件与算法之间建立一个最简的沟通桥梁。我们可以基于编码方式设计算法,然后通过编码找到对应的元件,也可以从元件出发获取其编码值,然后用这个编码值参与算法过程。这里我们可以建立一个二维数组,每个数据项存储的是一个方块的引用。这样二维数组就是游戏的编码方式。一方面,我们可以基于二维数组的下标(即索引)找到每个方块,另一方面,我们还要在每个方块中定义变量indexX和indexY,用来记录其索引值,当方块触发了某个事件(如鼠标点击),就可以通过读取这个方块的索引值从而确定它在二维数组中的位置。 好的地图编码方式应该是即满足记录数据的需要,又是最简的。经验证明,二维数组是行之有效又简单的地图编码方式。 基于二维编码上的扫雷算法包括: 编码与索引 布置雷区 随机分布地雷 计算单元格周围雷数 无雷区自动扩张的设计 判断地雷是否已经全部扫除 人机交互部分的设计 设置难度级别 显示所有地雷 详细介绍请看本章(第六章地图布置与地图相关算法)的PPT文档。 实验内容: 模拟实现类似于Windows自带的小游戏“扫雷”。可以手动地设置难度级别,或者干脆直接设置地图的尺寸,和地雷的数量,然后开始游戏。 实验步骤: 制作方块角色 很明显,扫雷游戏中的每一个方格,都是一个雷区单元角色的实例。这个雷区单元应该包含如下的成员: 成员 成员描述 discovered 是否被打开了 haveMine 是否有地雷 haveFlag 是否有旗帜 i、j 雷区单元所在的位置 各个界面 如未打开、显示地雷、爆炸、显示周围雷数等界面 showMine() 显示地雷界面 showExplode() 显示地雷爆炸界面 showInit() 显示初始化时的界面 showAround(num) 显示地雷被排除的界面 flag() 显示/隐藏旗帜 设计这样的一个雷区方格角色,对我们来说,已经是轻车熟路,为了节省篇幅,这里忽略具体的实现。已完成的方块角色的每一帧的内容如下图所示: 这些画面简单明了。第一帧有初始化代码: var discovered:Boolean=false; var haveMine:Boolean=false; var haveFlag:Boolean=false; var line:int,row:int; function showMine() { discovered=true; gotoAndStop(4); } function showExplode() { discovered=true; gotoAndStop(5); } function showInit() { gotoAndStop(2); discovered=false; } function showAround(num) { discovered=true; gotoAndStop(num+6); } function flag():Boolean { if (haveFlag==true) { gotoAndStop(2); } else { gotoAndStop(3); } haveFlag=!haveFlag; return haveFlag; } 第二帧为默认的状态,时间轴应该停止在这一帧。代码: stop(); 至此我们已经完成这个角色的设计,在库中选中这个方块剪辑,点击右键,选择“链接…”,将其链接为Cell输出。如下图所示: 布置场景 扫雷游戏只有一帧。时间轴如图所示: 界面内容如下图所示: 其中各个文本框的实例名称分别为:txtLineCount、txtRowCount、txtMineCount、txtMineLeft。 开始按钮的实例名称为:bt_start,预设下拉框的实例名称为:mode。预设下拉框内的数据选项为: 自此完成了整

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档