我正在寻找一种方法让我的扫雷游戏在炸弹周围添加数字

I am looking for a way to make my Minesweeper game add numbers around the bombs

目前我的代码通过隐藏网格上的随机 x 和 y 坐标添加炸弹。如果网格 space 碰到炸弹,我必须在这里添加什么才能让代码添加数字?

def addBombNum(bombs,gSize,hiddenGrid,bCount):

  fNum = ""

  for i in range(bombs):
    randPlace = True
    while randPlace:
      x = random.randint(0,gSize - 1)
      y = random.randint(0,gSize - 1)

      if hiddenGrid[y][x] == "[-]": hiddenGrid[y][x] = "3[90m[*]3[m" ; randPlace = False
      if hiddenGrid[y][x] == "3[90m[*]3[m": pass

  for i in range(gSize):
    for j in range(gSize):

      if hiddenGrid[i][j] == "3[90m[*]3[m": continue

如果需要,这是我的 hiddenGrid。

hiddenGrid = [["[-]" for y in range(gSize)] for x in range(gSize)]

我个人建议将炸弹数组存储为数值数组,然后有办法将其处理成输出。但是,要直接回答您的问题,我建议您每次放置炸弹时,都会为与其相邻的每个单元格增加一个计数器。

因此,在您的函数顶部,您可以首先创建一个数字网格:grid = [[0 for y in range(gSize)] for x in range(gSize)]

接下来,每次添加炸弹时,都会为触及它的每个网格 space 增加计数器:

for a in range(y - 1, y + 2):
    for b in range(x - 1, x + 2):
        if 0 <= a < gSize and 0 <= b < gSize:
            grid[a][b] += 1

最后,在最后,您可以将此信息从网格中继到输出。因此,在 if hiddenGrid[i][j] == "3[90m[*]3[m": continue 行之后(我假设你添加它是为了防止它用数字覆盖炸弹),你可以添加这个块:

if grid[i][j] > 0:
    hiddenGrid[i][j] = "3[90m[%d]3[m" % grid[i][j]

另一种方法是将此块添加到炸弹跳过检查后的最后:

count = 0
for a in range(i - 1, i + 2):
    for b in range(j - 1, j + 2):
        if 0 <= a < gSize and 0 <= b < gSize:
            if hiddenGrid[a][b] == "3[90m[*]3[m":
                count += 1
if count > 0:
    hiddenGrid[i][j] = "3[90m[%d]3[m" % count

这样,您就不需要计数器网格,也不需要每次都递增它。但是,拥有网格意味着如果您以后需要将它用于其他事情,您就可以使用它并且不需要每次都重新计算它。