-1

ということで、テキストアドベンチャーゲームを作っていて、現在敵を作っています。私のクラス random_enemies は、キャラクターが戦うためのトラッシュモブを作成します。その中には、弱い、通常、強いなどと呼ばれる関数があり、それがどれであるかに応じてキャラクターに合わせてスケーリングされます。random_enemies.weak を呼び出すと、(名前エラー: グローバル変数 "p" が定義されていません) と表示されます。

import random
from character import *
from player import *

class random_enemies(character):
    def __init__(self,name,hp,maxhp,attack_damage,ability_power,exp):
        super(random_enemies,self).__init__(name,hp,maxhp)
        self.attack_damage = attack_damage
        self.ability_power = ability_power
        self.exp = exp
    def weak():
        self.hp = random.randint(p.maxhp/10, p.maxhp/5)
        self.attack_damage = None
        self.ability_power = None
        self.exp = None



from character import*
class player(character):
    def __init__(self,name,hp,maxhp,attack_damage,ability_power):
        super(player,self).__init__(name, hp, maxhp)
        self.attack_damage = attack_damage
        self.ability_power = ability_power

これは私のプレーヤー クラスで、以下はプレーヤーが「maxhp」を取得するクラスです。

class character(object):
    def __init__(self,name,hp,maxhp):
        self.name = name
        self.hp = hp
        self.maxhp = maxhp
    def attack(self,other):
        pass



p=player(Players_name, 100, 100, 10, 5,)
while (p.hp>0):
    a=input("What do you want to do?")
    if a=="Instructions":
        Instructions()
    elif a=="Commands":
        Commands()
    elif a=="Fight":
        print("Level",wave,"Wave Begins")
        if wave < 6:
            b = random_enemies.weak()
            print("A",b,"Appeared!")
            print("Stats of",b, ": \n Health=", b.hp,"Attack Damage=",b.attack_damage)
            continue

エラーが発生するまで、すべてが機能しているかどうかをテストするために、これを非常に迅速に作成しました。これは、random_enemies.weak() が呼び出された場所でもあります。また、ここで「p」とは何かを定義しました。

4

1 に答える 1

2

したがって、まず、命名規則に従います。Python コードでは、規則としてpep8を使用することをお勧めします。

コード内のクラスとインスタンスに問題があります。まず、使用する前にクラスのインスタンスが必要です。

enemy = random_enemy()  # a better name would be RandomEnemy

Python では、すべてのメソッドは で始まり、selfその作業を行うために必要な引数をメソッドに渡す必要があります。weakはメソッドなので、次のようにする必要があります。

def weak(self, player):
   # the method for weak ... weak attack ?
   # remember to change p to player, which is more meaningful
   ...

インスタンスが作成され、引数としてweakを受け取るメソッドplayerが作成されたので、次のように使用できます。

# you can't use random_enemy here as you tried because it is a class
# you need a random_enemy instance, the enemy that I talked about earlier
b = enemy.weak(player)  # renamed p to player because it is more meaningful

これをすべて機能させるには、もう 1 つ必要なことがあります。weak()何かを返す必要があります。現在、あなたはそれが返すものを使用していますが、何もありません! あなたが投稿したコードはb = random_enemies.weak(). には句weak()がないため、常に になります。returnbNone

iいくつかの注意事項: 長年の慣習 ( for ループ カウンターの使用など) がない限り、1 文字の変数は避けてください。playerの代わりに定義すると、何をしようとしているのかを理解しやすくなりますp

Python には、これらすべてに関する非常に優れたチュートリアルがあります。

于 2013-11-16T20:21:07.840 に答える