我正在制作像涂鸦跳跃这样的Android游戏。 到目前为止,我使用一定比例的不同类型的平台随机创建每个级别:
f.e。
现在,我创建了各种适当的数量,随机播放,然后我遍历列表以捕捉任何不一致。就好比如果有两个突破平台,我不能从一个跳到另一个。 我还在平台上放置物体以跳得更高。 如果有一个对象,则以下平台应该更远。
这一切都有效,但它只是被黑客攻击,并且我想要添加的内容越来越复杂。
有没有办法用A.I.来解决这个问题?我可以拥有一套规则的东西,它会生成一个遵守这些规则的随机平台/对象组合? 有人能指出我正确的方向吗?
修改
我没有看到状态机解决方案工作的一个案例是,当我创建阵型时:稳定,破裂,稳定,我无法从1到达平台3.然后我将不得不在平台上添加弹簧1但是在创建第一个平台时,我对下一个状态一无所知。有什么想法吗?
假设我处于状态并且有3种不同的转换选项:在我的情况下转换是什么?我是否必须随机选择下一个州并检查这是否是一个选项(根据我的百分比)?
@Carlos:你说:“对象集合,可以按类别排序,因此规则可以是面向类别的”。 你是什么意思?
答案 0 :(得分:5)
关于对象生成,肯定你必须改变你的方法,因为控制器中的模型逻辑太多了,更重要的是,因为那个逻辑可能会改变,你会变得疯狂改变它并测试再一次。
我要做的是一个充当对象工厂的课程。在其中,您将拥有一个状态机,即一组代表当前状态的变量,以及一系列定义接下来会发生什么的规则。
在第一种方法中,考虑一下你的平台,我会:
所以,当你构建这个世界时,你不需要制作一个随机数组,然后用硬编码逻辑对所有内容进行排序,而是要求工厂自己初始化,然后在循环中,你继续要求下一个对象,你确定它是一个有效的对象。
然后,如果更改或添加新逻辑或限制,则只需更新已有的结构,添加或修改条目。
更重要的是,您可以尝试构建一个人类可读的文件,例如xml,您可以在其中定义对象集合,以及它们之间的限制关系,然后构建一个引擎来解析它并将其转换为java数据结构,所以你可以非常友好地改变这种逻辑。
通过这种方式,您可以构建一个可扩展且易于维护的代码。
<强>更新强>
当你有一个可能需要修改的对象,具体取决于下一个时,你可以用两种方式来支付它(首先我会想到):
当你设计规则时,你发现大多数事情都是允许的,不要让自己复杂化:你可以创建规则作为例外列表,我的意思是,下一个状态可能是任何一个,同时你的规则表中没有任何明确的禁止它。此外,您可以混合使用这两种规则。例如,如果对于一种对象,一切都被允许但只有一件事,你可以将该规则放在禁止的事物表中。如果对于其他元素,相反,几乎所有内容都被禁止,您可以将允许的内容放在允许的事物表中。 这样,当你打算为下一个服务时,你会看到当前状态,然后检查两个表:
如果您有多种可能性,则选择任何可用对象。请记住,您根据百分比在开头生成了完整的集合,因此您在此时选择的任何一个集合也将完成您的基数规则。
此外,请记住,这可能会导致最终阻塞情况:当您接近结束时,因此您没有剩余的对象,可能您会发现没有任何一个可用对象有效。此时你可以决定
*关于我什么时候说
&#34;对象的集合,可以按类别排序,所以 规则可以是面向类别的&#34;。
我的意思是你可以拥有与特定对象相关的规则,例如
另外,请记住,您需要的东西太多了:一个是我描述的对象工厂,以生成一个有效的世界(因为它是您主要关注的问题),但是您需要一个完全不同的系统来表示应用程序的生命周期正如Junior Buckeridge所描述的那样循环。
所以,总而言之,我知道这一切看起来都像是疯狂,但我可以说,对于我来说,你处于任何可能发展的一个更有趣和最有趣的部分之中。毕竟,当你把所有东西放在一起时,你会看到你想象的世界,就像魔法一样!
答案 1 :(得分:0)
我认为你取得了很好的进步,而且随着你为游戏添加“魔力”,它变得更加复杂。 根据我的经验,游戏中较难的部分是为物体,敌人和英雄设计规则。
为此,状态机图(如Mealy或Moore)应该提供您需要的东西。如果你的模型变得更复杂,或者你正在转向类似事件的编程模型,你可以尝试基于系统的马尔可夫链。
一旦掌握了这一点,你就开始构建游戏的主循环,这应该是:
循环:
循环直到状态中断
之后你可以添加一些多线程,但我建议你先在功能上取得进步,然后提高性能。
继续。 问候。