モンスタークラス2
なんだか、昨日の日記を間違えて消していたみたいです…。
それはともかく、モンスタークラスをさらに改造。
ダメージの受け渡しをオブジェクトに設定する。
Damageクラス。<damage.py>
class Damage: def __init__(self): self.kind = 0 self.value = 0 self.special = 0 def setDamage(self, kind, value, special): self.kind = kind self.value = value self.special = special # define # kind ATTACK = 0 MAGIC = 1 DEFENSE = 2 RECOVER = 3 ESCAPE = 4 # special NOMAL = 0 POISON = 1 PARALYSIS = 2
kindがダメージの種類。(攻撃・魔法・防御・回復・逃げる)
valueがダメージの量。
specialが特殊ダメージ。(毒・麻痺)
続いて、Monsterクラス。<monster.py>
メッセージや死亡判定など、共通化できるもののみ実装。
from damage import Damage class Monster: def __init__(self, name, hp, power): self.name = name self.hp = hp self.power = power def attack(self): print self.name, "の攻撃" def magic(self, spell): print self.name, "は", spell, "を唱えた" def damage(self, damage): if(damage.kind == damage.ATTACK): print self.name, "は", damage.value, "のダメージを受けた" self.hp -= damage.value elif(damage.kind == damage.MAGIC): print self.name, "は", damage.value, "のダメージを受けた" self.hp -= damage.value ret = self.isDead() if(ret == False): if(damage.special == damage.POISON): print self.name, "は毒を受けた" return ret def isDead(self): if(self.hp < 1): print self.name, "は死んでしまった" return True return False def escape(self): print self.name, "は逃げ出した"
このモンスタークラスを継承して、
Slimeクラスを作成する。<slime.py>
特殊攻撃の逃げるを実装する。
from monster import Monster from damage import Damage import random class Slime(Monster): def attack(self, damage): if(self.hp < 3 and random.randint(0, 3) == 0): Monster.escape(self) damage.kind = damage.ESCAPE else: Monster.attack(self) damage.setDamage(damage.ATTACK, self.power, damage.NOMAL) return damage
もう一つ、魔導師を実装。<magician.py>
from monster import Monster from damage import Damage import random class Magician(Monster): def attack(self, damage): if(random.randint(0, 5) == 0): Monster.magic(self, "メラ") damage.setDamage(damage.MAGIC, 5, damage.NOMAL) else: Monster.attack(self) damage.setDamage(damage.ATTACK, self.power, damage.NOMAL) return damage
最後にドライバ。<main.py>
from slime import Slime from magician import Magician from damage import Damage enemy1 = Slime("スライム", 10, 3) enemy2 = Magician("魔導師", 20, 1) damage = Damage() print "-->", "戦闘開始" while True: damage = enemy1.attack(damage) if(damage.kind == damage.ESCAPE): break if(enemy2.damage(damage)): break damage = enemy2.attack(damage) if(damage.kind == damage.ESCAPE): break if(enemy1.damage(damage)): break print "-->", "戦闘終了"