我想创建一个x-y坐标系,即使这应该是一个文本RPG,以便跟踪所有内容。所以,我正在尝试制作一个函数并测试该函数,让角色在x-y网格上移动,但是,无论我尝试什么,我都无法使它工作。这是代码: class Player:
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 :(得分:0)
每次迭代都会获得相同的坐标,因为while
循环中的值不会发生变化。在character.position_x
内增加movement
永远不会更改character.position_x
循环中while
的值,因为它超出了您的global
scope。如果您希望当前逻辑保持不变,则必须在 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
输出
mycode
在函数中将global
声明为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)
循环范围内,因此< / p>
>>>[evaluate untitled-1.py]
no codez
gimme teh codez: codez!
codez!
导致输出
{{1}}