List 更改列表中字符串周围的变量
我正在编写一个扫雷游戏,我遇到了一个问题,我无法独自解决它。如果一个M离它很近,我想把M周围的0改成1,如果两个矿离它很近,我想把2改成1,依此类推。我编写了以下代码:List 更改列表中字符串周围的变量,list,python-3.x,List,Python 3.x,我正在编写一个扫雷游戏,我遇到了一个问题,我无法独自解决它。如果一个M离它很近,我想把M周围的0改成1,如果两个矿离它很近,我想把2改成1,依此类推。我编写了以下代码: hiddenfield = [[0, 0, 0, 0, 0, 'M', 0, 0, 0, 'M'], [0, 0, 0, 'M', 0, 0, 0, 'M', 'M', 'M'], [0, 0, 'M', 0, 'M', 0, 0, 'M', 0, 'M'],
hiddenfield = [[0, 0, 0, 0, 0, 'M', 0, 0, 0, 'M'],
[0, 0, 0, 'M', 0, 0, 0, 'M', 'M', 'M'],
[0, 0, 'M', 0, 'M', 0, 0, 'M', 0, 'M'],
[0, 0, 0, 0, 'M', 0, 0, 0, 0, 0],
[0, 0, 'M', 0, 'M', 0, 0, 0, 0, 0],
[0, 0, 0, 'M', 0, 'M', 'M', 0, 0, 0],
[0, 0, 0, 'M', 0, 0, 0, 'M', 0, 0],
[0, 0, 0, 'M', 0, 0, 0, 0, 0, 0],
[0, 'M', 'M', 0, 'M', 0, 0, 0, 0, 0],
['M', 0, 0, 'M', 0, 0, 0, 0, 'M', 0]]
for i in range(0,len(hiddenfield)):
for j in range(0,len(hiddenfield)):
try:
if hiddenfield[i][j] == 'M':
hiddenfield[i+1][j] += 1
hiddenfield[i-1][j] += 1
hiddenfield[i][j+1] += 1
hiddenfield[i][j-1] += 1
hiddenfield[i+1][j-1] += 1
hiddenfield[i-1][j+1] += 1
hiddenfield[i+1][j+1] += 1
hiddenfield[i-1][j-1] += 1
except IndexError:
continue
def showMineFieldHidden(hiddenfield):
border = list(range(0,len(hiddenfield)))
row = [' ']+border
i = 0
for rows in [border]+hiddenfield:
print(row[i], end=' ')
i += 1
for lines in rows:
print(lines, end=' ')
print()
但我得到的只是:
0 1 2 3 4 5 6 7 8 9
0 0 0 0 1 1 M 1 0 1 M
1 0 0 2 M 2 1 1 M M M
2 0 1 M 2 M 0 0 M 1 M
3 0 1 2 1 M 0 0 1 0 1
4 0 1 M 1 M 1 1 0 0 0
5 0 1 1 M 1 M M 2 1 0
6 0 0 0 M 0 1 2 M 1 0
7 0 1 1 M 1 0 1 1 1 0
8 0 M M 3 M 1 0 0 0 0
9 M 1 1 M 2 1 1 0 M 0
非常感谢您的帮助。首先,我会将您的炸弹索引存储在一个列表中。然后我会尝试使用一个函数来获取给定位置的所有相邻元素 退房 然后,您可以更新此函数,以获取一个附加参数,该参数将是对所有找到的相邻单元格执行的递增或递减函数。您有两个问题:
for i in range(0, len(hiddenfield)):
for j in range(0, len(hiddenfield)):
if hiddenfield[i][j] == 'M':
if hiddenfield[i + 1][j] != 'M':
try:
hiddenfield[i + 1][j] += 1
except IndexError:
pass
if hiddenfield[i + 1][j] != 'M':
try:
hiddenfield[i - 1][j] += 1
except IndexError:
pass
#and so on ..... :(
def update_cell(x, y):
try:
if hiddenfield[x][y] != 'M':
hiddenfield[x][y] += 1
except IndexError:
pass
for i in range(0, len(hiddenfield)):
for j in range(0, len(hiddenfield)):
if hiddenfield[i][j] == 'M':
update_cell(i - 1, j - 1)
update_cell(i - 1, j)
update_cell(i - 1, j + 1)
update_cell(i, j - 1)
update_cell(i, j + 1)
update_cell(i + 1, j - 1)
update_cell(i + 1, j)
update_cell(i + 1, j + 1)
现在看起来好多了:)作为另一个想法,我会制作一个mine对象(应该保存它自己的位置),每个对象都会有一个方法接收一块板,并将它周围的所有位置增加1。