首先,如果你想修改您的地圖要小心,因爲它們是不可變的,你不應該使用字符串行。你將無法修改你的地圖 - 你不能完全重寫每一行。
因此,我建議你使用這樣的:(字符的二維數組)
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? –