Este artigo compartilha o código específico da versão Java da implementação da interface de jogo sudoku para sua referência. O conteúdo específico é o seguinte
Renderizações de implementação:
Escreva uma descrição da imagem aqui
A função principal é usada para iniciar o programa:
pacote hlc.shudu.app; importar hlc.shudu.src.shuduhelper; importar hlc.shudu.ui.shudumainframe; classe pública appstart {public static void main (string [] args) {shudumAinframe mainframe = novo shudumAinframe (); mainframe.setVisible (true); }}Classe de formulário principal (incluindo área de mensagem, área de tempo, área de jogo):
pacote hlc.shudu.ui; importar java.awt.borderlayout; importar java.awt.color; importar java.awt.font; importar java.awt.gridlayout; importação java.awt.event.eaction; java.text.simpledateFormat; importar javax.swing.icon; importar javax.swing.imageicon; importar javax.swing.jbutton; importar javax.swing.jframe; importação javax.swing.jlabel; javax.swing.border.titledborder;/** Sudoku Formulário principal*/classe pública shudumainframe estende jframe {public static int pass = 1; // nivelado jlabel lbpass público público; // exibe o público estático lável do nível Longo UsadoTime = 0; // Jogador usa painéis de Shuducanvers privados; // Área principal da área de jogo Public Static Timer UsertimeAction; /** Construtor padrão*/ public ShudumAinFrame () {// Método de inicialização init (); // Adicionar componente addComponent (); // Adicione a área de jogo principal addCanvers (); } /** Adicione área de jogo principal* / private void addCanvers () {painCanvers = new Shuducanvers (); painelCanvers.Setborder (novo TitledBorder ("Area Game")); // Adicione a área de jogo principal ao formulário. } /** Adicione área de componente* / private void addComponent () {jpanel painelComponent = new jpanel (); // Adicione a área de mensagem addPanelmsg (painelComponent); // Adicione a área de tempo addPaNEltime (painelComponent); // Adicione o componente à parte superior do formulário. } private void addPaNEltime (JPanel PainelComponent) {jpanel PANELTIME = new JPanel (); PANELTIME.SETBORDER (NOVO TTITLEDBORDER ("TIME")); PANELTIME.SETLAYOUT (New GridLayout (2, 1)); final Jlabel lbsystime = new Jlabel (); final Jlabel LbUSERTime = new Jlabel (); panEltime.add (lbsystime, borderlayout.north); PANELTIME.Add (LbUsertime, BorderLayout.South); // Defina o tempo do tempo do tempo do sistema SystimeAction = New Timer (500, new ActionListener () {@Override public void ActionPerformed (ActionEvent E) {Long timemillis = System.CurrentTimEmillis (); simledEformat df = new SimpledAformat ("YyyyyyMImim (); + df.format (timemillis)); systimeAction.start (); usertimeAction = novo temporizador (1000, new ActionListener () {@Override public void ActionPerformed (ActionEvent E) {lbusertime.settext ("Você usou:"+ (++ usouTime)+ "Sec.");}}); usertimeAction.start (); painelComponent.Add (PANELTIME, BorderLayout.East); } /** Adicione área de mensagem* / private void addPanelmsg (JPanel PanelComponent) {// PanelComponent.SetBorder (novo TitledBorder ("Mensagem Area")); painelComponent.SetLayout (New GridLayout (1, 3)); Font font14 = nova fonte ("", 4, 14); Font font28 = nova fonte ("", 2, 28); JPanel Painelmsg = new JPanel (); painelmsg.setBorder (novo TitledBorder ("Mensagem Area")); Jlabel lbpass1 = new jlabel ("nível:"); lbPass1.setFont (Font14); painelmsg.add (LBPass1); // exibe o número de níveis lbpass = new jlabel ("" + passa); lbpass.setforeground (color.red); lbpass.setFont (Font28); painelmsg.add (LBPass); Jlabel lbpass2 = new Jlabel ("Off/10 níveis no total"); lbpass2.setFont (font14); painelmsg.add (LBPass2); painelComponent.add (painmsg, borderlayout.center); }/** Inicialização da interface*/private void init () {imageicon image = new imageicon ("icon/icon.png"); this.SeticOnImage (image.getImage ()); // Defina o tamanho da janela inicial este.SetSize (515, 600); // Defina a posição inicial da janela isto.setLocation (500, 50); // defina o título da janela this.settitle ("jogo sukua (por: hou longchao)"); // Defina o formulário para não alterar o tamanho. // Defina a operação de fechamento padrão this.setDefaultCloseoperation (jframe.exit_on_close); }}Tela da área de jogo:
pacote hlc.shudu.ui; importar hlc.shudu.src.shuduhelper; importar java.awt.borderlayout; importar java.awt.color; import java.awt.dialog.modalexlustype; import java.awt.eVent.InPtevent. java.awt.event.mouselistener; importar javax.swing.jdialog; importar javax.swing.JOptionPane; importar javax.swing.jpanel; import javax.swing.border.border; import javax.swing.border.titledborder; public class; shuducanvers; células; // Obtenha a matriz sudoku int [] [] maps = new int [9] [9]; Private SelectNumFrame SelectNum; /** Construtor padrão*/ public Shuducanvers () {shudumainframe.usedTime = 0; mapas = shuduhelper.getMap (); // carrega a área sudoku isto.setLayout (null); células = novo Shuducell [9] [9]; for (int i = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {// this.remove (células [i] [j]); // cria células de células [i] [j] = new Shuducell (); // Definir células de posição [i] [j] .SETLocation (20 + i * 50 + (i / 3) * 5, 20 + j * 50 + (j / 3) * 5); if (passrole (shudumainframe.pass)) {células [i] [j] .settext ("" + maps [i] [j]); // Definir células coloridas de fundo [i] [j] .setbackground (getColor (mapas [i] [j])); células [i] [j] .setEnabled (false); células [i] [j] .setforeground (color.gray); } else {células [i] [j] .addmouselistener (this); } this.add (células [i] [j]); }} checkfinish (); // ReloadCanvers (); } /** Verifique se está preenchido* / private void checkfinish () {for (int i = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {if (! Check (i, j)) {return; }}} // pare o timer do usuário shudumainframe.usertimeAction.stop (); // limpe todos os ouvintes de células clearallListener (); // Adicione um ao número de passagem shudumAinframe.pass += 1; if (shudumainframe.pass> 10) {int o = joptionpane .showconfirmdialog (isto, "você passou no nível, você começou?", "", 0); if (o == 1) {System.exit (0); } else {shudumainframe.pass = 1; }} else {JoptionPane.ShowMessagedialog (isto, "Parabéns por passar esse nível! } // Atualize o prompt de nível shudumainframe.lbpass.settext ("" + shudumainframe.pass); // inicia um novo nível ReloadCanvers (); // Abra o timer do usuário shudumainframe.usertimeAction.start (); } / * * Verifique a célula nas coordenadas especificadas * / verificação booleana privada (int i, int j) {if (células [i] [j] .getText (). IsEmpty ()) {return false; } para (int k = 0; k <9; k ++) {if (células [i] [j] .getText (). igual a (células [i] [k] .getText (). TRIM ()) && i! = k) {return false; } if (células [i] [j] .getText (). TRIM (). igual a (células [k] [j] .getText (). TRIM ()) && i! = k) {return false; } int ii = (i / 3) * 3 + k / 3; int jj = (j / 3) * 3 + k % 3; if (células [i] [j] .getText (). TRIM (). igual a (células [ii] [jj] .getText (). TRIM ()) &&! (i == ii && j == jj)) {return false; }} retornar true; } /** RELAAD SUDOKU ÁREA* / public void RELOADCANVS () {shudumainframe.usedTime = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {this.remove (células [i] [j]); // cria células de células [i] [j] = new Shuducell (); // Definir células de posição [i] [j] .SETLocation (20 + i * 50 + (i / 3) * 5, 20 + j * 50 + (j / 3) * 5); if (passrole (shudumainframe.pass)) {células [i] [j] .settext ("" + maps [i] [j]); // Definir células coloridas de fundo [i] [j] .setbackground (getColor (mapas [i] [j])); células [i] [j] .setEnabled (false); células [i] [j] .setforeground (color.gray); } else {células [i] [j] .addmouselistener (this); } this.add (células [i] [j]); }} this.Repaint (); checkfinish (); } / * * Gere aleatoriamente se o número é exibido nesta posição * / Passrole booleano privado (int pass) {// TODO Método Auto-Gerado Stub Return Math.Random () * 11> Pass; } /** Obtenha cores com base no número* / color privado getColor (int i) {color color = color.pink; switch (i) {case 1: cor = nova cor (255, 255, 204); quebrar; Caso 2: cor = nova cor (204, 255, 255); quebrar; Caso 3: cor = nova cor (255, 204, 204); quebrar; Caso 4: cor = nova cor (255, 204, 153); quebrar; Caso 5: cor = nova cor (204, 255, 153); quebrar; Caso 6: cor = nova cor (204, 204, 204); quebrar; Caso 7: cor = nova cor (255, 204, 204); quebrar; Caso 8: cor = nova cor (255, 255, 255); quebrar; Caso 9: cor = nova cor (153, 255, 153); quebrar; Padrão: quebra; } retornar a cor; } @Override public void mouseclicked (mouseevent e) {// TODO Método Auto-Gerado Stub} @Override public void MousePressed (mouseevent e) {int modos = e.getModifiers (); if ((modos & inputevent.Button3_Mask)! = 0) {// Right Click // limpe o conteúdo na célula de clique ((shuducell) e.getSource ()). setText (""); } else if ((modos & inputevent.button1_mask)! = 0) {// esquerda-click // Se a janela Número selecionado existir, destrua se (selectNum! = null) {selectNum.Dispose (); } // Crie uma nova janela de seleção selectNum = new SelectNumFrame (); // defina para a janela modal selectNum.SetModal (true); // Defina a posição da janela de seleção no monitor SelectNum.SetLocation (e.getLocationOnscreen (). X, e.getLocationOnscreen (). Y); // Passe a célula clicada para a janela de seleção de números SelectNum.SetCell ((Shuducell) e.getSource ()); // Exibir a janela de seleção de números SelectNum.SetVisible (true); } checkfinish (); } / * * Limpe todas as células Clique em ouvir * / private void clearallListener () {for (int i = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {células [i] [j] .RemoVemouseListener (this); } } } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub }}Célula sudoku:
pacote hlc.shudu.ui; importar java.awt.color; importar java.awt.font; importar javax.swing.jbutton; classe pública Shuducell estende jbutton {public shuducell () {this.setsize (50,50); Fonte da fonte = nova fonte ("", 2,24); this.setFont (font); this.setbackground (nova cor (255.153.102)); this.setforeground (color.blue); }}Caixa de seleção de números:
pacote hlc.shudu.ui; importar java.awt.color; importar java.awt.window; importar java.awt.event.inputevent; importar java.awt.event.mousevent; import.memal; javax.swing.jframe; public class SelectNumframe estende o jdialog implementa MouseListener {private Shuducell Cell; public void setCell (célula Shuducell) {this.cell = Cell; } public SelectNumFrame () {// Ocultar a barra de ferramentas na interface this.setUndecorated (true); this.SetSize (150, 150); this.setbackground (nova cor (255.204.153, 123)); this.setLayout (nulo); addNum (); } // Adicione 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 (isto); this.add (btn); }}} @Override public void mouseclicked (mouseevent e) {// TODO Método Auto-Generado Stub} @Override public void MousePressed (mouseevent e) {int modos = e.getModifiers (); if ((modos & inputevent.button1_mask)! = 0) {jbutton btn = (jbutton) e.getSource (); Cell.Settext (btn.getText ()); } this.dispose (); } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseexited (mouseevent e) {// TODO Method Stub}}} stub}O pacote completo pode ser baixado no github: https://github.com/houlongchao/shudu.git
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.