2015-03-31 74 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!