2014-04-10 63 views
0

我已經在一個文件中這個類/函數名爲 「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()作爲參數。任何反饋/想法都會感激!

+0

我不完全理解你的代碼,但它似乎並沒有做任何感覺可以在'add_entity'中創建一個新的'Grid'。可能你想使用存儲在你的'WorldModel'實例中的一個'Grid'實例,比如'world.occupancy'。 – Blckknght

+0

這是因爲add_entity使用「set_cell」。 (我們必須修改occ_grid.py中的代碼,並且在將它作爲類Grid的一部分之前,它是該類的一個函數)因此,因爲set_cell現在是類Grid的一個方法,所以我必須創建一個對象在add_entity中。 – Karen

+0

當然,你需要一個實例,但是如果你只是將它扔掉,從頭開始創建一個實例是沒有意義的。 'set_cell'只修改'Grid',而不是其他任何東西,所以如果你首先不需要'Grid',你應該放棄對它的調用。如果你正在修改一個現有的Grid,像'world.occupancy.set_cell(...)'' – Blckknght

回答

1

def __init__(self, width, height, occupancy_value),你可以看到selfwidthheightoccupancy_value需要傳遞。現在

self將已經在那裏住了你,但你需要在其他3通過像這樣:

occupancy_value = # Whatever initial value you want all the cells to have 
width = # Whatever width you want 
height = # Whatever height you want 
obj = occ_grid.Grid(width, height, occupancy_value) 
+0

好吧。所以,我可以做一些事情:obj = occ_grid.Grid(0,0,0)?? – Karen

+0

是的。然而,這意味着你將有一個0乘0的網格,這可能有用或不可用(可能沒有用)。 – s16h

+0

哦,等等,或者,將寬度/高度作爲實際播放屏幕的寬度/高度會更合乎邏輯嗎? – Karen

相關問題