我和朋友正在用Java编写一个包含很多项目的游戏。每个项目都有一些我们将存储在数据库中的静态属性。但是,物品也具有特殊效果的特殊能力。通常这些效果是非常独特的,因此它们在项目的定义中实现是有道理的。
由于这些项目存储在数据库中,我们一直在尝试决定如何加载这些特效。什么是理想的是具有类似于下面的项目定义:
名称狗
尺寸 5
说明如果玩家健康状况低于50%,则对周围玩家造成伤害
效果 if(currentplayer.health < 50) { entities.groups.surrounding.reduceHealth(20);}
我们一直在讨论两种不同的解决方案。第一种是以某种方式在数据库中编译和存储java代码,另一种是实现LUA。不幸的是,我们都没有LUA的经验,也不确定这是否可行。另一方面,预编译的java解决方案看起来有点像hacky&#39;。除此之外,我们可以预见大型会员电话链的问题,例如: a.player.head.hat.size.width.increase(1)
我想知道的是:
答案 0 :(得分:1)
您是否考虑过创建参数化装饰器(或其他方法)并简单地将参数存储在数据库而不是功能中?它会使数据库布局方面有点粗糙,但它可以避免存储源代码或实现脚本语言。
例如,您可以通过特殊能力实例使每个item
实体与special_ability
具有一对多的关系。此外,这些special_ability_assignments
中的每一个都与参数具有一对多的关系。
这意味着您可以为Steel Sword of Rage
Rage
提供具有参数25
和200
的{{1}}特殊功能。当玩家的生命值低于25%时,你的Rage
装饰者会修改武器的效果,使攻击力提高200点。
同样,您的Mithril Sword of Rage and Bleed
可以拥有Rage
特殊能力,30/250(健康时+250 PAtk&lt; = 30%)和Bleed
特殊能力,20/10 / 50每次打击有20%的几率造成出血,每秒造成10点伤害,每次出血造成50%的腐烂。
这当然会使你的数据库变得越来越复杂(尽管我觉得它适合你正在尝试做的事情的复杂性)而且你不得不滥用反思(好吧,你不必这样做) - 它只是最简单的方法[并且可能最容易维护])。幸运的是,你可以在游戏启动时加载一次项目,而你只需要担心一次性能问题/类型检查问题。
答案 1 :(得分:0)
根据你发布的更好的内容很难说,虽然使用th3 Lua路径你可以运行存储的代码,而使用java路径你必须在加载时编译java。
如果你搜索&#34;在java中嵌入Lua&#34;你会发现几个不同的java库,使Lua易于使用,如luaj,Lua java,khalua,mochalua等。使用哪个将取决于你想做什么的具体情况,所以你必须试试其中一些。
Lua是易于学习的语言。