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