日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java gui 数独_数独-GUI开发

發布時間:2023/12/31 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java gui 数独_数独-GUI开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GUI界面開發

開發運行環境

運行環境:JDK1.8

運行命令:java -jar sudokuGUI.jar

語言:java

開發環境:Intellij IDEA 2019.2,JavaFX Scene Builder 8.3.0

項目結構和說明

為了利用之前的源代碼,UI界面采用javafx進行開發,使用MVC框架來設計整個應用,使用了數據綁定,通過構建容器組件,添加menu、監聽器等實現圖形化界面功能。

軟件功能說明

主要頁面如下所示,一打開應用自動進行計時。

點擊菜單中的開始,可以開始新游戲、提交當前頁面,查看答案,退出游戲。

點擊提交時,計時器停止,若有空位置沒有填,會提示填滿再提交,若有錯誤會彈窗會提示,完全正確時會彈窗恭喜用戶。

面向對象分析設計

用例圖

類圖

總共有五個類

Main用于顯示UI界面,界面用xml編寫,在sample.xml中。

Controller監聽圖形頁面、鼠標、鍵盤等。

Solve驗證用戶提交的數獨是否正確。

Generate用于生成終局,對終局隨機挖空,形成數獨,顯示在UI中。

AlterInfo用于彈窗提示。

SudokuCell表示數獨中的每一個小塊,控制是否可以輸入,顯示數字等。

狀態圖

設計思路

GUI中的主體代碼和命令行部分幾乎一致,最開始選擇生成數獨的回溯算法。最初實現UI界面,用了優化以后利用排列組合快速生成終局的算法,但因為終局是由變換第一宮形成的,所以存在規律性,降低數獨的可玩性。所以采用了最初生成終局的回溯算法。

實現思路是先通過回溯算法生成一個終局,因為要求最少挖30個空,最多挖60個空,每個宮中最少有兩個。當每個最少挖4個,4×9=36符合要求,每個宮最多挖6個,6×9=54個符合要求。所以循環九個宮,每個宮產生一個隨機數n(4<=n<=6),然后在1-9中生成n個不同的隨機數,在該宮中將n個隨機數所在的位置挖掉,便生成了一個數獨。

在編寫代碼的過程中,卡殼了很久一直在思考如何保證數獨解的唯一性,但因為自己對這部分算法的理解并不是很深入,所以放棄了保證了數獨解的唯一性。用戶提交數獨時,不與最初生成的終局比較,而是利用循環檢查用戶提交的答案中是否有錯誤,沒有錯誤即為正確答案。若用戶選擇查看答案,則提供最初的終局。

自定義了一個數據類型SudokuCell,來存放數獨中的每一個小塊,其中設置一個屬性write保證可以多次修改答案,若數獨中該位置需要填寫,則將write設置為true,若不需要則設置為false,并且可以對每一個SudokuCelle用css進行美化,使數獨的外觀更加美觀。

具體代碼實現

對用戶提交數獨進行檢查,正確時返回true,錯誤時返回false,這個方法在命令行中用于測試,檢查對txt數獨中求解時,是否有錯誤。

/**

* @Title: checkSolution

* @Description: 檢查結果

* @param data

* @return boolean

* @throws

*/

boolean checkSolution(int[] data)

{

int index=0;

int[] criterion=new int[27];

Solve s=new Solve();

for (int j = 0; j < 27; j++) {

criterion[j] = 511;

}

s.setCriterion(criterion);

if(!checkSudoku(data,index,s))

return false;

return true;

}

/**

* @Title: checkSudoku

* @Description: 檢查數獨答案是否正確

* @param data

* @param index

* @param s

* @return boolean

* @throws

*/

private boolean checkSudoku(int[] data,int index,Solve s) {

for (int j = 0; j < 9; j++) {

for (int k = 0; k < 9; k++) {

while (data[index]>9 || data[index]<1)

{

index++;

}

int temp = data[index++];

if (!s.fill(j, k, temp)) {

Logger logger=Logger.getLogger("SolveTest");

logger.setLevel(Level.SEVERE);

String msg="row:"+(j+1)+"clo:"+(k+1)+"value:"+temp;

logger.severe(msg);

return false;

}else{

s.usedNum(j,k,temp);

}

}

}

return true;

}

測試

因為GUI項目中,除了UI部分代碼,都是在命令行中經過測試的代碼,所以只進行簡單的系統測試,檢測頁面的響應、監聽等是否正常。

編號

操作

預期結果

實際結果

狀態

1

頁面有空位,點擊提交

未完成彈窗

未完成彈窗

通過

2

頁面沒有空位,存在錯誤,點擊提交

錯誤彈窗

錯誤彈窗

通過

3

正確完成數獨,點擊提交

正確彈窗

計時停止

正確彈窗

計時停止

通過

4

點擊查看答案

顯示答案

計時停止

顯示答案

計時停止

通過

5

點擊退出

退出程序

退出程序

通過

6

點擊新游戲

開始新游戲

開始新游戲

通過

7

在空位輸入非數字字符

輸不進去

輸不進去

通過

8

在空位輸入數字字符

空位顯示該數字

空位顯示該數字

通過

9

點擊查看答案以后,點擊提交

正確彈窗

正確彈窗

通過

10

點擊關于

信息彈窗

信息彈窗

通過

11

點擊幫助

幫助彈窗

幫助彈窗

通過

簡要開發過程

時間

內容

2019年12月19日 - 2019年12月20日

需求分析、概要設計

2019年12月26日 - 2020年1月1日

基本完成命令行功能

2019年12月26日 - 2020年1月1日

開始單元測試

2020年1月2日 - 2020年1月3日

修改算法、對代碼結構進行優化,完成測試

2020年1月4日 - 2020年1月16日

代碼質量檢測、UI編寫

2020年1月17日 - 2020年1月18日

博客優化

總結

以上是生活随笔為你收集整理的java gui 数独_数独-GUI开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。