导航菜单
首页 » 问答 » 正文

愤怒的小鸟的关卡如何保证有解?怎么确定最优解?

愤怒的小鸟的关卡如何保证有解?

身边有几个人都将所有关卡都拿到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)

二维码