From f706bb341d9942d8ee200ac7126e8ef567566544 Mon Sep 17 00:00:00 2001 From: bettleChen <2207153529@qq.com> Date: Thu, 31 Aug 2023 10:43:39 +0800 Subject: [PATCH] upload sudoku project --- UI.py | 238 ++++++++++++++++++++++ data.py | 124 ++++++++++++ martix.npy | Bin 0 -> 209 bytes requirements.txt | Bin 0 -> 72 bytes sudoku.png | Bin 0 -> 110391 bytes sudoku.py | 499 +++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 861 insertions(+) create mode 100644 UI.py create mode 100644 data.py create mode 100644 martix.npy create mode 100644 requirements.txt create mode 100644 sudoku.png create mode 100644 sudoku.py diff --git a/UI.py b/UI.py new file mode 100644 index 0000000..633b797 --- /dev/null +++ b/UI.py @@ -0,0 +1,238 @@ +""" + @Author: packy945 + @FileName: UI.py + @DateTime: 2023/4/27 17:42 + @SoftWare: PyCharm +""" +# -*- encoding: utf-8 -*- + +import tkinter as tk +from tkinter import * +from data import * +import time +import numpy as np +from tkinter import scrolledtext + + +BLACK = "#000000" +HINT = '#6D2DFA' +SILVER = '#FFFFFF' +u_NUMBER = '#6D2DFA' +WHITE = "#FFFFFF" +ORANGE = '#FF8C00' +RED = "#C80000" +YELLOW = "#FAE067" +GREY = '#808080' +GREYLESS = '#CCCCCC' + + +BC = 40 + +# 构建主窗口 +width, height = 840, 610#设置长宽 +root = tk.Tk()#设置主窗口 +root.title("数独")#设置窗口标题 +root.config(bg=BLACK)#设置背景 +root.geometry(f'{width}x{height}')#设置窗口大小 +root.resizable(0, 0) # 防止用户调整尺寸 +cv = tk.Canvas(root, bg=WHITE, bd=2, relief="sunken", width=width, height=height, background=ORANGE, + borderwidth=0, highlightthickness=0)#设置画布 +cv.place(x=0, y=0, anchor=NW)#设置画布位置 + +bc = 40 +"""文字框""" +top_x = (bc + 3) * 11 # 文本框顶点x +top_y = 50 # 文本框顶点y +bc_x = (bc + 3) * 7 + 20 # 文本框宽度 +bc_y = (bc + 3) * 12 # 文本框高度 + +right = tk.Frame(root, bg=WHITE, relief="sunken", width=bc_x, height=bc_y) +right.place(x=top_x, y=top_y, anchor=NW) # 右边栏 + +class MyTimer: + # 计时器 + def __init__(self): + self.elapsed = 0.0 + self.running = False + self.last_start_time = None + self.timestr = tk.IntVar() # 创建可变数据类型 + self.min = tk.IntVar() # 创建可变数据类型 + self.sec = tk.IntVar() # 创建可变数据类型 + self.timestr.set(0) # 只能数值不能等于号 + + self.starttime = 0 # 开始计时时间 + self.elapsedtime = 0.0 # 计时器统计到的时间 + self.timer = None + self.starttime = time.time() - self.elapsedtime + self.update() + self.win = 0 + + + def update(self): + self.elapsedtime = int(time.time() - self.starttime) + self.timestr.set(self.elapsedtime) + self.min.set(self.elapsedtime // 60) + self.sec.set(self.elapsedtime - self.min.get() * 60) + self.timer = root.after(100, self.update) + + def restart(self): + self.win = 0 + self.elapsedtime = 0.0 + self.starttime = time.time() - self.elapsedtime + self.update() + + def stop(self): + if self.win: + pass + else: + self.win = 1 + root.after_cancel(self.timer) + self.elapsedtime = int(time.time() - self.starttime) + now = int(time.time() - self.starttime) + self.timestr.set(now) + self.min.set(now // 60) + self.sec.set(now - self.min.get() * 60) + +def rect_draw(bc, row, col): + ''' + 绘制一个方格 + :param bc: 方格大小 + :param row: 行 + :param col: 列 + :return: + ''' + block_color = [3, 4, 5] # 显色宫格依据 + logi_row = row in block_color and col in block_color # 显色逻辑 + logi_col = row in block_color or col in block_color # 显色逻辑 + if not logi_row and logi_col: + color = "#FAE067" + else: + color = 'white' + cv.create_rectangle(row * (bc + 3) + 50, col * (bc + 3) + 50, row * (bc + 3) + 50 + bc, col * (bc + 3) + 50 + bc, + fill=color, width=0) # 绘制一个方格 + + +def show_Time(timer: MyTimer): + ''' + 显示计时器 + :param timer:计时器示例 + :return: + ''' + Time = tk.Label(right, text="运行时间: 分 秒", bg=WHITE, fg=BLACK, font=('幼圆', 16, 'bold'), anchor=W) + Time.place(x=30, y=30, width=300, height=30) + Min = tk.Label(right, textvariable=timer.min, bg=WHITE, fg=BLACK, font=('幼圆', 16, 'bold')) # 分钟计数 + Min.place(x=150, y=30, width=30, height=30) + Sec = tk.Label(right, textvariable=timer.sec, bg=WHITE, fg=BLACK, font=('幼圆', 16, 'bold')) # 秒钟计数 + Sec.place(x=220, y=30, width=30, height=30) + +def num_draw(bc, row, col, martix, u_martix): + ''' + 绘制方格中的数字 + :param bc: 方格大小 + :param row: 行 + :param col: 列 + :param martix: 原矩阵 + :param u_martix: 用户矩阵 + :return: + ''' + if u_martix[row, col] == 10:# 如果该方格为提示信息,则不显示大数字 + return + if not martix[row, col] == 0: # 如果该方格为题目所给数字(不可更改),则显示为黑色 + color = 'black' # 将颜色设置为黑色 + else: + if u_martix[row, col] not in GetPossible(u_martix, row, col): # 判断这一格的数字是否符合数独要求 + color = 'red' # 不符合要求显示红色 + else: + color = 'purple' # 用户填的数字的颜色 + if martix[row, col] != 0 or u_martix[row, col] != 0: #如果该格子有数据要显示 + cv.create_text(col * (bc + 3) + 50 + bc / 2, row * (bc + 3) + 50 + bc / 2, + text=f"{u_martix[row, col]}", font=('幼圆', 18, 'bold'), fill=color) + + + + +def Difficulty(empty): + """ + 难度显示: + :param empty: 原始空格数目 + :return: + """ + Level = tk.Label(right, text="难度:{:.2f}".format(empty / 81), bg=WHITE, fg=BLACK, font=('幼圆', 16, 'bold'), anchor=W) + Level.place(x=30, y=60, width=300, height=30) + + + +def noter(tag): + ''' + 显示笔记提示 + :param tag: 笔记模式是否开启 + :return: + ''' + note_help1 = tk.Label(right, text=f"False 时保存笔记,当前笔记:{tag}", bg=WHITE, fg=RED, font=('幼圆', 12, 'bold'), anchor=W) + note_help1.place(x=30, y=90, width=300, height=30) + + + +def seq_recode(right, STEP): + ''' + 显示步骤 + :param STEP: 步骤 + :return: + ''' + note_help1 = tk.Label(right, text=f"步骤记录:", bg=WHITE, fg=RED, font=('幼圆', 12, 'bold'), anchor=W) + note_help1.place(x=30, y=120, width=300, height=30) + scr = scrolledtext.ScrolledText(right, fg='red', font=('幼圆', 16, 'bold'))#设置一个可滚动文本框 + scr.place(x=30, y=150, width=280, height=300)# + for i in range(len(STEP)): + if i != 0:#将步骤显示到文本框中 + scr.insert('end', f"{STEP[i][:3]}\n") # 末尾插入 + scr.config(state=DISABLED) # 设置文本框为 “不能编辑” + scr.see(END)#将视图移到末尾 + + + + + + +def empty(u_martix): + count = 0 # 计数 + for i in range(9): + for j in range(9): + if u_martix[i][j] == 0 or u_martix[i][j] == 10: + count += 1 + return count + + + +if __name__ == "__main__": + martix = M = np.array([[1, 3, 4, 0, 0, 6, 0, 0, 7], + [0, 9, 2, 0, 0, 7, 0, 5, 6], + [0, 6, 7, 8, 9, 4, 0, 2, 3], + [0, 8, 1, 2, 4, 9, 6, 0, 0], + [9, 4, 5, 6, 0, 8, 2, 3, 0], + [2, 7, 6, 0, 1, 5, 9, 0, 4], + [0, 2, 8, 0, 5, 1, 0, 0, 9], + [0, 1, 3, 0, 6, 0, 0, 4, 8], + [0, 5, 0, 4, 0, 0, 0, 1, 2]]) + + u_M = np.array([[1, 3, 4, 0, 0, 6, 0, 0, 7], + [0, 9, 2, 0, 0, 7, 0, 5, 6], + [0, 6, 7, 8, 9, 4, 0, 2, 3], + [0, 8, 1, 2, 4, 9, 6, 0, 0], + [9, 4, 5, 6, 0, 8, 2, 3, 0], + [2, 7, 6, 1, 1, 5, 9, 0, 4], + [0, 2, 8, 0, 5, 1, 0, 6, 9], + [0, 1, 3, 0, 6, 0, 7, 4, 8], + [0, 5, 0, 4, 0, 0, 0, 1, 2]]) + # text_enter(BC) + + # time1.start() # 计时开始 + # draw((5, 5),M,u_M) + + + BC = 40 + def left1(event): + print(event.x, event.y) + cv.bind('', left1) + + mainloop() \ No newline at end of file diff --git a/data.py b/data.py new file mode 100644 index 0000000..3df7127 --- /dev/null +++ b/data.py @@ -0,0 +1,124 @@ + +""" + @Author: packy945 + @FileName: data.py + @DateTime: 2023/4/27 17:42 + @SoftWare: PyCharm +""" +# -*- encoding: utf-8 -*- +import numpy as np +import random +from collections import Counter + + +def Init(): + # 构建9*9数组 + martix = np.zeros((9, 9), dtype='i1') # 初始化9*9数组并赋值0 + for row in range(0, 9): + for col in range(0, 9): + value = random.randint(0, 9) + martix[row, col] = value # 给9*9数组martix随机赋值 + return martix + + +def Judge(martix): + # 计算整个数组是否符合要求 + for row in range(0, 9): + for col in range(0, 9): + if martix[row][col] == 0: + continue + m, n = row // 3, col // 3 # [m, n] 为宫位置, 即九个小格子为一个宫 + row_martix = martix[row, :] # [row, col] 所在行的数字数组 + row_set = set(row_martix) - {0} # [row, col] 所在行的数字集合(1~9) + col_martix = martix[:, col] # [row, col] 所在列的数字数组 + col_set = set(col_martix) - {0} # [row, col] 所在列的数字集合(1~9) + block_martix = martix[m * 3: m * 3 + 3, n * 3: n * 3 + 3].reshape(9) # [row, col] 所在的宫的数字数组 + block_set = set(block_martix) - {0} # [row, col] 所在的宫的数字集合(1~9) + if len(row_martix) != (len(row_set) + Counter(row_martix)[0]): + return False #若集合里的数字个数(不包括0)加上0的个数小于9,说明有非0的数字重复 + if len(col_martix) != (len(col_set) + Counter(col_martix)[0]): + return False #若行、列、九宫格有非0的数字重复,则说明不满足数独要求 + if len(block_martix) != (len(block_set) + Counter(block_martix)[0]): + return False + return True #若全部满足要求,则返回判断成功 + +def GetPossible(martix, row, col):# 获取一个格子里可能可以填的值 + + Nums = {1, 2, 3, 4, 5, 6, 7, 8, 9} + Set = set() + m, n = row // 3, col // 3 # 计算所在九宫格的编号 + for i in range(9): + if i == row: + continue + Set.add(martix[i][col])# 将所在列出现数字加入集合 + for j in range(9): + if j == col: + continue + Set.add(martix[row][j])# 将所在行出现数字加入集合 + for i in range(m * 3, m * 3 + 3): + for j in range(n * 3, n * 3 + 3): + if row == i and j == col: + continue + Set.add(martix[i][j])# 将所在九宫格出现数字加入集合 + return Nums - Set # 返回1~9中没出现过的数字,即可选的值 + +def Solve(martix): + """求解数组""" + for i in range(9): + row = (i + 5) % 9 + for j in range(9): + col = (j + 4) % 9 + if martix[row, col] == 0: + possible = GetPossible(martix, row, col) # 所有的可能的数字 + for value in possible: + martix[row, col] = value # 将可能的数组填入 + if Solve(martix): # 继续深度优先遍历填入数字 + return True # 填完最后一个数字 + martix[row, col] = 0 # 如果当前状况无解则归位,然后回溯 + return False + # 当所有的数字填完,数独求解完毕 + return True + +def question(martix):#随机生成一个数独 + for row in range(9): + for col in range(9): + if martix[row, col] == 0: + possible = GetPossible(martix, row, col) # 所有的可能的数字 + ran_possible = list(possible) #将可能值集合转为列表 + random.shuffle(ran_possible)#随机打乱可能值列表 + for value in ran_possible:#逐个选择可能值列表 + martix[row, col] = value # 将可能的数组填入 + if question(martix): # 继续深度优先遍历填入数字 + return True # 填完最后一个数字 + martix[row, col] = 0 # 如果当前状况无解则归位,然后回溯 + return False + return True# 当所有的数字填完,数独求解完毕 + +def InitMartix(n): + ''' + 创建一个符合要求的带空数组 + :return: 生产完成的数组 + ''' + martix = np.zeros((9, 9), dtype='i1') + question(martix) # 随机生成一个数独题目 + while n: + row = random.randint(0, 8)#随机生成一个行数 + col = random.randint(0, 8)#随机生成一个列数 + if not martix[row][col] == 0: + martix[row][col] = 0#若该格不为空,则置为空 + n -= 1#空格数减一 + return martix + +def InitMartix_new(): + ''' + 创建一个符合要求的带空数组 + :return: 生产完成的数组 + ''' + martix = np.zeros((9, 9), dtype='i1') + question(martix) # 随机生成一个数独题目 + for i in range(9): + for j in range(9): + x = random.randint(-50, 100)#生成随机数 + if x < 0:#根据随机数来决定该格子是否显示 + martix[i][j] = 0 # 若该格不为空,则置为空 + return martix \ No newline at end of file diff --git a/martix.npy b/martix.npy new file mode 100644 index 0000000000000000000000000000000000000000..802949dac0ce556f6e0d1a5e37f82d4e2c7c4713 GIT binary patch literal 209 zcmbV@JqiLb6olvHKb|686w+9(2e4CYEUYBBkrl+1L~PVkcwygO!6^pj`i0{iXrV!6#ebjtAj^fWm6oo literal 0 HcmV?d00001 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..0408cb455057dc2af1c62e82234ebd0cbe2383b4 GIT binary patch literal 72 zcmezWFOQ*=A(x?mp_0KC2n`wZ7>pQ9fTS@4F9R1?JeeVpAqNQ48H#|c0)`B@N&}!e HL$Epk7j6s$ literal 0 HcmV?d00001 diff --git a/sudoku.png b/sudoku.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6b004a2db9a96fd8331ae2fc5fc0179117cdd6 GIT binary patch literal 110391 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 literal 0 HcmV?d00001 diff --git a/sudoku.py b/sudoku.py new file mode 100644 index 0000000..5638bf5 --- /dev/null +++ b/sudoku.py @@ -0,0 +1,499 @@ +""" + @Author: packy945 + @FileName: sudoku.py + @DateTime: 2023/4/27 17:41 + @SoftWare: PyCharm +""" +# -*- encoding: utf-8 -*- + +from data import * +from UI import * + +def game_menu(menu:tk.Menu): + """游戏菜单显示""" + menu_node = Menu(menu, tearoff=False) + menu_node.add_command(label="重新开始", command=lambda: restart(N)) + menu_node.add_command(label="暂停计时", command=lambda: stop_time()) + menu_node.add_command(label="载入题目", command=lambda: load_game()) + # 在主目录菜单上新增"菜单"选项,并通过menu参数与下拉菜单绑定 + menu.add_cascade(label="游戏设置", menu=menu_node) + +def auto_menu(menu:tk.Menu): + """自动求解菜单显示""" + menu_node = Menu(menu, tearoff=False) + menu_node.add_command(label="自动求解-顺序求解", command=lambda: [init_u_M(), auto_Solve(u_martix, STEP.copy())]) + menu_node.add_command(label="自动求解-优化", command=lambda: [init_u_M(), auto_Solve_new(u_martix, STEP.copy())]) + fmenu = Menu(menu, tearoff=False) + fmenu.add_command(label='低速', command=lambda: speed_set(1)) + fmenu.add_command(label='中速', command=lambda: speed_set(0.5)) + fmenu.add_command(label='高速', command=lambda: speed_set(0.2)) + menu_node.add_cascade(label="求解速度选择", menu=fmenu) + # 在主目录菜单上新增"菜单"选项,并通过menu参数与下拉菜单绑定 + menu.add_cascade(label="自动求解", menu=menu_node) + +main_menu = tk.Menu(root) +root.config(menu=main_menu) +game_menu(main_menu) +auto_menu(main_menu) + +def speed_set(spd): + global wait_time + wait_time = spd + +def stop_time(): + global time1 + time1.stop() + +def init_u_M(): + global martix, u_martix, step, STEP, seq + u_martix = martix.copy() + step = [] # 操作步骤 + STEP = [[0, (0, 0), 0, martix]] # 记录每一步的状态 + seq = 1 # 全局操作次序初始化 + +def restart(N): + ''' + 重新生成一个游戏 + :return: + ''' + global martix, u_martix, time1, show_possible, loca_o, loca, note_mark, step, STEP, seq + time1.restart() + martix = InitMartix(N) # 生成一个数独数组 + u_martix = martix.copy() # 复制用户martix数组 + show_possible = 0 # 是否显示提示 + p = []# 初始化可能值数组 + possible = [] + for i in range(9): + p.append({}.copy()) + for i in range(9): + possible.append(p.copy()) + loca_o = tuple() # martix 数组上次滞留坐标 + loca = tuple()# martix 数组当前坐标 + note_mark = False # 笔记开启标志 + show_Time(time1)# 显示时间信息 + step = [] # 操作步骤 + STEP = [[0, (0, 0), 0, martix]] # 记录每一步的状态 + seq = 1 # 全局操作次序初始化 + draw(loca, martix, u_martix, STEP) + +def auto_Solve(u_M, STEP): + ''' + 自动解题算法(按顺序求解) + :param u_M:待解答的数独矩阵 + :return:求解完毕的矩阵 + ''' + for row in range(9): + for col in range(9): + if u_M[row, col] == 0: + possible = GetPossible(u_M, row, col) # 计算所有的可能的数字 + for value in possible:#尝试所有可能数字 + u_M[row, col] = value # 将可能的数组填入 + seq = STEP[-1][0] + 1 # 记录顺序 + step = [seq, (row + 1, col + 1), value, u_M.copy()] # 记录一步 + STEP.append(step)#将操作记录加入Step中 + draw((row + 1, col + 1), martix, u_M, STEP)#更新显示界面 + time.sleep(wait_time) # 防止运算过快,减慢演算步骤 + if auto_Solve(u_M, STEP.copy()): # 继续深度优先遍历填入数字 + return True # 求解完成,直接返回 + u_M[row, col] = 0 # 若用这个数无解,则重置为0,进行回溯 + draw((row + 1, col + 1), martix, u_M, STEP)#更新显示界面 + time.sleep(wait_time) # 停顿一段时间,显示求解步骤 + return False #当前无解,返回False + return True# 当所有的数字填完,数独求解完毕 + +def auto_Solve_new(u_M, STEP): + ''' + 自动求解(优化) + :param u_M:待求解数独矩阵 + :return:求解完成的矩阵 + ''' + flag = 0 + # 优化:如果某个位置只有一个可能值,则先填这个格子 + for row in range(9): + for col in range(9): + if u_M[row, col] == 0: + possible = GetPossible(u_M, row, col) # 所有的可能的数字 + if len(possible) == 1: + flag = 1#标记可以进行求解优化 + value = possible.pop()#只有一个可能数组,则直接将该数字填入 + u_M[row, col] = value # 将确定的数字填入填入 + seq = STEP[-1][0] + 1 # 记录顺序 + step = [seq, (row + 1, col + 1), value, u_M.copy()] # 记录一步 + STEP.append(step)#将步骤记录加到记录中 + draw((row + 1, col + 1), martix, u_M, STEP) #重新绘图 + time.sleep(wait_time) # 停顿一段时间,显示求解步骤 + if auto_Solve_new(u_M, STEP): # 继续深度优先遍历填入数字 + return True # 填完最后一个数字 + u_M[row, col] = 0 # 如果当前填入的数字会导致后面无解则依然填入0表示空白待填 + draw((row + 1, col + 1), martix, u_M, STEP)#重新绘图 + time.sleep(wait_time) # 停顿一段时间,显示求解步骤 + if not flag:#若没有能直接确定的格子,则按原方法进行求解 + for row in range(9): + for col in range(9): + if u_M[row, col] == 0: + possible = GetPossible(u_M, row, col) # 所有的可能的数字 + for value in possible: + u_M[row, col] = value # 将可能的数组填入 + seq = STEP[-1][0] + 1 # 记录顺序 + step = [seq, (row + 1, col + 1), value, u_M.copy()] # 记录一步 + STEP.append(step) + draw((row + 1, col + 1), martix, u_M, STEP) + time.sleep(wait_time) # 停顿一段时间,显示求解步骤 + if auto_Solve_new(u_M, STEP): # 继续深度优先遍历填入数字 + return True # 填完最后一个数字 + u_M[row, col] = 0 # 如果当前填入的数字会导致后面无解则依然填入0表示空白待填 + draw((row + 1, col + 1), martix, u_M, STEP) + time.sleep(wait_time) # 停顿一段时间,显示求解步骤 + return False + return True# 当所有的数字填完,数独求解完毕 + + +def load_game(): + ''' + 载入存储的游戏 + :return: + ''' + global martix, u_martix, time1, show_possible, loca_o, loca, note_mark, step, STEP, seq + time1.restart() + martix = np.load("martix.npy") + u_martix = martix.copy() # 复制用户martix数组 + show_possible = 0 # 是否显示提示 + # 初始化可能值数组 + p = [] + possible = [] + for i in range(9): + p.append({}.copy()) + for i in range(9): + possible.append(p.copy()) + loca_o = tuple() # martix 数组上次滞留坐标 + loca = tuple() + note_mark = False # 笔记开启标志 + # 显示时间信息 + show_Time(time1) + step = [] # 操作步骤 + STEP = [[0, (0, 0), 0, martix]] # 记录每一步的状态 + seq = 1 # 全局操作次序初始化 + + draw(loca, martix, u_martix, STEP) + +def left1(event): + ''' + martix坐标映射 + :param event: 鼠标左键点击的坐标值 + :return: 点击的方格坐标 + ''' + """""" + x = event.x + y = event.y + row = -1 + col = -1 + global STEP, loca, loca_o + for cur_col in range(9): + for cur_row in range(9): + top_x, top_y = cur_col * (bc + 3) + 50, cur_row * (bc + 3) + 50# 计算每个方格的四个角 + ud_x, ud_y = (cur_col + 1) * (bc + 3) + 50, (cur_row + 1) * (bc + 3) + 50# 计算每个方格的四个角 + if x < ud_x and x > top_x:#计算点击的列数 + col = cur_col + if y < ud_y and y > top_y:#计算点击的行数 + row = cur_row + if row >= 0 and col >= 0 and not martix[row, col]: + if loca:#若已经点击过坐标 + loca_o = loca # 保留上次点击过的坐标 + loca = (row + 1, col + 1) # 更新选中的格子位置 + draw(loca, martix, u_martix, STEP)#绘制界面 + return + +def win(u_martix, timer: MyTimer, STEP): + ''' + 检查游戏是否结束,若结束则输出结束界面 + :param u_martix:用户矩阵 + :param timer:计时器 + :return: + ''' + count = 0 # 计数 + + for i in range(9): + for j in range(9): + if u_martix[i][j] == 0 or u_martix[i][j] == 10: + count += 1 + if count == 0: + if Judge(u_martix): + for w in right.winfo_children(): + w.destroy() + timer.stop() + win_words = tk.Label(right, text=f"游戏结束,恭喜通过", bg='white', fg='red', font=('幼圆', 16, 'bold'), + anchor=W) + win_words.place(relx=0.1, rely=0.3) + win_time = tk.Label(right, text=f"耗时:{timer.min.get()}分{timer.sec.get()}秒", bg='white', fg='red', + font=('幼圆', 16, 'bold'), anchor=W) + win_time.place(relx=0.1, rely=0.4) + win_step = tk.Label(right, text=f"花费步数:{len(STEP)}步", bg='white', fg='red', + font=('幼圆', 16, 'bold'), anchor=W) + win_step.place(relx=0.1, rely=0.5) + re = tk.Button(right, text=f"重新开始", bg='white', fg='black', + font=('幼圆', 14, 'bold'), command=lambda: restart(N)) + re.place(relx=0.1, rely=0.6, relwidth=0.5) + +def u_number(num, loca): + ''' + 添加功能: + :param num: 用户点击数字按钮 + :param loca: 当前位置 + :return: + ''' + if loca != ():#若选择了一个格子 + row, col = loca[0] - 1, loca[1] - 1 + global step, seq + if num: # 直接点击了数字按钮,就添加num + if martix[row][col] == 0 and not note_mark: # 空格且笔记模式为False才可以填写 + if u_martix[row][col] == 10: # 如果修改了这个格子的值,删除原来的记录 + possible[row][col].clear() + # for note in note_martix: # 如果这个空格有笔记直接覆盖清空笔记 + # if note[0] == row and note[1] == col: + # note_martix.remove(note) + u_martix[row][col] = num # 为用户数组添加数值 + seq = STEP[-1][0] + 1 # 记录顺序 + step = [seq, loca, num, u_martix.copy()] # 记录一步 + # print(step[:3]) + if len(step) != 0: # 添加步骤 + STEP.append(step) + step = [] + print(loca, num, "添加") + elif note_mark: # 笔记模式打开时 + if u_martix[row][col] == 0:# 若当前没有笔记,则只有num + u_martix[row][col] = 10#标记该格为笔记格子 + possible[row][col] = {num}# 将笔记加入记录中 + elif u_martix[row][col] == 10:# 若已有笔记,则添加num + possible[row][col].add(num) + draw(loca, martix, u_martix, STEP)#重新绘制界面 + +def control_draw_old(bc): + ''' + 绘制数字按钮 + :param bc: 全局按钮大小 + :return: + ''' + for i in range(9):#遍历0~9 + top_x, top_y = i * (bc + 3) + 50, 12 * (bc + 3) + 10#计算每个按钮左上角坐标 + B = tk.Button(root, text=f"{i + 1}", bg='white', fg='black', + font=('幼圆', 14, 'bold'), command=lambda num=i + 1: u_number(num, loca)) + B.place(x=top_x, y=top_y, width=bc + 3, height=bc + 3)#绘制按钮到图上 +def control_draw(bc, u_martix): + ''' + 绘制数字按钮 + :param bc: 全局按钮大小 + :param u_martix: 当前用户矩阵 + :return: + ''' + num = [9] * 11#记录每个数字缺失的个数为9 + for i in range(9): + for j in range(9):#遍历当前数组,每有一个数字,则该数字的缺失值减一 + num[u_martix[i][j]] = num[u_martix[i][j]] - 1 + for i in range(9): + top_x, top_y = i * (bc + 3) + 50, 12 * (bc + 3) + 10#计算每个按钮左上角坐标 + if num[i + 1]:#如果该数字还有缺失(图中不到9个),则按钮可以显示 + B = tk.Button(root, text=f"{i + 1}", bg='white', fg='black', + font=('幼圆', 14, 'bold'), command=lambda num=i + 1: u_number(num, loca)) + else:#若某个数字已经有9个,说明已经不能选择该数字,设置这个按钮为不可按 + B = tk.Button(root, text=f"{i + 1}", bg='grey', fg='black', state=DISABLED, + font=('幼圆', 14, 'bold'), command=lambda num=i + 1: u_number(num, loca)) + B.place(x=top_x, y=top_y, width=bc + 3, height=bc + 3)#绘制按钮到图上 + + +def listen_del(loca, possible): + ''' + 擦除功能 + :param loca: 当前位置 + :return: + ''' + if loca != (): + # 选定了位置才能擦除 + row, col = loca[0] - 1, loca[1] - 1 + if not u_martix[row][col] == 0 and martix[row][col] == 0: # 原题目中没有数字才可以删除 + u_martix[row][col] = 0#设置为空 + possible[row][col].clear()#清除可能值 + print(loca, 2, "删除")#输出删除信息 + draw(loca, martix, u_martix, STEP)#显示界面 + +def listen_all_note(possible, u_martix): + ''' + 一键提示功能 + :param pos: + :return: + ''' + print('all note')#输出提示信息 + global show_possible, loca + show_possible = 1 # 显示提示信息 + for row in range(9): + for col in range(9): + if u_martix[row][col] == 10 or u_martix[row][col] == 0:# 只有空格才会更新提示 + possible[row][col] = GetPossible(u_martix, row, col)#计算可能取值 + u_martix[row][col] = 10#标记这个格子为存在提示 + draw(loca, martix, u_martix, STEP)#重新绘制界面 + +def show_hint(bc, u_martix, possible): + ''' + 显示提示信息 + :param bc: 方格大小 + :return: + ''' + hint_bc = int(bc // 3)# 小数字的间距 + for row in range(9): + for col in range(9): + if not u_martix[row][col] == 10: + possible[row][col].clear()# 只有u_martix[j][i]为10才表示该格子有笔记存在 + continue# 若该格无笔记,则跳过该格 + x, y = col * (bc + 3) + 50 + bc / 2, row * (bc + 3) + 50 + bc / 2# 计算大方格中点坐标 + x = x - hint_bc#计算左上角第一个数字坐标 + y = y - hint_bc#计算左上角第一个数字坐标 + for ii in range(3):# 按照九宫格显示小数字 + for jj in range(3): + n = ii * 3 + jj + 1#遍历1~9 + if possible[row][col]: # 在用户已填的部分有可能导致部分格子无解,所以先加一个判断 + for k in possible[row][col]: + if n == k:# 如果possible[row][col]中含有k,则说明该格子可以填k,则将k显示在方格中 + cv.create_text(x + ii * hint_bc, y + jj * hint_bc, + text=f"{n}", font=('楷体', 10), fill='purple') + cv.update()#更新画布 + + + + +def listen_hint(loca, u_martix): + ''' + 提示功能:显示当前格子的可能值 + :param loca: 当前格子 + :return: + ''' + if loca != (): + row, col = loca[0] - 1, loca[1] - 1 + if u_martix[row][col] == 0 or u_martix[row][col] == 10:#只有该方格没有数字时才能提示 + possible[row][col] = GetPossible(u_martix, row, col)#计算该方格可能取值 + u_martix[row][col] = 10#标记该方格为存在提示 + draw(loca, martix, u_martix, STEP)#重新绘制界面 + +def listen_note(loca): + ''' + 笔记功能 + :param loca: 当前位置 + :return: + ''' + if loca != ():#若已经选中一个方格 + global note_mark # 函数内修改全局变量 + note_mark = not note_mark#切换笔记模式 + print(f"笔记功能:{note_mark}")#输出信息 + draw(loca, martix, u_martix, STEP)#绘制界面 + +def listen_backspace(): + ''' + 撤回功能 + :return: + ''' + global u_martix, STEP + if len(STEP) > 1:# 如果操作记录中有操作 + STEP.pop()# 删除操作记录最后一步操作 + u_martix = STEP[-1][-1].copy()#将数独状态复位到上一步操作 + loca = STEP[-1][1]#将当前选定方格复位到上一步操作 + draw(loca, martix, u_martix, STEP)#重新绘制界面 + else:#若已经没有操作步骤(已经回到游戏初始状态) + u_martix = STEP[-1][-1].copy()#将数独状态复制到初始状态 + + +def control(bc): + ''' + 绘制五个控制按键 + :param bc:全局按钮大小 + :return: + ''' + global loca, loca_o + lon = 9 * (bc + 3) + 50 + lon = lon // 5 - 12 # 控制按键长度 + ctl = ["撤回", "擦除", "笔记", "一键笔记", "提示"] + # 撤回 + B1 = tk.Button(root, text=f"{ctl[0]}", bg='white', fg='black', + font=('幼圆', 12, 'bold'), command=lambda: listen_backspace()) + B1.place(x=(lon + 2) * 0 + 50, y=(bc + 3) * 11 + 8, width=lon, height=bc) + # 擦除 + B2 = tk.Button(root, text=f"{ctl[1]}", bg='white', fg='black', + font=('幼圆', 12, 'bold'), command=lambda: listen_del(loca, possible)) + B2.place(x=(lon + 2) * 1 + 50, y=(bc + 3) * 11 + 8, width=lon, height=bc) + # 笔记 + B3 = tk.Button(root, text=f"{ctl[2]}", bg='white', fg='black', + font=('幼圆', 12, 'bold'), command=lambda: listen_note(loca)) + B3.place(x=(lon + 2) * 2 + 50, y=(bc + 3) * 11 + 8, width=lon, height=bc) + # 一键笔记 + B4 = tk.Button(root, text=f"{ctl[3]}", bg='white', fg='black', + font=('幼圆', 12, 'bold'), command=lambda: listen_all_note(possible, u_martix)) + B4.place(x=(lon + 2) * 3 + 50, y=(bc + 3) * 11 + 8, width=lon, height=bc) + # 提示 + B5 = tk.Button(root, text=f"{ctl[4]}", bg='white', fg='black', + font=('幼圆', 12, 'bold'), command=lambda: listen_hint(loca, u_martix)) + B5.place(x=(lon + 2) * 4 + 50, y=(bc + 3) * 11 + 8, width=lon, height=bc) + + +def draw(loca, martix, u_martix, STEP): + ''' + 绘制游戏界面 + :param loca: 当前位置 + :return: + ''' + for i in range(9): + for j in range(9):# 绘制小方格 + rect_draw(BC, i, j) + if loca != ():#根据当前选中位置绘制阴影 + row, col = loca[0] - 1, loca[1] - 1 + for i in range(9): + for j in range(9): + if col == i and row == j:#当前选中的方格使用灰色标记 + cv.create_rectangle(col * (BC + 3) + 52, row * (BC + 3) + 52, col * (BC + 3) + 48 + BC, + row * (BC + 3) + 48 + BC, fill='grey', width=0) + elif col == i or row == j:#当前选中方格所在行列使用浅灰色标记 + cv.create_rectangle(i * (BC + 3) + 52, j * (BC + 3) + 52, i * (BC + 3) + 48 + BC, + j * (BC + 3) + 48 + BC, fill='#CCCCCC', width=0) + show_hint(BC, u_martix, possible)# 显示提示信息 + for row in range(9): + for col in range(9):# 在小方格上绘制数字 + num_draw(BC, row, col, martix, u_martix) + print(u_martix.tolist()) + print(loca) + control(BC)# 绘制五个控制按键 + control_draw(BC, u_martix)# 绘制9个数字按钮 + empty_count = empty(martix)# 计算数组空格 + Difficulty(empty_count)# 根据空格数量显示难度 + noter(note_mark)# 显示笔记提示 + seq_recode(right, STEP)# 显示步骤 + win(u_martix, time1, STEP)# 检查游戏是否结束 + cv.update()# 更新画布 + +N = 30 # 空白格子数 +martix = InitMartix(N) +u_martix = martix.copy() # 复制用户martix数组 +BC = 40 +show_possible = 0 # 是否显示提示 +# 初始化可能值数组 +p = [] +possible = [] +for i in range(9): + p.append({}.copy()) +for i in range(9): + possible.append(p.copy()) +# print(possible) +loca_o = tuple() # martix 数组上次滞留坐标 +loca = tuple() +note_mark = False # 笔记开启标志 +# note_list = [] # 笔记数字记录 +# note_martix = [] # 笔记位置记录列表 +wait_time = 0.5 # 自动求解速度 +step = [] # 操作步骤 +STEP = [[0, (0, 0), 0, martix]] # 记录每一步的状态 +seq = 1 # 全局操作次序初始化 + +time1 = MyTimer() # 实例计时器 +# 显示时间信息 +show_Time(time1) +draw(loca, martix, u_martix, STEP) + +cv.bind('', left1) + +if __name__ == "__main__": + mainloop() \ No newline at end of file