编程大实践 数独破解 #Cilay #嵩天
圖形界面數獨游戲
一、項目背景
1.數獨
**數獨(Sudoku)**是一種數學邏輯游戲,游戲由9×9個格子組成,玩家需要根據格子提供的數字推理出其他格子的數字。
這種游戲只需要邏輯思維能力,與數字運算無關,所以數學不好的人也很適合。
雖然玩法簡單,但提供的數字卻千變萬化,所以不少教育者認為數獨是鍛煉腦筋的好方法。
數獨游戲由美國自由拼圖發明者Howard Garns于1979年發明,日本出版商Nikoli于1986年發展,意思為“每個格子只有一個數字”。
數獨規則:
數獨游戲由九個3*3的九宮格呈3*3排列,構成9*9小格的矩陣,每個小格中只能填入1-9中的一個數字,對于數字的位置有如下限制:
-  ? 矩陣的每一行包含1-9的每一個數字,且不能重復 
-  ? 矩陣每一列的數字不能重復(要求同行) 
-  ? 每一個3*3的九宮格內,數字不能重復 
一個填好的9*9矩陣稱為終盤(Endgame),在終盤中去掉部分數字,供解謎者填寫,稱為初盤。
2.圖形用戶界面
圖形用戶界面(Graphical User Interface,縮寫:GUI)是指采用圖形方式顯示的計算機操作用戶界面。
與早期計算機使用的命令行界面相比,除了降低用戶的操作負擔之外,對于新用戶而言,圖形界面對于用戶來說在視覺上更易于接受,學習成本大幅下降,也讓電腦的大眾化得以實現。
雖然圖形用戶界面已經成為現代電腦的主要界面,然而這界面必定要透過在顯示器的特定位置,以“各種美觀、而不單調的視覺消息”提示用戶“狀態的改變”,勢必得比簡單的文字消息呈現,花上更多的電腦運算能力,計算“要改變顯示器哪些光點,變成哪些顏色”,功能命令的設計也比較復雜,現代操作系統的圖形復雜程度更遠超早期的GUI。
3.QT
Qt是一個跨平臺的C++應用程序開發框架。廣泛用于開發GUI程序,這種情況下又被稱為部件工具箱。也可用于開發非GUI程序,例如控制臺工具和服務器。
Qt 被用于 OPIE、Skype、VLC media player、Adobe Photoshop Elements、VirtualBox與Mathematica以及被Autodesk、歐洲空間局、夢工廠、Google、HP、KDE、盧卡斯影業、西門子公司、沃爾沃集團,華特迪士尼動畫制作公司、三星集團、飛利浦、Panasonic所使用。它是 Digia 公司的產品。
Qt使用標準的C++和特殊的代碼生成擴展以及一些宏。通過語言綁定,其他的編程語言也可以使用Qt。 Qt是自由且開放源代碼的軟件,在GNU寬通用公共許可證(LGPL)條款下發布。所有版本都支持廣泛的編譯器,包括GCC的C++編譯器和Visual Studio。
官方網站:Qt | Cross-platform software development for embedded & desktop
4.PyQT
PyQt 是一組用于Qt 公司的Qt 應用程序框架的 Python 綁定,可在 Qt支持的所有平臺上運行,包括 Windows、macOS、Linux、iOS 和 Android。
PyQt6 支持 Qt v6,PyQt5 支持 Qt v5,PyQt4 支持 Qt v4。綁定是作為一組 Python 模塊實現的,包含 1,000 多個類。
項目地址:PyQt5 · PyPI
二、項目目標
1.主要目標
編寫一個擁有圖形界面的數獨游戲,功能包括:
-  ? 游戲主要界面、鼠標/鍵盤交互操作 
-  ? 游戲過程控制(新建游戲、加載問題、重新開始、退出等) 
-  ? 支持自動游戲求解 
2.目標分解
-  ? 編寫圖像用戶界面 
-  ? 根據添加相關功能 
三、技術選型
1.問題:圖形界面框架如何選擇?
Python常用第三方GUI圖形界面框架如下,推薦使用PyQT、TKinter、PySimpleGUI來構建。
-  ? PyQT 
-  ? TKinter 
-  ? WxPython 
-  ? PySide 
-  ? Kivy 
-  ? PySimpleGUI 
2.問題:數獨生成算法有那幾種?
一般有兩種數獨生成算法:
-  ? 矩陣變換:對一個正確的終盤使用隨機的矩陣變換,得到一個合乎規范的新終盤,此方法隨機程度較差,結果與初始差別不大 
-  ? 自動生成:利用求解算法,先隨機填入一些初始格,后交給求解算法得到終盤 
3.問題:數獨求解算法有那幾種?
目前,主流的數獨求解算法有以下幾種:
-  ? 暴力搜索:(效率低) 
-  ? 舞蹈鏈算法:使用交叉鏈表優化搜索的算法 
-  ? 基于約束滿足問題的搜索算法:使用啟發式函數優化搜索流程,使更快得解 
-  ? 推理算法:使用邏輯推理的形式,推出問題內容,適用于簡單數獨求解,復雜數獨將無法求解 
四、課堂要求
1.提交項目結構
--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown
main.py 項目執行主文件 README.md 項目描述說明文檔 requirements.txt 項目依賴包版本號(項目需要下載到本地執行,如果有第三方依賴包,必須填寫)2.標注核心算法函數位置
--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown
# 破解算法 位于main.py文件 第102行 def sudoku():pass3.程序運行效果截圖
?
總結
以上是生活随笔為你收集整理的编程大实践 数独破解 #Cilay #嵩天的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Tipask,Tipask建站,Tipa
- 下一篇: 空气净化器哪个品牌口碑好 空气净化器除甲
