推箱子(Sokoban).PDFVIP

  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文档。上传文档
查看更多
推箱子(Sokoban ) Unity 2017经典游戏开发教程:算法分析与实现 《推箱子》游戏介绍  推箱子是一个来自日本的古老游戏,其电子 游戏最早于1981年由 Hiroyuki Imabayashi 编写,并于1982年12月由日本的Thinking Rabbit公司发行,目的是在训练玩家的逻辑 思考能力。 游戏规则  这个游戏是在一个正方形的棋盘上进行的, 每一个方块表示一个地板或一面墙。地板可 以通过,墙面不可以通过。地板上放置了箱 子,一些地板被标记为存储位置。  玩家被限制在棋盘上,可以水平或垂直地移 动到空的方块上(永远不会穿过墙或箱子)。 箱子不得被推入其他箱子或墙壁,也不能被 拉出。箱子的数量等于存储位置的数量。当 所有的箱子都安放在储藏地点时,游戏胜利。 程序实现要点  地图的生成。  角色的移动。  箱子的移动。 程序实现要点  地图的生成。  角色的移动。  箱子的移动。 程序实现要点-地图的生成  使用二维数组来存储地图信息。每个元素 中用不同的数字来标记不同的对象。0表示 空白,1表示墙,2表示角色,3表示箱子, 9表示终点(9表示终点是为了方便以后加 其他颜色的箱子) 3 9 2 1 程序实现要点-地图的生成  使用二维数组来存储地图信息。每个元素 中用不同的数字来标记不同的对象。0表示 空白,1表示墙,2表示角色,3表示箱子, 9表示终点(9表示终点是为了方便以后加 其他颜色的箱子)  通过遍历地图二维数组,读取每个元素的 数值,根据数值标记生成不同的地图对象。 程序实现要点-地图的生成  使用二维数组来存储地图信息。每个元素 中用不同的数字来标记不同的对象。0表示 空白,1表示墙,2表示角色,3表示箱子, 9表示终点(9表示终点是为了方便以后加 其他颜色的箱子)  通过遍历地图二维数组,读取每个元素的 数值,根据数值标记生成不同的地图对象。  设坐标原点在地图的左上角,向右为横向x 轴正方向,向下为纵向y轴负方向。那么二 维数组map[m][n]的第i行第j列的元素为 map[ i][j],每个方块(tile)的尺寸为1*1, 则对应map[ i][j]在场景中的坐标位置为: position = ( i,-j)。例如map[1][4]对应 的tile的位置为(1,-4)。同时,该元素的 值为1,那么表示的是墙的方块。 程序实现要点-地图的生成  为程序实现的简便,可以把地图的二维数 组数据映射到一维数组上,便于遍历。  设二维数组为map[m][n],一维数组为 b[m*n],则他们的对应关系为:  b[i*n+j] = map[i][j]。  假设tile的长宽都为1,地图二维数组大小 为9*9,则二维数组中的map[2][1]对应一 维数组中的b[2*9+1] = b[19],也就是说, 对于数组元素b[19] 对应其实际的坐标为 (2,1)。  虽然一维数组对于人来说不是很直观,但 把二维数组转换成一位数组更有利于程序 方便的实现。  因此,在设计地图时用二维数组表示,在 进行程序其他操作,如角色移动时,用一 维数组表示。 程序实现要点  地图的生成。  角色的移动。  箱子的移动。 程序实现要点-角色的移动  流程图 程序实现要点-角色的移动 map[0][0] b[0]  设地图左上角为原点,即map[0][0],对应一位数组上为b[0]。  那么当角色位于map[ i][j],即一维数组的b[i*9 + j]时, 此处以map

文档评论(0)

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

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

1亿VIP精品文档

相关文档