私には2つのクラスがあり、最初のクラスには関数move(creature、board)があります。次に、クリーチャークラスにmoveを呼び出す関数があるので、クリーチャークラスにいる間に現在のクリーチャーをmove関数に渡すにはどうすればよいですか?それはmove(self、self.board)である必要があります。これを試してみると、「インポートからの未定義の変数:move」エラーが発生するためです。
関連するコードは次のとおりです。
生き物:
class creature:
def __init__(self, social, intelligence, sensory, speed, bravery, strenght, size):
self.traits = [social, intelligence, sensory, speed, bravery, strenght]
self.x = 0
self.y = 0
self.hunger = 10
self.energy = 30
self.shelter = 0
self.dominance = 0
self.boardSize = size - 1
self.SOCIAL = 0
self.INTELLIGENCE = 1
self.SENSORY = 2
self.SPEED = 3
self.BRAVERY = 4
self.STRENGTH = 5
...
def performAction(self, action, location):
...
if action == "storeFood":
food = location.vegetation
location.vegetation = -1
simulation.move(self, self.shelter)
self.shelter.foodStorage += food
...
シミュレーション:
class simulation():
def __init__(self, x):
self.creatures = {creature.creature():"", creature.creature():"", }
self.map = land.landMass
self.lifeCycles = x
self.runStay = ["rfl", "rbf", "rbl", "rbf", ]
self.befriend = ["bbl", "bbf"]
self.fight = ["fbl", "fbf", "bfl", "bff", "ffl", "fff"]
...
def move(self, creature, target):
map[creature.x][creature.y].creatures.remove(creature)
creature.energy -= abs(map[creature.x][creature.y].elevation - target.elevation) / creature.getSpeed()
target.creatures.append(creature)
creature.x, creature.y = target.location
...
編集:OK、それで私は問題をいくらか解決しました。Pythonではsimulation.simulation.map(self, self.shelter)
、クラスファイルだけでなく、そのクラスのインスタンスも必要であると想定している必要があります。したがって、新しい質問は、そのインスタンスを別の場所に作成してから渡す必要があるかどうかです。それとも、これはどこか別の場所のシミュレーションのインスタンスで機能しますか?