2015-03-31 121 views
1

我想創建一個x-y座標系,儘管這應該是一個文本RPG,以便跟蹤所有內容。所以,我正在做一個函數和測試,讓角色在X-Y網格上移動,然而,無論我嘗試什麼,我都無法使它工作。下面是代碼: 類球員:Python 2遊戲座標類

def movement(charactor_movement): 
     proceed = 0 
     if charactor_movement == "left": 
      character.position_x = character.position_x - 1 
      proceed = 1 
     elif charactor_movement == "right": 
      character.position_x = character.position_x + 1 
      proceed = 1 
     elif charactor_movement == "forward": 
      character.position_y = character.position_y + 1 
      proceed = 1 
     elif charactor_movement == "backward" or charactor_movement == "back": 
      character.position_y = character.position_y - 1 
      proceed = 1 
charactor = Player() 
charactor.position_x = 0 
charactor.position_y = 0 
proceed = 0 
while proceed == 0: 
    print "You are at", 
    print charactor.position_x, 
    print"x and", 
    print charactor.position_y, 
    print"y." 
    global charactor_movement 
    charactor_movement = raw_input("Where are you going?") 
    charactor.movement() 

在這一點上,它做的事情是應該做的最多變化的座標,它打印"You are at 0 x and 0 y""Where are you going?"不管我型。我曾嘗試添加一個else到它默認的功能,無論我輸入什麼,並給我"Sorry, I cannot understand you."任何關於修復或通常改進代碼的意見,將不勝感激。 (注:爲了使測試我故意沒加的方式,退出類是什麼,我需要固定的。)

回答

0

你得到與每個迭代相同的座標,因爲你while循環內你的價值觀並沒有改變。在movement內增加character.position_x將永遠不會在您的while循環內更改character.position_x的值,因爲它在功能的scope之外。你必須使用global關鍵字你的movement函數爲你正在改變的每個變量,如果你想你現有的邏輯保持不變。另外,爲什麼不將charactor_movement作爲參數傳遞給您的movement函數,而不是像您目前正在使用的那樣使用global


一個最小的例子:

考慮以下幾點:

def somefunct(x): 
    mycode = x 

mycode = 'no codez' 
while True: 
    print mycode 
    codez = raw_input('gimme teh codez: ') 
    somefunct(codez) 

其輸出

>>>[evaluate untitled-1.py] 
no codez 
gimme teh codez: codez! 
no codez 

聲明mycodeglobal在功能放在它分配當while循環的範圍內,從而

def somefunct(x): 
    global mycode #make variable global here 
    mycode = x 

mycode = 'no codez' 
while True: 
    print mycode 
    codez = raw_input('gimme teh codez: ') 
    somefunct(codez) 

導致輸出

>>>[evaluate untitled-1.py] 
no codez 
gimme teh codez: codez! 
codez!