gpt4 book ai didi

python - 基于django的技能实现

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:12 25 4
gpt4 key购买 nike

我正在使用 django 开发一个角色扮演游戏,并且正在考虑实现部分技能系统的不同选择。

假设我有一个基础技能类,例如:

class Skill (models.Model):
name = models.CharField()
cost = models.PositiveIntegerField()
blah blah blah

实现特定技能的一些方法是什么?想到的第一个选项是:

1) 每个技能都扩展了技能等级并且 覆盖特定功能:

不确定这在 Django 中如何工作。似乎每个技能都有一个数据库表会有点矫枉过正。子类可以是抽象的,而技能类有一个条目吗?听起来不对。使用代理类怎么样?

还有哪些其他选项。我想避免使用纯 Django 方法的脚本方法。

最佳答案

或许您可以考虑将技能与其相关效果分开。更有可能的是,技能最终会产生一种或多种与之相关的效果,并且这种效果可能会被多种技能使用。

例如,效果可以是“对当前目标造成 N 霜冻伤害”。该效果可以被技能“暴风雪闪电”、“冰霜冲击”和“冰冷新星”使用。

模型.py

class Skill(models.Model):
name = models.CharField()
cost = models.PositiveIntegerField()
effects = models.ManyToManyField(Effect)

class Effect(models.Model):
description = models.CharField()
action = models.CharField()

# Each Django model has a ContentType. So you could store the contenttypes of
# the Player, Enemy, and Breakable model for example
objects_usable_on = models.ManyToManyField(ContentType)

def do_effect(self, **kwargs):
// self.action contains the python module to execute
// for example self.action = 'effects.spells.frost_damage'
// So when called it would look like this:
// Effect.do_effect(damage=50, target=target)
// 'damage=50' gets passed to actions.spells.frost_damage as
// a keyword argument

action = __import__(self.action)
action(**kwargs)

效果\spells.py

def frost_damage(**kwargs):
if 'damage' in kwargs:
target.life -= kwargs['damage']

if target.left <= 0:
# etc. etc.

关于python - 基于django的技能实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1836881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com