愤怒的小鸟的关卡如何保证有解?
身边有几个人都将所有关卡都拿到3星,实验证明解是一定有的。
怎么确定最优解?
我有几个方案,但一直没有机会去尝试。如果您有更好的方案或是尝试了以下的某一种方法,请一定第一时间通知我哦!
系统分析:
由于每一个关卡的小鸟类型,建筑结构等都不一样,每一个关卡都是一个独立的系统,不存在一个对所有关卡都适用的共同解。
从系统的角度分析,输入这个系统的是手指(或鼠标)在释放前的位置,以及一些小鸟使用特技的位置,输出的是得分。
释放的位置提供了两个参数,一个是水平角度θ,另一个是沿弹弓皮筋方向上的位移r。(就是以小鸟初始位置为原点的,对该位置的极坐标描述)
使用特技的位置,其实仅仅由距离释放时刻的时间差决定,所以第三个输入参数就是这个时间差t.
假设有n只小鸟,系统可以量化为:
(θ1,r1,t1,θ2,r2,t2,...,θn,rn,tn) ====>???未知系统内部??? ====>得分
由于这个系统是非线性的,所以一点的偏差之后的结果可以截然不同(蝴蝶效应)。
上面其实都是废话。。。 关键问题在于系统内部是对我们是未知的。
通过解决这个未知可有以下两个方案:
方案一:查看源码,得出它背后的公式,然后再对每一个关卡建模写方程,最后求解(八成是要用数值方法求解的)
方案二:对每一个关卡运行多次,收集数据,作曲线拟合得出经验公式。
如此分析这个游戏,想必你已经觉得我很蛋疼了(我也觉得自己蛋疼),利用上面两种方案就更2了,建议您也不要尝试,价值不大,除非您真的非常感兴趣。
但是,世界上不是所有问题必须已知才可以被解决的。如何避开这个未知的系统解决这个最优解的问题呢?以下两个方案都是比较可行的,但是您得会编程。
方案三:穷举法。穷举 (θ1,r1,t1,θ2,r2,t2,...,θn,rn,tn),然后仿真,最大分值的解就是最优解。(对于一两个鸟就可以搞定的这个可以考虑)
方案四:遗传算法( )。通过遗传算法,建立 (θ1,r1,t1,θ2,r2,t2,...,θn,rn,tn) 种群,然后通过许多代随机的淘汰、遗传和变异,最终可以得出最优解。(判据和初始参数的设置很重要,否则可能会陷入局部的最优而不是全局的)
总结哥:
作为一个游戏嘛,还是用我们的手指算法去寻找最优解才会有意思。只有 Henry这样蛋疼的nerd才会为遗传算法的求解而兴奋到睡不着觉。
Q&A;:
Q: 1星 2星 3星
A: 通过观察得知,纯粹由分数决定,不同关卡根据难度有不同的阈值。
Q: tnt的作用,击碎木板时掉落的作用等等?
A: 这些物理方程都是在源码里写定的,我不知道,如果有看过源码的高人,一定要补充啊~
参考资料:
[1] 有个蛋疼的米国人对飞行过程进行了量化分析,其结论很欢乐:5米高的弹弓+70厘米高又大又愤怒的鸟。(哈哈~ 建议游戏译名改成:愤怒的大鸟)
英文原版://2010/10/-of-angry-birds/
中文译版:/.html
评论(0)