首先,如果你想修改您的地图要小心,因为它们是不可变的,你不应该使用字符串行。你将无法修改你的地图 - 你不能完全重写每一行。
因此,我建议你使用这样的:(字符的二维数组)
world_map = [['.']*n_cols for _ in xrange(n_rows)]
要打印阵列,因为它是:
for row in world_map:
print ''.join(row)
现在的探索。如果你想用点来隐藏地图,那么它不是你应该存储在二维数组中的点,而是地图的内容。
所以我们说我创建这个图(以及这些变量):
n_rows = 3
n_cols = 5
world_array = [
['0', '0', '1', '1', '1'],
['0', '2', '0', '1', '0'],
['1', '1', '0', '0', '0']
]
exp_radius = 1 #the player can see 1 square from him
x,y = 1,0 #position of the player
要与周围的玩家一个可见的圆圈显示整个地图 - (X,Y) - 其他地方的点,那么它的像这样:
for r in xrange(n_rows):
row=''
for c in xrange(n_cols):
if c=x and r=y:
row += 'P'
elif abs(c-x)<=exp_radius and abs(r-y)<=exp_radius:
row += world_array[r][c]
else:
row += '.'
print row
这将使你:
0P1..
020..
.....
请注意,如果你喜欢一个菱形拉特呃不是方形:
0P1..
.2...
.....
所以为了清楚起见:
..0..
.000.
00P00
.000.
..0..
此时应更换条件:
elif abs(c-x)<=exp_radius and abs(r-y)<=exp_radius:
由:
elif abs(c-x)+abs(r-y)<=exp_radius:
你”现在已经得到了所有的线索,玩得开心! ;)
编辑:
如果你想周围的玩家一个给定的宽度和高度,只显示点,然后就修改的范围for循环是这样的:
width = 5 # half of the width of the displayed map
height = 3 # half of the height of the displayed map
for r in xrange(max(0,y-height), min(n_rows, y+height)):
row=''
for c in xrange(max(0,x-width), min(n_cols, x+width)):
if c=x and r=y:
row += 'P'
elif abs(c-x)<=exp_radius and abs(r-y)<=exp_radius:
row += world_array[r][c]
else:
row += '.'
print row
所以打印的线和列将从左上角的位置(x宽度,y高度)到右下角的位置(x +宽度,y +高度),如果超出地图,则裁剪。因此,如果未裁剪,显示的区域为2 *宽* 2 *高。
您是否只说玩家(字母'p')*开头*在'(0,0)'并且可以移动到其他位置?你只是要求打印单元格还是要在网格周围显示一些上下文来显示窗口在完整网格中的位置?你正在使用哪个版本的Python? –