Skip to content

D1vergence/grimoire

Repository files navigation

Grimoire!

一图胜千言:

Alt text

环境要求

  • windows | linux

  • python3

  • pip install pygame

关于各个文件:

  • 「unit.py 」定义了单位的基本属性和除英雄外的单位。

  • 「effect.py 」定义了效果的基本属性和所有效果。

  • 「magic.py 」定义了魔法的基本属性和所有魔法。

  • 「hero.py 」定义了英雄,英雄是继承自单位的单位。

  • 「ctrl.py 」定义了控制器,是玩家直接控制单位的手段。

  • 「damage.py 」定义了伤害,提供伤害的类型和处理。

  • 「ev.py 」定义了事件,事件是重要的机制。

  • 「model.py 」定义了模型。

  • 「map.py 」定义了地图。

  • 「fantasy.py」定义了梦幻,梦幻是魔法和效果的共同基类。

关于处理的主要机制:

  • 所有的判断都仅由单位身上的「效果」进行处理。

  • 每个行为都会抛出事件,事件由效果处理,由此修改一个事件或是生成新事件。

  • 举例:

    • 单位受到伤害时,产生事件「单位受伤害」,并告知每个效果。此时「法术护盾」将事件改变,将伤害数值减少。 在所有的效果处理结束后,根据最后的数值减少单位的生命。

    • 单位受到伤害时,产生事件「单位受伤害」,并告知每个效果。此时「战争狂热」不改变原有事件,但是生成新事件「减少所有技能的冷却时间」

关于单位:

  • 单位是游戏的主要成员。

  • 单位有生命值、魔法值、魔法回复、体积、移动速度、持有魔法、持有效果、经验值等属性。

  • 单位可以被操作。

  • 关于单位方法:

    无下划线的是接口,只能抛出事件。

    有下划线的是处理,会进行真正的处理(请不要直接调用他们)。

    以die为例:

      def die(self):
      	ev.ev(self,'_die')
      def _die(self):
      	self.iki=False
    

    die方法想要调用_die方法,于是生成事件。但是事件经过效果之后,有可能消失(比如薄葬),最后不一定会调用_die。

关于模型:

  • 单位和效果独自拥有模型,在单位或效果消亡时模型就消亡了。此外,指定时间的模型也会自己消亡。

  • 效果的模型的owner属性指向效果所属单位。

关于魔法:

  • 魔法有吟唱时间、冷却时间、施法距离等属性。

  • 魔法是指令的集合。

  • 调用魔法时,使用所属单位的cast方法,该方法给施法单位添加吟唱效果,吟唱效果结束时该效果会调用对应魔法的act方法。

  • 魔法分为无指向的、指向单位的、指向位置的。

关于伤害:

  • 伤害有伤害值、伤害来源、伤害类型等属性。

  • 伤害类型包括魔法(magic)和物理(physics),可以任意指定,但进行对应的处理才是有意义的。

  • 伤害的来源是魔法或效果,而不是单位。

  • 伤害的来源单位可通过该类的方法发现。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages