- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
说说连连看游戏的算法设计——生成地图篇.pdf
说说连连看游戏的算法设计——生成地图篇
最近突发奇想,想写一个连连看小游戏玩一下。没动手的时候以为这个游戏简单的不得了,
写起来应该是一挥而就的感觉;等真的写起来才发现是纸上谈来终觉浅,绝知此事要躬行啊。
连连看的核心算法主要由两部分组成,第一个是地图的生成算法,另一个是地图寻路的算
法。本文主要讨论地图的生成。
我们设地图是一个m x n二维数组。
生成算法:
生成算法要求生成一个不总有连续标记出现的二维数组,数组中每个元素都要出现偶数次。
分析:这个数组必须要有偶数个元素:所以m*n%2==0;
其他就是考虑出现偶数次数据和乱序排列的问题了。现在我们设 m=6,n=6进行讨论。并设
现在数组中共有6个元素可供选择,不要求所有元素都出现,但如果出现必须出现偶数次。
方法一:先生成一个顺序排列的二位数组 如:
1 map[m][n]={{1,2,3,4,5,6},
2 {1,2,3,4,5,6},
3 {1,2,3,4,5,6},
4 {1,2,3,4,5,6},
5 {1,2,3,4,5,6},
6 {1,2,3,4,5,6},}
然后循环遍历数组元素和数组中任意位置的数交换,得到打乱顺序的数组。
7 map[m][n]={{1,4,2,5,6,2,}
8 {2,1,6,5,1,2,}
9 {1,2,3,5,3,4,}
10 {1,4,3,6,6,6,}
11 {4,6,3,5,3,5,}
12 {4,2,5,1,4,3,}}
评价:此方法生成初始数组的过程简单,但是初识变量需要人为规定好如何布局,以确保有
偶数个元素出现,并且每个元素出现的次数固定,对元素个数也有一定要求。随机打乱后数
组元素的离散度不高。
方法二:
1、根据数组可用元素个数x,先生成二维数组的前m*n-x个元素。这些元素的值随机取任意
有效值(可让每个元素与前方,上方元素不等)。
2、另开辟一长度x的一维数组a[x]记录每个有效值出现的次数。
3、根据a将出现奇数次的元素排列于二维数组末尾,其余位置用随机一对儿相投元素填充。
4、将二维数组的最后x个元素与任意数组元素交换位置。
方法三:
1、先随机生成二维数组半数的元素,将其复制到二维数组的另一半。
2、遍历数组,随机交换数组中的元素。
评价:方法二和方法三生成数组的元素个数随机度和元素的离散程度差不多,但都要优于方
法一。方法三比方法二步骤简单,但是要多经历一次循环。各有优劣,但性能相差不大。
方法四:模板法,顾名思义,就是使用现成的模板。这个不属于生成图的方法,但是我认为
有必要提一下他,因为我认为这才是最好的获得连连看地图的方法。
因为此方法系统资源开销小,有利于控制关卡难度,地图随机度也好,简单易得呀!
上述前三种方法都没有考虑全图是否有解(第四种方法要看你选的模板考虑了没。。),下面
我们再来研究一下如何保证全图有解。
注:全图有解其实在真实的应用中的意义本人认为是不大的,因为很多情况下有解的图在解
图过程中也可能转变成无解图,所以即使你生成的图有解有能怎样呢?所以目前遇到图无解
采用的方法就是——随机重排!简单实惠,好吃不贵哦。以下讨论只做算法研究。
判断图是否有解最直接的方法就是——解 ,解一张图,如果发现无解就重新生成一张再
解(暴力啊)。
另一方法:
1、解图,将消去的元素按其位置不变存放于另一个空二维数组中,直到原图无解;
2、将原图元素限定在非空元素位置重排;
3、然后继续解图,将消去元素对应位置放于另一个数组中。
4、重复2、3直到原图消完。此时另一个数组中存放的即是一个有解图。
注:本人认为此方法可行性最高。
另一方法:生成有解图。
根据寻路算法规律将一对对元素按消去规律放置在地图中(需要利用栈的回溯)。
此方法冗繁复杂,并且效果不好,可行性不高,再次就不深入讨论了。
如果你有什么更好的生成图算法,请留言告诉我!
本文出自:/2665891/662658
您可能关注的文档
最近下载
- 现代预算制度改革背景下一般公共预算松弛研究--以浦东新区G镇为例.pdf
- 2025年海关监管仓库建设项目可行性研究报告.docx
- 日常生活能力量表(ADL)量表.docx VIP
- 2025年事业单位招聘考试时事政治考试题(含附参考答案).docx VIP
- 光伏废水处理技术方案.doc VIP
- 乌帕替尼缓释片-临床用药专业解读.pptx VIP
- 互花米草高分辨率遥感监测技术规范.pdf VIP
- C语言程序设计精髓(哈尔滨工业大学)中国大学MOOC慕课章节测验答案.pdf VIP
- SYT7412-2018 油气长输管道突发事件应急预案编制规范.pdf VIP
- 新《固废法》解读PPT课件(72页).pptx
文档评论(0)