私は練習問題としてテキストベースのゲームを書いています。私はいくつかのランダムなゴブリンを作成し、それらをCurrentEnemyリストに配置するGenerateEnemies関数を持っています。条件が満たされたらリスト内のオブジェクトのインスタンスを削除する方法はありますか?
攻撃機能を使用して、私はヒーローをCurrentEnemyリストのゴブリンに攻撃させ、HPを減少させることができます。
私がしたいことは、敵の健康状態が0以下になると死ぬことです。私は例外 "if self.HP < 0:del(self)"を入れても動作しません。
目的の動作を達成するための正しい構文は何ですか?また、オブジェクトが削除された場合、CurrentEnemy内のものはどうなりますか?オブジェクトが一度入っていたインデックスには何も変わっていないのでしょうか?
import random
CurrentEnemy = []
class Monster(object):
def __init__(self, Name, HP, Damage):
self.Name = Name
self.HP = HP
self.Damage = Damage
**if self.HP < 0:
del(self)**
class Hero(object):
def __init__(self, Name, HP, Damage):
self.Name = Name
self.HP = HP
self.Damage = Damage
def GenerateEnemies():
NumberEnemies = random.randint(0,5)
del CurrentEnemy[:]
i=0
while i < (NumberEnemies+1):
TempMonster = Monster("Goblin", random.randint(15,20), random.randint(1,3))
CurrentEnemy.append(TempMonster)
i = i + 1
i=0
while i in range(0, len(CurrentEnemy)):
print("Goblin " + str(i) + " HP: " + str(CurrentEnemy[i].HP))
print("Goblin " + str(i) + " Damage: " + str(CurrentEnemy[i].Damage))
i = i + 1
def GenerateHero(HeroName, HeroHP, HeroDamage):
return Hero(HeroName, HeroHP, HeroDamage)
MyHero = GenerateHero("Bob", 100, 10)
def Attack(Attacker, Defender):
Defender.HP = Defender.HP - Attacker.Damage
神のために 'snake_case'を使う – BusyAnt
CamelCaseよりもsnake_caseが読みやすくなっていますか?それとも、それがより一般的に広く受け入れられているのでしょうか? – Kos
これはコーディング規則です([PEP8](https://www.python.org/dev/peps/pep-0008/#prescriptive-naming-conventions))。Pythonでは、クラス名は 'UpperCamelCase'と書かれています。変数、関数、メソッドを 'snake_case'に追加しました。そして、開発者がこれらの慣習を尊重していることを知ったとき、コードは即座に読みやすくなります(少なくとも、私にとってはそうです)。 Pythonでは、関数や変数のようにクラスに対して操作を行うことができるため、適切な名前を付けると適切な名前を付けると明確になり、コードは読みやすくなります。 – BusyAnt