在简单的二维Python游戏中更新角色的位置。

问题描述 投票:0回答:1

请帮我写一下程序 updateLocn(x,y,state) 以便将地图中(x,y)处的字符改为所选状态。我试着自己写了一下,但是不行。

T=树; G=偷你东西的妖精; g=装金子的盒子; ~=河流; w=墙; -=地板; b=空盒子; = =锁住的门; k=锁住的门的钥匙; *=出口门。

worldMap = [
"TTTT TTTT g  wwwwwwwwwwwwwwww",
"T        gT  w----=---b--=bgw",
"TTTTGTTT     =----w------w-gw",
"TTTTTTTTTTT kwwwwwwwwwwwww*ww",
"~~~~~~~~~~~~~~~~~~~~~~~~~T TT",
"~~~~~~~~~~~~~~~~~~~~~~~~~T TT",
"                    ~~~~~    ",
"                    ~~~~~    "]

def printMap():
    global worldMap 
    for line in worldMap:
        print(line)

def getLocn(x,y):
    global worldMap
    locn = worldMap[y][x]
    return locn
    if x < 0 or y < 0:
        return None

def describeLocn(x,y):
    global worldMap
    locn = getLocn(x,y)
    if locn == "T":<br/>
        return ("Dense forest")
    elif locn == "t":
        return ("Light woods")
    elif locn == "w":
        return ("Wall")
    else :
        return ("Meadows") 
    if x < 0 or y < 0:
        return None  
def updateMap(x,y,newState):
    global worldMap
    locn = getLocn(x,y)
    locn = newState
    newState = list(worldMap)
    worldMap = ''.join(newState)

最后一个过程是我的试用代码。我应该在这里使用x,y,newState变量。

python python-3.x pygame 2d
1个回答
0
投票

首先是一些问题:当你把一个变量赋值两次时,第一个变量还不如不赋。我的建议是把位置的更新从地方的标志(你想在那里有什么的意思)到它在世界中的位置分开。

例如,如果你想插入一个新的状态newstate在x,y。

def updateLocn(x,y,newstate):
    global worldMap
    If x<0 or y<0:
        Handle the exception(usually using raise IndexError(errorstr))
    worldMap[y][x]=newstate 

这应该可以和你处理负索引的方法一样。请记住,当你访问一个列表的元素时,改变它不会改变列表。你必须在正确的索引处改变列表。

此外,检查参数应该在前面,而不是最后。在getlocn中,x,y的检查永远不会发生,因为你首先返回你在那里找到的任何东西。


0
投票

如果你做了

locn = worldMap[y][x]
locn = state

那么这并没有改变 worldMap. 这个语句得到和元素的 worldMap 到本地变量 locn 然后是变量 locn 被改变。

你必须给元素的 worldmap:

def updateMap(x,y,newState):
    worldMap[y][x] = newState

0
投票
worldMap = [
"TTTT TTTT g  wwwwwwwwwwwwwwww",
"T        gT  w----=---b--=bgw",
"TTTTGTTT     =----w------w-gw",
"TTTTTTTTTTT kwwwwwwwwwwwww*ww",
"~~~~~~~~~~~~~~~~~~~~~~~~~T TT", 
"~~~~~~~~~~~~~~~~~~~~~~~~~T TT",
"                    ~~~~~    ",
"                    ~~~~~    "]
for line in worldMap:
    print( line )
def printMap():
'''Display the wolrdMap'''
    global worldMap 

for line in worldMap:
    print(line)

def updateMap(x,y,state):
'''To change an object at a location'''
    global worldMap
    worldMap[y] = worldMap[y][:x] + state + worldMap[y][(x+y):]

    for line in worldMap:
        print(line)

    if x < 0 or y < 0:
        raise IndexError
© www.soinside.com 2019 - 2024. All rights reserved.