我已經在一個文件中這個類/函數名爲 「worldmodel.py」:當我創建一個對象時,我作爲參數傳遞了什麼?
import entities
import pygame
import ordered_list
import actions
import occ_grid
import point
class WorldModel:
def __init__(self, num_rows, num_cols, background):
self.background = occ_grid.Grid(num_cols, num_rows, background)
self.num_rows = num_rows
self.num_cols = num_cols
self.occupancy = occ_grid.Grid(num_cols, num_rows, None)
self.entities = []
self.action_queue = ordered_list.OrderedList()
def add_entity(world, entity):
obj = occ_grid.Grid()
pt = entities.get_position(entity)
if within_bounds(world, pt):
old_entity = occ_grid.get_cell(pt)
if old_entity != None:
entities.clear_pending_actions(old_entity)
obj.set_cell(pt, entity)
world.entities.append(entity)
而且我有一個名爲 「occ_grid.py」 文件中的另一個類/方法:
# define occupancy value
EMPTY = 0
GATHERER = 1
GENERATOR = 2
RESOURCE = 3
class Grid:
def __init__(self, width, height, occupancy_value):
self.width = width
self.height = height
self.cells = []
# initialize grid to all specified occupancy value
for row in range(0, self.height):
self.cells.append([])
for col in range(0, self.width):
self.cells[row].append(occupancy_value)
def set_cell(self, point, value):
self.cells[point.y][point.x] = value
如果你看def add_entity
正文中的第一行代碼,你會看到我創建了一個對象,因此我可以使用set_cell
,這是一個從occ_grid.py
開始的方法。我不確定的是什麼傳遞給occ_grid.Grid()
作爲參數。任何反饋/想法都會感激!
我不完全理解你的代碼,但它似乎並沒有做任何感覺可以在'add_entity'中創建一個新的'Grid'。可能你想使用存儲在你的'WorldModel'實例中的一個'Grid'實例,比如'world.occupancy'。 – Blckknght
這是因爲add_entity使用「set_cell」。 (我們必須修改occ_grid.py中的代碼,並且在將它作爲類Grid的一部分之前,它是該類的一個函數)因此,因爲set_cell現在是類Grid的一個方法,所以我必須創建一個對象在add_entity中。 – Karen
當然,你需要一個實例,但是如果你只是將它扔掉,從頭開始創建一個實例是沒有意義的。 'set_cell'只修改'Grid',而不是其他任何東西,所以如果你首先不需要'Grid',你應該放棄對它的調用。如果你正在修改一個現有的Grid,像'world.occupancy.set_cell(...)'' – Blckknght