在简单的2D Python游戏中更新角色的位置

2024-09-27 23:22:12 发布

您现在位置:Python中文网/ 问答频道 /正文

请帮助我编写程序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变量


Tags: or代码nonereturnifdeflineglobal
3条回答

首先要解决一些问题:当您两次分配一个变量时,第一个变量也可能不被分配。 我的建议是将位置的更新从地方的旗帜(你想要的东西的含义)分离到它在世界上的位置

例如,如果要在x,y插入新的状态newstate:

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的检查永远不会发生,因为您首先返回在那里找到的内容

如果你这样做

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

那么这不会更改worldMap的元素。此语句将worldMap的元素获取并转换为局部变量locn,然后更改变量locn

必须为worldmap的元素赋值:

def updateMap(x,y,newState):
    worldMap[y][x] = newState
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

相关问题 更多 >

    热门问题