首先,我制作了一个游戏,其中地图是一个列表列表:
P1.Cmap = [
['0,'0',0'],
['0,'0',0'],
['0,'0',0'],
]
我有打印功能:
def render(): #render the map to player
P1.Cmap[P1.y][P1.x] = P1.char
j = 40 - len(P1.Cmap)
p = int(j/2)
l = len(P1.Cmap[0])
print('\n' * p)
print('-' * l)
for r in P1.Cmap:
print(''.join(r))
print('\n' * p)
其中P1是玩家对象,char是代表它的角色(X)
我还创建了一个使用给定参数生成地图的函数:
def newMap():
Nmn = input('What is the name of the map? ')
NmSx = input('What is the size you want?(X) ')
NmSy = input('What is the size you want?(Y) ')
Row = []
Map = []
for r in range(int(NmSx)):
Row.append('0')
for c in range(int(NmSy)):
Map.append(Row)
P1.Cmap = Map
print(P1.Cmap)
但是当我将玩家X和Y设置为P1.x = 1,P1.y = 0并且我使用该函数生成地图时,它实际上会打印出来:
0X0
0X0
0X0
而不是"应该" (当我像上面的第一个代码块一样制作地图时):
0X0
000
000
我认为问题不在render()中,而是在newMap()中,但我似乎无法找到它,任何想法?
答案 0 :(得分:1)
您正在通过以下方式创建P1.Cmap
:
Row = []
Map = []
for r in range(int(NmSx)):
Row.append('0')
for c in range(int(NmSy)):
Map.append(Row)
P1.Cmap = Map
但是,这会使Map
等于[Row, Row, Row]
,也就是说,Row
总是引用您在上面使用Row = []
创建的相同列表因此,每当您修改Row
时,更改都会反映在所有三个“行”的Map
中,因为每个“行”都是Row
!.
相反,尝试类似:
X = int(NmSx)
Y = int(NmSy)
Map = [['0' for _ in range(X)] for _ in range(Y)]