导致崩溃的最大递归错误深度?

如何解决导致崩溃的最大递归错误深度?

我正在用tkinter进行扫雷。我想拥有它,以便在单击周围有0个地雷的按钮时,会自动单击该按钮周围的所有按钮。但是,当我运行此程序并单击带有0的按钮时,程序崩溃。 (最初它给了我“超出最大递归深度”的错误)。我该如何解决?这是完整的代码

import tkinter as tk
import sys
import random
from tkinter import messageBox
from PIL import Image,ImageTk
from types import FunctionType
from copy import copy

app = tk.Tk()
app.geometry("432x468")
app.title("minesweeper")

sys.setrecursionlimit(999999999)

colors = ['#FFFFFF','#0000FF','#008200','#FF0000','#000084','#840000','#008284','#840084','#000000']

# create lists
def createlists():
    global buttonlist
    global mylist
    global numberlist
    global panelist
    global rightlist
    global flaglist
    global rowlist
    global columnlist
    global abomb
    global adic
    global secondlist
    secondlist = []
    abomb = []
    adic = {}
    buttonlist = []
    mylist = [0]
    numberlist = []
    panelist = []
    rightlist = []
    flaglist = []
    rowlist = []
    columnlist = []

    for a in range(1,18):
        mylist.append(18*a)
    
    for i in range(1,325):
        button = "b" + str(i)
        flag = 'flag' + str(i)
        row = 'row' + str(i)
        column = 'column' + str(i)
        buttonlist.append(button)
        numberlist.append(i)
        secondlist.append(i)
        flaglist.append(flag)
        rowlist.append(row)
        columnlist.append(column)

# randomly select bombs

def selectbombs():
    for i in range(0,50):
        x = "panel" + str(bomblist[i])
        panelist.append(x)
    for i in bomblist:
        n = "a" + str(i)
        abomb.append(n)
        secondlist.remove(i)
    
# create function for when a bomb is clicked

def mine():
    global bomblist
    for i in range(0,50):
        panelist[i] = tk.Label(app,image = bomb)
    for x in mylist:
        for i in range(x,x+18):
            if i+1 in bomblist:
                thing = bomblist.index(i+1)
                panelist[thing].grid(row=mylist.index(x)+1,column=i-x+1,columnspan=1)
    MsgBox = tk.messageBox.askquestion ('Game Over','You clicked on a bomb! Game Over. Would you like to play again?')
    if MsgBox == 'no':
        app.destroy()
    else:
        createlists()
        bomblist = random.sample(numberlist,50)
        selectbombs()
        buttons()
        numbers()
        flags()

# create grid of buttons

def buttons():
    for i in range(0,324):
        if i+1 in bomblist:
            buttonlist[i] = tk.Button(app,text="",width=2,height=1,command=mine)
        else:
            buttonlist[i] = tk.Button(app,height=1)

    for x in mylist:
        for i in range(x,x+18):
            buttonlist[i].grid(row=mylist.index(x)+1,columnspan=1)
            rowlist[i] = mylist.index(x)+1
            columnlist[i] = i-x+1

# determine the number of bombs adjacent to each button

def numbers():
    for i in range(1,325):
        adic.update({"a"+str(i) : 0})
    alist = list(adic)
    for i in bomblist:
        for x in numberlist:
            if rowlist[x-1] in range(rowlist[numberlist.index(i)]-1,rowlist[numberlist.index(i)]+2) and columnlist[x-1] in range(columnlist[numberlist.index(i)]-1,columnlist[numberlist.index(i)]+2):
                adic[alist[x-1]] = adic[alist[x-1]] + 1
    for i in bomblist:
        del adic[alist[numberlist.index(i)]]
    alist = list(adic)
    for i in adic:
        buttonlist[secondlist[alist.index(i)]-1].bind("<Button-1>",lambda event,x=secondlist[alist.index(i)]-1,y=adic[i] : num(x,y))
    
# number functions

def num(x,y):
    a = rowlist[x]
    b = columnlist[x]
    if y==0:
        buttonlist[x].config(bg = '#FFFFFF')
        buttonlist[x]["state"] = "disabled"
        if a != 1 and b != 1:
            num(x-19,adic["a"+str(x-18)])
        if a != 1:
            num(x-18,adic["a"+str(x-17)])
        if a != 1 and b != 18:
            num(x-17,adic["a"+str(x-16)])
        if b != 1:
            num(x-1,adic["a"+str(x)])
        if b != 18:
            num(x+1,adic["a"+str(x+2)])
        if a != 18 and b != 1:
            num(x+17,adic["a"+str(x+18)])
        if a != 18:
            num(x+18,adic["a"+str(x+19)])
        if a != 18 and b != 18:
            num(x+19,adic["a"+str(x+20)])
        
    else:
        buttonlist[x].config(text = y,disabledforeground = colors[y],bg = '#FFFFFF')
        buttonlist[x]["state"] = "disabled"

# create function to place a flag

im = Image.open("flag.png")
im = im.resize((20,20),Image.ANTIALIAS)
flag =  ImageTk.PhotoImage(im)

def flags():
    for i in range(0,324):
        buttonlist[i].bind("<Button-3>",x=i : right(event,x))

def right(event,x):
    if buttonlist[x]["state"] == "normal":
        flaglist[x] = tk.Button(app,text = "",width=18,height=19,image = flag)
        flaglist[x].grid(row=rowlist[x],column=columnlist[x],columnspan=1)
        flaglist[x].bind("<Button-1>",lambda event: flaglist[x].destroy())

# check if the game has been won

def checkwin():
    disnum = 0
    for i in secondlist:
        if buttonlist[i-1]["state"] == "disabled":
            disnum = disnum + 1
    if disnum == 274:
        MsgBox = tk.messageBox.askquestion ('Game Won','You have won the game! Would you like to play again?')
        if MsgBox == 'no':
            app.destroy()
        else:
            createlists()
            bomblist = random.sample(numberlist,50)
            selectbombs()
            buttons()
            numbers()
            flags()

# open images

img = Image.open("bomb.png")
img = img.resize((20,Image.ANTIALIAS)
bomb =  ImageTk.PhotoImage(img)

createlists()
bomblist = random.sample(numberlist,50)
selectbombs()
buttons()
numbers()
flags()

app.mainloop()

导致程序崩溃的特定部分:

def num(x,bg = '#FFFFFF')
        buttonlist[x]["state"] = "disabled"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?