2016-01-23 86 views
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') 

回答

1

你似乎是不一致的。在一些条款中,您检查self.minearray,而在其他条款中,您检查self.tiles。从初始化代码来看,它的确应该是self.minearray,因为self.tiles[anything][anything]决不会是== 0

+0

哇。非常感谢! – ChaiNunes