Python 已解决-程序不计算野外钻机的数量
我试着用python编程扫雷舰。计算被炸弹包围的区域的数量,我遇到了一个更糟糕的问题-没有错误 我的代码是:Python 已解决-程序不计算野外钻机的数量,python,minesweeper,Python,Minesweeper,我试着用python编程扫雷舰。计算被炸弹包围的区域的数量,我遇到了一个更糟糕的问题-没有错误 我的代码是: for i in range(len(bombs)): numbers[bombs[i]] = -1 if (bombs[i][0] > 0): if (numbers[(bombs[i][0]-step, bombs[i][1]+0)] != -1): numbers[(bombs[i][0]-step, bombs[i]
for i in range(len(bombs)):
numbers[bombs[i]] = -1
if (bombs[i][0] > 0):
if (numbers[(bombs[i][0]-step, bombs[i][1]+0)] != -1):
numbers[(bombs[i][0]-step, bombs[i][1]+0)] = numbers[(bombs[i][0]-step, bombs[i][1]+0)] + 1
if (bombs[i][1] > 0):
if (numbers[(bombs[i][0]-step, bombs[i][1]-step)] != -1):
numbers[(bombs[i][0]-step, bombs[i][1]-step)] = numbers[(bombs[i][0]-step, bombs[i][1]-step)] + 1
if (bombs[i][1] < heigth-step-1):
if (numbers[(bombs[i][0]-step, bombs[i][1]+step)] != -1):
numbers[(bombs[i][0]-step, bombs[i][1]+step)] = numbers[(bombs[i][0]-step, bombs[i][1]+step)] + 1
if (bombs[i][0] < width-step-1):
if (numbers[(bombs[i][0]+step, bombs[i][1]+0)] != -1):
numbers[(bombs[i][0]+step, bombs[i][1]+0)] = numbers[(bombs[i][0]+step, bombs[i][1]+0)] + 1
if (bombs[i][1] > 0):
if (numbers[(bombs[i][0]+step, bombs[i][1]-step)] != -1):
numbers[(bombs[i][0]+step, bombs[i][1]-step)] = numbers[(bombs[i][0]+step, bombs[i][1]-step)] + 1
if (bombs[i][1] < heigth-step-1):
if (numbers[(bombs[i][0]+step, bombs[i][1]+step)] != -1):
numbers[(bombs[i][0]+step, bombs[i][1]+step)] = numbers[(bombs[i][0]+step, bombs[i][1]+step)] + 1
if (bombs[i][1] > 0):
if (numbers[(bombs[i][0]+0, bombs[i][1]-step)] != -1):
numbers[(bombs[i][0]+0, bombs[i][1]-step)] = numbers[(bombs[i][0]+0, bombs[i][1]-step)] + 1
if (bombs[i][1] < heigth-step-1):
if (numbers[(bombs[i][0]+0, bombs[i][1]+step)] != -1):
numbers[(bombs[i][0]+0, bombs[i][1]+step)] = numbers[(bombs[i][0]+0, bombs[i][1]+step)] + 1
范围内的i(len(炸弹)):
数字[炸弹[i]]=-1
如果(炸弹[i][0]>0):
如果(数字[(炸弹[i][0]-步骤,炸弹[i][1]+0)]!=-1):
数字[(炸弹[i][0]-步进,炸弹[i][1]+0)]=数字[(炸弹[i][0]-步进,炸弹[i][1]+0)]+1
如果(炸弹[i][1]>0):
如果(数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]!=-1):
数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]=数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]+1
如果(炸弹[i][1]0):
如果(数字[(炸弹[i][0]+步进,炸弹[i][1]-步进)]!=-1):
数字[(炸弹[i][0]+步骤,炸弹[i][1]-步骤)]=数字[(炸弹[i][0]+步骤,炸弹[i][1]-步骤)]+1
如果(炸弹[i][1]0):
如果(数字[(炸弹[i][0]+0,炸弹[i][1]-步骤)]!=-1):
数字[(炸弹[i][0]+0,炸弹[i][1]-步骤)]=数字[(炸弹[i][0]+0,炸弹[i][1]-步骤)]+1
如果(炸弹[i][1]
步长=字段的大小
炸弹=阵列中的所有炸弹
谢谢
[1] :我认为这段代码有一个问题:
if(炸弹[i][0]>0):
#此炸弹不在网格最左边的列中
#打印(数字[(炸弹[i][0]-步骤,炸弹[i][1]+0)])
如果(数字[(炸弹[i][0]-步骤,炸弹[i][1]+0)]!=-1):
#左边的牢房不是炸弹,所以在它的数量上加一个
数字[(炸弹[i][0]-步进,炸弹[i][1]+0)]=数字[(炸弹[i][0]-步进,炸弹[i][1]+0)]+1
如果(炸弹[i][1]>0):
#这个炸弹不在网格的第一行。
如果(数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]!=-1):
#上面和左边的牢房不是炸弹,所以在其计数中加一个
数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]=数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]+1
请注意,我们只查看炸弹上方和左侧的单元,如果它不是炸弹,则添加一个,如果左侧的单元也不是炸弹。这是不正确的:对于任何炸弹,我们需要检查上面和左边的电池,看它左边的电池是否也是炸弹
您要做的是从上面的第三个if
语句中删除缩进级别:
if(炸弹[i][0]>0):
#此炸弹不在网格最左边的列中
#打印(数字[(炸弹[i][0]-步骤,炸弹[i][1]+0)])
如果(数字[(炸弹[i][0]-步骤,炸弹[i][1]+0)]!=-1):
#左边的牢房不是炸弹,所以在它的数量上加一个
数字[(炸弹[i][0]-步进,炸弹[i][1]+0)]=数字[(炸弹[i][0]-步进,炸弹[i][1]+0)]+1
#如果炸弹[i]左边还有另一颗炸弹,现在就可以到达这条线。
如果(炸弹[i][1]>0):
#这个炸弹不在网格的第一行。
如果(数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]!=-1):
#上面和左边的牢房不是炸弹,所以在其计数中加一个
数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]=数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]+1
您还可以对其他三个if
语句进行相同的更改,这些语句处理将一个添加到其他方向的对角相邻正方形的计数中。
查看您的代码,我不确定您是否需要
-1
条件,例如if(bombs[I][1]
。显然,这些检查试图阻止您脱离网格边缘,但额外的-1
是不必要的。我也有点担心步骤
:这是否等于1
?您在检查是否从网格的右侧或底部跌落时包括了步骤
,但在从网格的顶部或左侧跌落时不包括在内,因此如果步骤
大于1,您可能会遇到问题。(例如,如果步骤
为3且炸弹[i][0]
为1,炸弹[i][0]-步骤
将为-2
)
另外,我可以从可读性的角度对您的代码提出一些建议吗?首先,你重复了很多次bombs[i][0]
和bombs[i][1]
:如果你在循环的其余部分添加行x=bombs[i][0]
和y=bombs[i][1]
你可以编写x
和y
,而不是bombms[i][1]
。其次,您可以编写some\u expression+=1
而不是编写some\u expression+=1
。进行这些更改将缩短一行,例如
number[(bombs[i][0]-步骤,bombs[i][1]-步骤)]=number[(bombs[i][0]-步骤,bombs[i][1]-步骤)]+1
到
Tha
numbers[(x-step, y-step)] += 1