تشترك الأمثلة الواردة في هذه المقالة في الكود المحدد للعبة Java Sudoku للرجوع إليه. المحتوى المحدد كما يلي
أخطط لتثبيت المكونات التي تتطلبها Javafx واستخدام Javafx مباشرة ، ولكن يبدو أن إصدار Eclipse خاطئ ولا يمكن استخدامه حتى بعد التثبيت ...
تم كتابة رمز سودوكو خلال عطلة الشتاء. لقد تعلمت جافا لمدة شهر. يبدو أنه غير كافٍ بعض الشيء الآن ، لكنه البرنامج الأول بعد كل شيء ، لذلك أضعه مباشرة. يستخدم تنفيذ القرص النهائي Sudoku العنف بشكل مباشر ، وتعقيد الوقت مرتفع بعض الشيء. أنا كسول جدًا لتغييره ووضع الكود مباشرة.
تنفيذ القرص النهائي:
استيراد java.util.random ؛ الطبقة العامة sudokupuzzlegenerator {private Random Random = new Random () ؛ int static int int max_call_random_array_times = 220 ؛ private int currenttimes = 0 ؛ public int [] [] generatepuzzlematrix () {int [] [] randommatrix = new int [9] [9] ؛ لـ (int row = 0 ؛ row <9 ؛ row ++) {if (row == 0) {currentTimes = 0 ؛ Randommatrix [row] = BuildRandomArray () ؛ } آخر {int [] temprandomarray = buildRandomArray () ؛ لـ (int col = 0 ؛ col <9 ؛ col ++) {if (currentTimes <max_call_random_array_times) {if (! isCandidatenMbfound (randommatrix ، temprandomarray ، row ، col)) الصف -= 1 ؛ العقيد = 8 ؛ temprandomarray = buildRandomArray () ؛ }} آخر {row = -1 ؛ العقيد = 8 ؛ ResetValuestozeros (Randommatrix) ؛ CurrentTimes = 0 ؛ }}} إرجاع randommatrix ؛ } private void resetvaluesinRowtozero (int [] [] matrix ، int row) {for (int j = 0 ؛ j <9 ؛ j ++) {matrix [row] [j] = 0 ؛ }} private void resetvaluestozeros (int [] [] matrix) {for (int row = 0 ؛ row <9 ؛ row ++) {for (int col = 0 ؛ col <9 ؛ col ++) {matrix [row] [col] = 0 ؛ }}} iscandidatenmbfound خاص (int [] [] [] randommatrix ، int [] randomarray ، int row ، int col) {for (int i = 0 ؛ i <9 ؛ i ++) {randommatrix [row] [col] = randomarray [i] ؛ if (noconflict (randommatrix ، row ، col)) {return true ؛ }} إرجاع خطأ ؛ } noconflict boolean الخاص (int [] [] candidatematrix ، int row ، int col) {return noconflictinrow (candidatematrix ، row ، col) && noconflictincolumn (candidatematrix ، row ، col) && noconflictinblock (candidatematrix ، row ، col) ؛ } private boolean noconflictinrow (int [] [] candidatematrix ، int row ، int col) {int currentValue = candidatematrix [row] [col] ؛ لـ (int colnum = 0 ؛ colnum <col ؛ colnum ++) {if (currentValue == candidatematrix [row] [colnum]) {return false ؛ }} إرجاع صحيح ؛ } boolean noconflictincolumn (int [] [] candidatematrix ، int row ، int col) {int currentValue = candidatematrix [row] [col] ؛ لـ (int rownum = 0 ؛ rownum <row ؛ rownum ++) {if (currentValue == candidatematrix [rownum] [col]) {return false ؛ }} إرجاع صحيح ؛ } private boolean noconflictinblock (int [] [] candidatematrix ، int row ، int col) {int baserow = row / 3 * 3 ؛ int basecol = col / 3 * 3 ؛ لـ (int rownum = 0 ؛ rownum <8 ؛ rownum ++) {if (candidatematrix [baserow + rownum / 3] [basecol + rownum ٪ 3] == 0) {conter ؛ } لـ (int colnum = rownum + 1 ؛ colnum <9 ؛ colnum ++) {if (candidatematrix [baserow + rownum / 3] [basecol + rownum ٪ 3] == candidatematrix [baserow + colnum / 3] [basecol + colnum ٪ 3]) {return false ؛ }}} إرجاع صحيح ؛ } private int [] buildRandomArray () {currentTimes ++ ؛ int [] array = new int [] {1 ، 2 ، 3 ، 4 ، 5 ، 6 ، 7 ، 8 ، 9} ؛ int randomint = 0 ؛ لـ (int i = 0 ؛ i <20 ؛ i ++) {randomint = random.nextint (8)+1 ؛ int temp = صفيف [0] ؛ صفيف [0] = صفيف [randomint] ؛ صفيف [randomint] = temp ؛ } صفيف الإرجاع ؛ } public int getCurrentTimes () {return CurrentTimes ؛ } public void setCurrentTimes (int currenttimes) {this.currentTimes = currentTimes ؛ }} الواجهة والحكم:
مكتوبة مع الأرجوحة
استيراد javax.swing.*؛ استيراد java.awt.*؛ استيراد java.awt.event.*؛ استيراد java.util.random ؛ يمتد SHUD من الطبقة العامة JFRAME {Private Static Final Long SerialVersionuid = 5952689219411916553L ؛ // Serialize Field Private Static JTextField A [] [] = New JTextField [9] [9] ؛ // تخزين الأرقام في مربع النص ثابت int ans [] [] = new int [9] [9] ؛ // تخزين إدخال صفيف من رقمين SudokupuzzleGenerator مثال = New SudokupuzzleGenerator () ؛ int int inter [] [] = example.generepuzzlematrix () ؛ حقوق الباحث العام [] [] ؛ private int [] [] wk (int a [] []) {// hidden random r = new random () ؛ int A1 ، A2 ؛ A1 = R.NextInt (9) ؛ A2 = R.NextInt (9) ؛ لـ (int i = 0 ؛ i <100 ؛ i ++) {a [a1] [a2] = 0 ؛ A1 = R.NextInt (9) ؛ A2 = R.NextInt (9) ؛ } إرجاع أ ؛ } public shud () {Container c = getContentPane () ؛ C.SetLayout (New BorderLayout (2 ، 1)) ؛ // Lorder Layout jmenuitem jmiok = new jmenuitem ("submit") ؛ // define menu jmenuitem jmiexplain = new jmenuitem ("التفاصيل") ؛ jmenuitem jMimessage = new jmenuitem ("المعلومات") ؛ JPanel Panel = New JPanel () ؛ // تحديد لوحة حاوية. add (jmiok) ؛ // إظهار القائمة في لوحة الحاويات. add (jmiexplain) ؛ Pane.add (jMimessage) ؛ jpanel p1 = new jpanel (new GridLayout (9 ، 9 ، 5 ، 5)) ؛ // تحديد تخطيط الشبكة لـ 9 صفوف و 9 أعمدة إضافة (لوحة ، borderlayout.north) ؛ // ضع القائمة إلى الشمال إضافة (p1 ، borderlayout.center) ؛ // ضع الأرقام في اليمين الأوسط = wk (يمين) ؛ لـ (int k = 0 ؛ k <9 ؛ k ++) {for (int n = 0 ؛ n <9 ؛ n ++) {if (rightans [k] [n]! = 0) {a [k] [n] = new jtextfield (""+يمين [k] [n]) ؛ a [k] [n] // فقط عرض P1.Add غير معدّل (A [K] [n]) ؛ // إضافة مربع نص} آخر {a [k] [n] = new JTextField () ؛ a [k] [n] p1.Add (a [k] [n]) ؛ }} إضافة (p1) ؛ . اليمين! "،" النتيجة "، joptionpane.information_message) ؛} آخر {joptionpane.showmessagedialog (خالية ،" إجابتك صحيحة! "،" النتيجة "، joptionpane.information_message) ؛ خطأ! "،" النتيجة "، joptionpane.information_message) ؛}}}}}) ؛ ExpllistenerClass LeaderR2 = جديد ExplisterenerClass () ؛ jmiexplain.addActionListener (المستمع 2) ؛ messagelistenerclass مستمع 3 = messagelistenerclass new messagelisterClass () ؛ jMimessage.addActionListener (المستمع 3) ؛ } static int getText () // احصل على نص مربع النص {int i ، j ؛ لـ (i = 0 ؛ i <9 ؛ i ++) {for (j = 0 ؛ j <9 ؛ j ++) {ans [i] [j] = 0 ؛ }} لـ (int k = 0 ؛ k <9 ؛ k ++) {for (int n = 0 ؛ n <9 ؛ n ++) {try // issection handling {ans [k] [n] = integer.parseint (a [k] [n] .gettext ()) ؛ // قم بتحويل نوع الإجابة إلى ANS} catch (numberformatexception nfe) {joptionpane.showmessagedialog (null ، "قم بتضمين غير الأرقام في البيانات ، يرجى إعادة الدخول") ؛ العودة 0 ؛ }}} return 1 ؛ } القاضي المنطقي الثابت () // ugge ما إذا كانت إجابة المدخلات صحيحة {int i ، j ، k ؛ int [] [] الإجابة = الإجابة ؛ لـ (i = 0 ؛ i <9 ؛ i ++) {if (j (appless [i]) == false) // ادع ما إذا كانت هناك أرقام مكررة في كل عمود. } لـ (j = 0 ؛ j <9 ؛ j ++) // ugn expern quate regues in int {int [] newAnswerColumn = new int [9] ؛ لـ (i = 0 ؛ i <9 ؛ i ++) {newAnswerColumn [i] = الإجابة [i] [j] ؛ } if (j (newanswercolumn) == false) return false ؛ } لـ (i = 0 ؛ i <3 ؛ i ++) // upply ما إذا كانت هناك أرقام مكررة في كل شبكة التاسعة {for (j = 0 ؛ j <3 ؛ j ++) {k = 0 ؛ int [] newAnswer = new int [9] ؛ لـ (int m = i * 3 ؛ m <i * 3 +3 ؛ m ++) {for (int n = j * 3 ؛ n <j * 3 +3 ؛ n ++) {newanswer [k] = applic [m] [n] ؛ K ++ ؛ }} if (judge9 (newanswer) == false) {return false ؛ }} إرجاع صحيح ؛ } قاضي منطقي ثابت عام (int [] الإجابة) {int i ، j ؛ لـ (i = 0 ؛ i <9 ؛ i ++) {for (j = 0 ؛ j <9 ؛ j ++) {if (i == j) متابعة ؛ إذا (الإجابة [i] == الإجابة [j]) // إذا كانت هناك أرقام مكررة ، فأرد خطأ {return false ؛ }}} إرجاع صحيح ؛ // لا أرقام مكررة ، إرجاع TRUE} الفراغ الثابت العام (سلسلة [] args) {jframe frame = new Shud () ؛ Frame.Settitle ("Suduku") ؛ Frame.Setsize (600،900) ؛ frame.setLocationRelativeto (NULL) ؛ frame.setDefaultCloseOperation (jframe.exit_on_close) ؛ frame.setVisible (صحيح) ؛ }} class ExplistenerClass تنفذ ActionListener {// event beaderpublic void actionperformed (actionevent e) {joptionpane.showmessagedialog (null ، "املأ الأرقام للتأكد من عدم وجود ازدواج للأرقام في كل صف ، كل عمود وكل تسعة صغار" ، "توضح" ، joptionpane.information_mess) ؛ }} class messagelistenerclass تنفذ ActionListener {public void actionperformed (ActionEvent e) {joptionpane.showmessagedialog (null ، "made by wyx" ، "message" ، joptionpane.information_message) ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.