OOPスタイルを使用してPythonで単純なゲームを作成しようとしています。 親クラスが設定され、主人公とorkの2つのサブクラスがあります。Pythonでオブジェクトのプロパティを更新するOOP
基本的に、主人公がorkを攻撃した場合(またはその逆の場合)、私はその被害に基づいて状態を更新したいと考えています(被害は攻撃するキャラクターの能力です)。現在、ループするたびに、元の状態に戻ります。
OOPを使用してこれを行う最良の方法は何ですか?手続き的で面倒なやり方でそれをどうやって行うのかを理解することができますが、どうすればいいのか見てみたいと思います。
class Character:
'''Blueprint for game characters'''
def __init__(self):
#default values
self.character = ""
self.speed = 0
self.power = 0
self.health = 100
def attack(self, attackObj):
self.attacker = self.character
self.attackerPower = self.power
self.victim = attackObj.character
self.victimHealth = attackObj.health
self.newHealth = self.victimHealth - self.attackerPower
print(self.character, "you have chosen to attack", self.victim)
print(self.victim, "you have suffered", self.attackerPower, "damage and your health is now", self.newHealth)
class Hero(Character):
'''Inherits from character to create hero'''
def __init__(self):
Character.__init__(self)
self.character = "Hero"
self.speed = 8
self.power = 9
print(self.character, "you have",self.speed, "speed,", self.power, "power and", self.health, "health.")
class Ork(Character):
'''Inherits from character to create ork'''
def __init__(self):
Character.__init__(self)
self.character = "Ork"
self.speed = 2
self.power = 8
print(self.character, "you have",self.speed, "speed,", self.power, "power and", self.health, "health.")
def main():
charclass = Character()
hero = Hero()
ork = Ork()
endLoop = False
while endLoop == False:
print("Please choose your character by typing the corresponding key: ")
print("H for hero")
print("O for ork")
charChoice = input()
if charChoice in ("H", "h", "hero", "Hero"):
charChoice = hero
enemy = ork
hero = Hero()
elif charChoice in ("O", "o", "ork", "Ork"):
charChoice = ork
enemy = hero
print("Please choose an action by typing the corresponding key: ")
print("A to attack")
actionChoice = input()
if actionChoice in ("A", "a"):
charChoice.attack(enemy)
else:
print("Nothing chosen!")
finishedYN = input("Have you finished? Y/N ")
if finishedYN in ("Y", "y", "Yes", "yes", "YES"):
print("You have chosen to end the game...")
endloop = True
break
else:
pass
if __name__ == "__main__":
main()
私はあなたのコードを実行していませんが、ループの繰り返しごとに新しい 'Hero'オブジェクトを作成しているようです:' hero = Hero() '。 –
また、なぜあなたはこれをしますか? 'self.victimHealth = attackObj.health'?あなたはあなたのクラスのすべてに '自己 'を加えていますか? –
私はその行を削除しました(以前の遺物だったはずです)が、プログラムの残りの部分には影響しません。まだ元の状態に戻ります。攻撃者のパワープロパティを被害者に送信し、これを健康から除外し、次の反復でそれを覚えておくための何らかの方法が必要です。私が言ったように、私は面倒で手続き的なやり方でそれを行うことができましたが、誰かが私に正しいOOP方法を教えてくれるようにしたいと思います。 –