Este artículo comparte el código específico de la versión Java de la implementación de la interfaz de juego de Sudoku para su referencia. El contenido específico es el siguiente
Renderizaciones de implementación:
Escribe una descripción de una imagen aquí
La función principal se utiliza para iniciar el programa:
paquete 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 (verdadero); }}Clase de formulario principal (incluyendo área de mensaje, área de tiempo, área de juego):
paquete hlc.shudu.ui; import java.awt.borderloyout; import java.awt.color; import java.awt.font; import java.awt.gridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.time; import; importar; import java.text.simpledateFormat; import javax.swing.icon; import javax.swing.imageicon; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; importar; importación; javax.swing.border.titledborder;/** Sudoku Forma principal*/public class shudumainframe extiende jframe {public static int pass = 1; // Nivel Public Static Jlabel LbPass; // Muestra el nivel público lable de nivel Long UsedTime = 0; // El jugador usa los paneles de paneles de shuducanvers privados; // Área de juego principal Temporizador estático público Usertimeaction; /** Constructor predeterminado*/ public shuduMainFrame () {// Método de inicialización init (); // Agregar componente addComponent (); // Agregar área de juego principal addCanvers (); } /** Agregar área de juego principal* / private void addCanvers () {panelCanvers = new Shuducanvers (); panelcanvers.setBorder (nuevo tituladoBorder ("Área de juego")); // Agregue el área de juego principal al formulario This.Add (panelcanvers, borderLayout.center); } /** Agregar área de componente* / private void addComponent () {jPanel panelComponent = new JPanel (); // Agregar área de mensaje addPanelmsg (panelComponent); // Agregar área de tiempo addPaneltime (panelcomponent); // Agregar componente a la parte superior del formulario este.Add (panelComponent, borderLayout.north); } private void addPaneltime (JPanel PanelComponent) {JPanel Paneltime = new JPanel (); Paneltime.setBorder (nuevo tituladoBorder ("Tiempo")); paneltime.setLayout (nuevo GridLayout (2, 1)); final jlabel lbsystime = new JLabel (); final jlabel lbuserTime = new JLabel (); Paneltime.add (Lbsystime, BorderLayout.north); Paneltime.add (LbuserTime, BorderLayout.South); // Establecer temporizador de tiempo del sistema Systimeaction = New Timer (500, nuevo ActionListener () {@Override public Void ActionPerformed (ActionEvent E) {Long Timemillis = System.CurrentTimillis (); SimpleDateFormat df = new SimpleDateFormat ("yyyyy-mm-dd hh: mm: ss"); lstSytime. ("Systemat (" Systemat ("Systemy (" Systemy ("Systemy (" Systemy ("Systemystime (" SystemyStime. ("SystemySteMy (" SystemyStime ("SystemyStime (" Systemy ("Systemy (" Systemy ("Systemy (" "); + df.format (Timemillis)); Systimeaction.Start (); usertImeAction = new Timer (1000, nuevo ActionListener () {@Override public void ActionPerformed (ActionEvent E) {lbuserTime.setText ("Has usado:"+ (++ usado tiempo)+ "sec.");}); usertImeaction.Start (); panelComponent.Add (Paneltime, BorderLayout.east); } /** Agregar área de mensaje* / private void addPanelmsg (JPanel PanelComponent) {// panelComponent.SetBorder (nuevo TitledBorder ("Área de mensaje")); panelComponent.setLayout (nuevo GridLayout (1, 3)); Fuente Font14 = nueva fuente ("", 4, 14); Fuente fuente28 = nueva fuente ("", 2, 28); Jpanel panelmsg = new JPanel (); panelmsg.setBorder (nuevo tituladoBorder ("área de mensajes")); Jlabel lbpass1 = new JLabel ("nivel:"); lbpass1.setFont (font14); panelmsg.add (lbpass1); // Muestra el número de niveles lbpass = new JLabel ("" + pase); lbpass.setForeground (color.red); lbpass.setFont (font28); panelmsg.add (lbpass); Jlabel lbpass2 = new JLabel ("Off/10 niveles en total"); lbpass2.setFont (font14); panelmsg.add (lbpass2); panelComponent.Add (panelmsg, borderLayout.center); }/** Inicialización de la interfaz*/private void init () {imageiCon image = new imageiCon ("icon/icon.png"); this.SeticOnImage (image.getImage ()); // establecer el tamaño de la ventana inicial this.setsize (515, 600); // establecer la posición inicial de la ventana this.setLocation (500, 50); // establece el título de la ventana this.settitle ("Juego de Sukua (por: Hou Longchao)"); // Establecer el formulario para no cambiar el tamaño this.setResizable (falso); // Establecer la operación de cierre predeterminada this.setDefaultCloseOperation (jframe.exit_on_close); }}Lienzo del área de juego:
paquete 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.inpute; importar java.awt.event.mouseevent; java.awt.event.mouseListener; import javax.swing.jdialog; import javax.swing.JOptionPane; import javax.swing.jpanel; import javax.swing.border.borderder; import javax.swing.border.titborder; público; público; células; // Obtener la matriz sudoku int [] [] maps = new int [9] [9]; Private SelectNumFrame selectNum; /** Constructor predeterminado*/ public shuducanvers () {shudumainframe.usedtime = 0; maps = shuduhelper.getMap (); // Cargar el área de Sudoku this.setLayout (nulo); células = nuevo Shuducell [9] [9]; para (int i = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {// this.remove (celdas [i] [j]); // crear células celulares [i] [j] = new Shuducell (); // establece celdas de posición [i] [j] .setLocation (20 + i * 50 + (i / 3) * 5, 20 + j * 50 + (j / 3) * 5); if (passrole (shudumainframe.pass)) {celdas [i] [j] .setText ("" + mapas [i] [j]); // establecer celdas de color de fondo [i] [j] .setbackground (getColor (mapas [i] [j])); celdas [i] [j] .setenable (falso); celdas [i] [j] .setforeground (color.gray); } else {celdas [i] [j] .addmouselistener (esto); } this.add (celdas [i] [j]); }} checkFinish (); // reloadCanvers (); } /** Compruebe si está completado* / private void checkfinish () {for (int i = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {if (! Check (i, j)) {return; }}} // detener el temporizador de usuario shudumainframe.usertimeaction.stop (); // Borrar todos los oyentes celulares ClearAllistener (); // Agregue uno al número de pase ShudumainFrame.pass += 1; if (shuduMainFrame.pass> 10) {int o = jOptionPane .showConfirmDialog (esto, "Has pasado el nivel, ¿has comenzado de nuevo?", "", 0); if (o == 1) {System.exit (0); } else {shudumainframe.pass = 1; }} else {joptionPane.ShowMessEdialog (esto, "¡Felicitaciones por aprobar este nivel dedicado a:" + shudumainframe.usedtime + "segundos/n ingresará al siguiente nivel pronto!"); } // Actualizar el nivel induduminframe.lbpass.settext ("" + shudumainframe.pass); // iniciar un nuevo nivel ReloadCanvers (); // Abrir el temporizador de usuario shuduMainFrame.UsertImeaction.Start (); } / * * Verifique la celda en las coordenadas especificadas * / cheque booleano privado (int i, int j) {if (celdas [i] [j] .gettext (). IsEmpty ()) {return false; } para (int k = 0; k <9; k ++) {if (celdas [i] [j] .gettext (). Equals (celdas [i] [k] .gettext (). Trim ()) && i! = K) {return false; } if (celdas [i] [j] .gettext (). Trim (). Equals (celdas [k] [j] .gettext (). trim ()) && i! = k) {return false; } int ii = (i / 3) * 3 + k / 3; int jj = (j / 3) * 3 + k % 3; if (celdas [i] [j] .gettext (). Trim (). Equals (celdas [ii] [jj] .gettext (). trim ()) &&! (i == ii && j == jj)) {return false; }} return verdadero; } /** Recargar el área de sudoku* / public void reloadCanvers () {shudumainframe.usedtime = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {this.remove (celdas [i] [j]); // crear células celulares [i] [j] = new Shuducell (); // establece celdas de posición [i] [j] .setLocation (20 + i * 50 + (i / 3) * 5, 20 + j * 50 + (j / 3) * 5); if (passrole (shudumainframe.pass)) {celdas [i] [j] .setText ("" + mapas [i] [j]); // establecer celdas de color de fondo [i] [j] .setbackground (getColor (mapas [i] [j])); celdas [i] [j] .setenable (falso); celdas [i] [j] .setforeground (color.gray); } else {celdas [i] [j] .addmouselistener (esto); } this.add (celdas [i] [j]); }} this.Repaint (); CheckFinish (); } / * * Genere aleatoriamente si el número se muestra en esta posición * / Passrole booleano privado (int pass) {// toDO método generado automáticamente return Math.random () * 11> pass; } /** Obtener color basado en el número* / privado Color getColor (int i) {color color = color.pink; interruptor (i) {caso 1: color = nuevo color (255, 255, 204); romper; caso 2: color = nuevo color (204, 255, 255); romper; Caso 3: color = nuevo color (255, 204, 204); romper; caso 4: color = nuevo color (255, 204, 153); romper; caso 5: color = nuevo color (204, 255, 153); romper; caso 6: color = nuevo color (204, 204, 204); romper; caso 7: color = nuevo color (255, 204, 204); romper; caso 8: color = nuevo color (255, 255, 255); romper; caso 9: color = nuevo color (153, 255, 153); romper; predeterminado: ruptura; } color de retorno; } @Override public void MouseClicked (MouseEvent E) {// TODO Auto Generado Método Stub} @Override public void MousePressed (MouseEvent E) {int modes = e.getModifiers (); if ((modes & inPutevent.Button3_Mask)! = 0) {// CLICK // Borrar el contenido en la celda Click ((Shuducell) E.GetSource ()). Settext (""); } else if ((modes & inputevent.button1_mask)! = 0) {// Left-click // Si la ventana del número seleccionada existe, destruye if (selectNum! = null) {selectNum.Dispose (); } // Cree una nueva ventana de selección selectNum = new SelectNumFrame (); // Establecer en la ventana modal selectNum.SetModal (true); // Establezca la posición de la ventana de selección en el monitor selectNum.setLocation (E.GetLocationScreen (). X, E.GetLocationScreen (). Y); // pasar la celda haciendo clic a la ventana de selección de números SELECTNUM.SetCell ((Shuducell) E.GetSource ()); // Muestra la ventana de selección de números selectNum.SetVisible (true); } checkFinish (); } / * * Borrar todas las celdas 'Haga clic en escuchar * / private void clearAllistener () {for (int i = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {celdas [i] [j] .removemouseListener (esto); }}} @Override public void MouserElEded (MouseEvent E) {// TODO Método Generado automático STUB} @Override public void MouseEndered (MouseEvent E) {// TODO Método Generado automático} @Override public mouseExited (mouseEvent e) {// ado-auto-autogenerado @verride}}}}}} void mousexitedCélula de Sudoku:
paquete hlc.shudu.ui; import java.awt.color; import java.awt.font; import javax.swing.jbutton; public class Shuducell extiende JButton {public shuducell () {this.setsize (50,50); Fuente de fuente = nueva fuente ("", 2,24); this.setFont (fuente); this.setBackground (nuevo color (255,153,102)); this.setForeground (color.blue); }}Cuadro de selección de números:
paquete hlc.shudu.ui; import 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; import javax.swing.swing.jdialog; import; javax.swing.jframe; clase pública selectNumFrame extiende jdialog implementa mouselistener {celda privada shuducell; public void setcell (shuducell cell) {this.cell = cell; } public selectNumFrame () {// ocultar la barra de herramientas en la interfaz this.setUndeCorated (true); this.setsize (150, 150); this.setBackground (nuevo color (255,204,153, 123)); this.setLayout (nulo); addnum (); } // Agregar números 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 (esto); this.add (btn); }}} @Override public void MouseClicked (MouseEvent E) {// TODO Auto Generated Method Stub} @Override public void Mousepressed (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 MouserElEded (MouseEvent E) {// TODO Método Generado automático} @Override public void MouseEndered (MouseEvent E) {// TODO Método automático de método automático} @Override public MouseExited (MouseEvent E) {// TODO Auto Generado Método Stub}}El paquete completo se puede descargar en GitHub: https://github.com/houlongchao/shudu.git
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.