Cet article partage le code spécifique de la version Java de l'implémentation de l'interface de jeu Sudoku pour votre référence. Le contenu spécifique est le suivant
Rendu de mise en œuvre:
Écrivez une description d'image ici
La fonction principale est utilisée pour démarrer le programme:
package hlc.shudu.app; import hlc.shudu.src.shuduhelper; import hlc.shudu.ui.shudumainframe; public class appstart {public static void main (string [] args) {shudumainframe mainframe = new shudumainframe (); mainframe.setVisible (true); }}Classe de formulaire principal (y compris la zone de messages, la zone du temps, la zone de jeu):
Package hlc.shudu.ui; import java.awt.borderlayout; import java.awt.color; import java.awt.font; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.text.simplener; import; javax.swing.icon; importer javax.swing.imageicon; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.timer; import javax.swing.border.titled Formulaire principal de Sudoku * / classe publique ShudumainFrame étend JFrame {public static int pas = 1; // Niveau public statique JLabel lbpass; // Afficher le lable public statique du niveau LongTime longue = 0; // Le joueur utilise des shuducanvers privés PanelCanvers; // Zone de jeu principale Public Static Timer UsertimeAction; / * * Constructeur par défaut * / public shudumainframe () {// méthode d'initialisation init (); // Ajouter le composant addComponent (); // Ajouter une zone de jeu principale addCanvers (); } / * * Ajouter une zone de jeu principale * / private void addCanvers () {PanelCanvers = new ShuduCanvers (); PanelCanvers.SetBorder (nouveau TitledBorder ("Game Area")); // Ajoutez la zone de jeu principale au formulaire this.add (PanelCanvers, BorderLayout.Center); } / * * Ajouter une zone de composants * / private void addComponent () {jpanel PanelComponent = new JPanel (); // Ajouter une zone de message AddPanelmsg (panneau PanelComponent); // Ajouter une zone de temps AddPanelTime (panneau PanelComponent); // Ajouter un composant en haut du formulaire this.add (PanelComponent, borderLayout.north); } private void addPanelTime (jpanel PanelComponent) {jpanel paneltime = new JPanel (); PANELTIME.SETBORDER (NOUVEAU TITLEDBORDER ("TIME")); PANELTIME.SETLAYOUT (NOUVEAU GRIDLAYOUT (2, 1)); JLABEL FINAL lbSyStime = new JLabel (); JLABEL FINAL lbUserTime = new JLabel (); PANELTIME.ADD (lbsystime, borderlayout.north); PANELTIME.ADD (LBUsertime, BorderLayout.South); // Définir le temporisateur de temps du système SysTimeAction = new Timer (500, new ActionListener () {@Override public void ActionPerformed (ActionEvent E) {long timemillis = System.Currenttimemillis (); SimpledateFormat df = new SimpledateFormat ("yyyymm-dd hh: mm: ss"); lbsystime. "+ df.format (timeMillis));}}); systimeAction.start (); usertiMeAction = new Timer (1000, new ActionListener () {@Override public void ActionPerformed (ActionEvent e) {lbuserime.setTeTXt ("vous avez utilisé:" + (++ usedTime) + "sec.");}}); usertimeAction.start (); PannelComponent.Add (PanEltime, BorderLayout.East); } / * * Ajouter une zone de message * / private void addPanelmsg (jpanel PanelComponent) {// PanelComponent.SetBorder (new TitledBorder ("Message Zone")); PannelComponent.SetLayout (new GridLayout (1, 3)); FONT FONT14 = nouvelle police ("", 4, 14); FONT FONT28 = NOUVELLE FONT ("", 2, 28); Jpanel Panelmsg = new JPanel (); PANNELMSG.SetBorder (nouveau TitledBorder ("Zone de messages")); JLabel lbpass1 = new JLabel ("niveau:"); lbpass1.setfont (FONT14); PANNELMSG.ADD (LBPASS1); // Affiche le nombre de niveaux lbpass = new JLabel ("" + pass); lbpass.setForeground (Color.Red); lbpass.setfont (FONT28); PANNELMSG.ADD (LBPASS); JLABEL LBPASS2 = NOUVEAU JLABEL ("OFF / 10 niveaux au total"); lbpass2.setfont (FONT14); PANNELMSG.ADD (LBPASS2); PannelComponent.Add (PanelMsG, BorderLayout.Center); } / * * Initialisation de l'interface * / private void init () {imageIcon image = new ImageIcon ("icon / icon.png"); this.seticonImage (image.getImage ()); // Définissez la taille de la fenêtre initiale This.SetSize (515, 600); // définit la position initiale de la fenêtre this.setLocation (500, 50); // Définit le titre de fenêtre this.settitle ("Sukua Game (par: hou longchao)"); // Définissez le formulaire pour ne pas modifier la taille this.setResiSable (false); // Définissez l'opération de fermeture par défaut this.setDefaultCloseOperation (jframe.exit_on_close); }}Toile de la zone de jeu:
Package hlc.shudu.ui; import hlc.shudu.src.shuduhelper; import java.awt.borderlayout; import java.awt.color; import java.awt.dialog.modalexclusionType; import java.awt.event.inputevent; import java.awt.event.mouseevent; import; java.awt.event.mouseListener; import javax.swing.jdialog; importer javax.swing.joptionpane; import javax.swing.jpanel; import javax.swing.border.border; import Javax.swing.border.titledborder; Classe publique ShuduCanvers étend Javax cellules; // Obtenez le tableau Sudoku int [] [] maps = new int [9] [9]; privé selectNumFrame selectNum; / * * Constructeur par défaut * / public shuduCanvers () {shudumainframe.usedtime = 0; maps = shuduhelper.getmap (); // Chargez la zone Sudoku this.setLayout (null); Cellules = Nouveau Shuducell [9] [9]; for (int i = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {// this.remove (celaires [i] [j]); // créer des cellules cellulaires [i] [j] = new shuducell (); // Définir les cellules de position [i] [J] .SetLocation (20 + i * 50 + (i / 3) * 5, 20 + j * 50 + (j / 3) * 5); if (passrole (shudumainframe.pass)) {cellules [i] [j] .setText ("" + maps [i] [j]); // définir les cellules de couleur d'arrière-plan [i] [J] .SetBackground (getColor (maps [i] [j])); Cellules [i] [J] .SetEnabled (false); Cellules [i] [J] .SetForeground (Color.Gray); } else {celaires [i] [j] .AddMouseListener (this); } this.add (cellules [i] [j]); }} checkFinish (); // reloadCanvers (); } / * * Vérifiez s'il est terminé * / private void checkFinish () {for (int i = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {if (! Check (i, j)) {return; }}} // Arrêtez le temporisateur de l'utilisateur shudumainframe.usertimeAction.stop (); // effacer tous les auditeurs de cellules clearallListener (); // ajouter un au numéro de passe shudumainframe.pass + = 1; if (shudumainframe.pass> 10) {int o = joptionpane .showconfirmDialog (this, "vous avez passé le niveau, avez-vous recommencé?", "", 0); if (o == 1) {System.exit (0); } else {shudumainframe.pass = 1; }} else {joptionpane.showMessageDialog (ceci, "Félicitations pour avoir réussi ce niveau! Temps passé:" + ShudumainFrame.Usedtime + "secondes / n entrera bientôt dans le niveau suivant!"); } // Mettez à jour l'invite de niveau shudumainframe.lbpass.setText ("" + shudumainframe.pass); // démarrer un nouveau niveau reloadCanvers (); // Ouvrez la minuterie de l'utilisateur shudumainframe.userMeAction.Start (); } / * * Vérifiez la cellule aux coordonnées spécifiées * / Boolean Check privé (int i, int j) {if (celaires [i] [j] .getText (). IsEmpty ()) {return false; } pour (int k = 0; k <9; k ++) {if (cellules [i] [j] .getText (). equals (celaires [i] [k] .getText (). Trim ()) && i! = k) {return false; } if (celaires [i] [j] .getText (). TRIM (). Equals (Cellules [k] [j] .getText (). Trim ()) && i! = k) {return false; } int ii = (i / 3) * 3 + k / 3; int jj = (j / 3) * 3 + k% 3; if (celaires [i] [j] .getText (). TRIM (). Equals (Cell [ii] [jj] .getText (). Trim ()) &&! (i == ii && j == JJ)) {return false; }} return true; } / * * Reload Area Sudoku * / public void reloadCanvers () {shudumainFrame.Usedtime = 0; I <9; i ++) {for (int j = 0; j <9; j ++) {this.remove (celaires [i] [j]); // créer des cellules cellulaires [i] [j] = new shuducell (); // Définir les cellules de position [i] [J] .SetLocation (20 + i * 50 + (i / 3) * 5, 20 + j * 50 + (j / 3) * 5); if (passrole (shudumainframe.pass)) {cellules [i] [j] .setText ("" + maps [i] [j]); // définir les cellules de couleur d'arrière-plan [i] [J] .SetBackground (getColor (maps [i] [j])); Cellules [i] [J] .SetEnabled (false); Cellules [i] [J] .SetForeground (Color.Gray); } else {celaires [i] [j] .AddMouseListener (this); } this.add (cellules [i] [j]); }} this.repaint (); CheckFinish (); } / * * Générez de manière aléatoire si le nombre est affiché dans cette position * / Boolean Passroled privé (int pas) {// TODO Méthode générée automatique Stub return Math.Random () * 11> Pass; } / * * Obtenez de la couleur basée sur le nombre * / Color privé getColor (int i) {Color Color = Color.pink; commutateur (i) {cas 1: color = new Color (255, 255, 204); casser; Cas 2: Color = nouvelle couleur (204, 255, 255); casser; Cas 3: Color = nouvelle couleur (255, 204, 204); casser; Cas 4: Color = nouvelle couleur (255, 204, 153); casser; Cas 5: Color = nouvelle couleur (204, 255, 153); casser; Cas 6: Color = nouvelle couleur (204, 204, 204); casser; Cas 7: Color = nouvelle couleur (255, 204, 204); casser; Cas 8: Color = nouvelle couleur (255, 255, 255); casser; Cas 9: Color = nouvelle couleur (153, 255, 153); casser; par défaut: pause; } retour de couleur; } @Override public void Mouseclicked (MouseEvent E) {// TODO Méthode générée automatiquement Stub} @Override public void Mousdressressed (MouseEvent E) {int modes = e.getModificaires (); if ((modes & inputevent.button3_mask)! = 0) {// coup de droite // effacer le contenu sur la cellule de clic ((shuducell) e.getsource ()). setText (""); } else if ((modes & inputevent.button1_mask)! = 0) {// Left-click // Si la fenêtre du numéro sélectionné existe, détruire if (selectnum! = null) {selectnum.disposose (); } // Créer une nouvelle fenêtre de sélection selectnum = new selectNumFrame (); // défini sur la fenêtre modale selectNum.setModal (true); // Définissez la position de la fenêtre de sélection sur le moniteur selectnum.setLocation (e.getLocationOnScreen (). X, e.getLocationOnScreen (). Y); // Passez la cellule cliquée à la fenêtre de sélection numérique selectnum.setcell ((shuducell) e.getsource ()); // Affichez la fenêtre de sélection numérique selectNum.setVisible (true); } checkFinish (); } / * * Effacer toutes les cellules Cliquez sur Écoute * / private void clearAllListener () {for (int i = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {celaires [i] [j] .removemeSelistEner (this); }}} @Override public void MouseLelent (Mouseevent e) {// Todo Méthode générée automatiquement Stub} @Override public void muouseentered (Mouseevent e) {// Todo Generated Method Stub} @Overrid Public Void MouseExiteCellule Sudoku:
package hlc.shudu.ui; import java.awt.color; import java.awt.font; import javax.swing.jbutton; public class shuducell étend jbutton {public shuducell () {this.setsize (50,50); FONT FONT = NOUVEAU FONT ("", 2,24); this.setfont (font); this.setbackground (nouvelle couleur (255,153,102)); this.setForeground (Color.Blue); }}Boîte de sélection des numéros:
Package hlc.shudu.ui; Importer java.awt.color; import java.awt.window; import java.awt.event.inputevent; import java.awt.event.mouseevent; import java.awt.event.mouseListener; import javax.swing.jbutton; importation javax.wing.jdiaog; javax.swing.jframe; classe publique selectnumFrame étend JDialog implémente MouseListener {private shuducell cell; public void setCell (Shuducell Cell) {this.cell = cell; } public selectnumFrame () {// masquer la barre d'outils sur l'interface this.SetUndeCorated (true); this.setSize (150, 150); this.setbackground (nouvelle couleur (255 204.153, 123)); this.setLayout (null); addnum (); } // Ajouter des nombres 1 ~ 9 private void addnum () {for (int i = 0; i <3; i ++) {for (int j = 0; j <3; j ++) {jbutton btn = new JButton (); BTN.SetSize (50, 50); btn.setLocation (i * 50, j * 50); btn.setText ("" + (j * 3 + i + 1)); BTN.AddMouseListener (this); this.add (btn); }}} @Override public void Mouseclicked (MouseEvent E) {// TODO Méthode générée automatiquement Stub} @Override public void Mousreprim (MouseEvent E) {int modes = e.getModifiers (); if ((modes & inputevent.button1_mask)! = 0) {jbutton btn = (jbutton) e.getsource (); Cell.SeTText (btn.getText ()); } this.dispose (); } @Override public void MouseLelentes (Mouseevent e) {// TODO Méthode générée automatiquement Stub} @Override public void Mouseentered (Mouseevent E) {// Todo Auto-Generated Method Stub} @Override Public Void Mouseentered (MouseEevent E) {// TODO Methodated Method Stub} @override VOID MouseExited (Mouseevent E) {// TODO Méthode générée automatiquement Stub}}Le package complet peut être téléchargé sur github: https://github.com/houlongchao/shudu.git
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.