我正在寻找一种方法让我的扫雷游戏在炸弹周围添加数字
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
这样,您就不需要计数器网格,也不需要每次都递增它。但是,拥有网格意味着如果您以后需要将它用于其他事情,您就可以使用它并且不需要每次都重新计算它。
目前我的代码通过隐藏网格上的随机 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
这样,您就不需要计数器网格,也不需要每次都递增它。但是,拥有网格意味着如果您以后需要将它用于其他事情,您就可以使用它并且不需要每次都重新计算它。