0
我目前正在寫一個掃雷遊戲。這一切都很順利,直到我遇到了點擊一次就暴露多個圖塊的問題。每當我點擊某個東西時,它都不會顯示地雷(就像它應該的那樣),但只能向下,向左和向右。我做到了,所以它打印出它的方向,它認爲是正確的,等等。我從來沒有遇到過左派。這裏是我的代碼:Python邏輯在掃雷
from tkinter import *
from random import *
root = Tk()
root.resizable(0, 0)
root.title("Minesweeper")
frame = Frame(root)
Grid.rowconfigure(root, 0, weight=1)
Grid.columnconfigure(root, 0, weight=1)
frame.grid(row=0, column=0)
class Tiles:
def __init__(self, frame, size, minecount):
self.size = size
self.frame = frame
self.tiles = []
self.minearray = []
self.curmines = 0
self.minecount = minecount
for x in range(self.size):
self.tiles.append([])
self.minearray.append([])
for y in range(self.size):
self.minearray[x].append(0)
self.tiles[x].append(Button())
self.tiles[x][y] = Button(self.frame, text=' ', width=2, bd = 3, bg="#CDCDCD", command=lambda row=x, col=y: self.clicked(row, col))
self.tiles[x][y].grid(row=x, column=y)
self.setMines()
def setMines(self):
for i in range(self.minecount):
self.minearray[randint(0, self.size - 1)][randint(0, self.size - 1)] = 1
self.curmines += 1
print(self.minearray)
def clicked(self, x, y):
if self.minearray[x][y] == 1:
self.tiles[x][y]["text"] = '@'
self.tiles[x][y]["relief"] = SUNKEN
self.minearray[x][y] = 2
if x < self.size - 1 and self.minearray[x+1][y] == 0:
self.clicked(x+1, y)
print('r')
if y > 0 and self.minearray[x+1][y-1] == 0:
self.clicked(x+1, y-1)
print('rd')
if y < self.size - 1 and self.minearray[x+1][y+1] == 0:
self.clicked(x+1, y+1)
print('ru')
if x > 0 and self.tiles[x-1][y] == 0:
self.clicked(x-1, y)
print('l')
if y > 0 and self.minearray[x-1][y-1] == 0:
self.clicked(x-1, y-1)
print('ld')
if y < self.size - 1 and self.minearray[x-1][y+1] == 0:
self.clicked(x-1, y+1)
print('lu')
if y < self.size - 1 and self.tiles[x][y + 1] == 0:
self.clicked(x, y + 1)
print('u')
if y > 0 and self.tiles[x][y - 1] == 0:
self.clicked(x, y - 1)
print('d')
tiles = Tiles(frame, 10, 20)
root.mainloop()
的邏輯是在點擊的功能:
def clicked(self, x, y):
if self.minearray[x][u] == 1:
self.tiles[x][y]["text"] = '@'
self.tiles[x][y]["relief"] = SUNKEN
self.minearray[x][y] = 2
if x < self.size - 1 and self.minearray[x+1][y] == 0:
self.clicked(x+1, y)
print('r')
if y > 0 and self.minearray[x+1][y-1] == 0:
self.clicked(x+1, y-1)
print('rd')
if y < self.size - 1 and self.minearray[x+1][y+1] == 0:
self.clicked(x+1, y+1)
print('ru')
if x > 0 and self.tiles[x-1][y] == 0:
self.clicked(x-1, y)
print('l')
if y > 0 and self.minearray[x-1][y-1] == 0:
self.clicked(x-1, y-1)
print('ld')
if y < self.size - 1 and self.minearray[x-1][y+1] == 0:
self.clicked(x-1, y+1)
print('lu')
if y < self.size - 1 and self.tiles[x][y + 1] == 0:
self.clicked(x, y + 1)
print('u')
if y > 0 and self.tiles[x][y - 1] == 0:
self.clicked(x, y - 1)
print('d')
哇。非常感謝! – ChaiNunes