이 기사에서는 참조를 위해 Java 버전의 Sudoku Game Interface 구현의 특정 코드를 공유합니다. 특정 내용은 다음과 같습니다
구현 렌더링 :
여기에 그림 설명을 작성하십시오
주요 기능은 프로그램을 시작하는 데 사용됩니다.
패키지 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); }}주요 양식 클래스 (메시지 영역, 시간 영역, 게임 영역 포함) :
패키지 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.event.actionlistener; import java.sql.time; 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; javax.swing.jtext javax.swing.border.titredborder;/** Sudoku Main Form*/public class shudumainframe 확장 jframe {public static int pass = 1; // 레벨 퍼블릭 정적 jlabel lbpass; // 레벨의 lable public static long usedtime = 0을 표시합니다. // 플레이어는 개인 shuducanvers PanelCanvers를 사용합니다. // 메인 게임 영역 공개 정적 타이머 USERTIMEACTION; /** 기본 생성자*/ public shudumainframe () {// 초기화 메소드 init (); // 구성 요소 추가 addComponent (); // 메인 게임 영역 추가 addCanvers (); } /** 메인 게임 영역 추가* / private void addCanvers () {PanelCanvers = new shuducanvers (); PANILCANVERS.SETBORDER (새로운 제목의 보더 ( "게임 영역")); // 메인 게임 영역을 님이 addd (PanelCanvers, BorderLayout.Center) 형식에 추가합니다. } /** 구성 요소 추가* / private void addComponent () {jpanel pantecomponent = new jpanel (); // 메시지 영역 추가 AddPanelmsg (PanelComponent); // 시간 영역 추가 addPaneltime (PanelComponent); // 양식의 상단에 구성 요소를 추가하십시오. } private void addPaneltime (jpanel panelcomponent) {jpanel paneltime = new jpanel (); Paneltime.setborder (새로운 제목의 보더 ( "Time")); Paneltime.setLayout (New GridLayout (2, 1)); 최종 Jlabel lbsystime = New Jlabel (); 최종 Jlabel lbusertime = New Jlabel (); paneltime.add (lbsystime, borderlayout.north); Paneltime.add (Lbusertime, Borderlayout.south); // 시스템 시간 타이머 타이머 Systimeaction = New Timer (500, New ActionListener () {@Override public void ActionPerformed (ActionEvent e) {long timemillis = system.currenttimeMillis (); simpledateformat df = new simpledateformat ( "yyyyy-mm-dd hH : mm : ssets" " + df.format (timemillis));}}); systimeaction.start (); UserTimeAction = new Timer (1000, New ActionListener () {@override public void ActionPerformed (ActionEvent e) {lbusertime.settext ( "+ (++ usedtime)+"sec. ");}}); usertimeaction.start (); PanelComponent.add (Paneltime, BorderLayout.East); } /** 메시지 영역 추가* / private void addPanelmsg (jpanel panelcomponent) {// panelcomponent.setborder (새로운 제목의 보더 ( "메시지 영역")); PanelComponent.setLayout (New GridLayout (1, 3)); font font14 = 새로운 글꼴 ( "", 4, 14); font font28 = 새로운 글꼴 ( "", 2, 28); JPANEL PANELMSG = 새로운 jpanel (); PANELMSG.SETBORDER (New 제목의 보더 ( "메시지 영역")); jlabel lbpass1 = new Jlabel ( "레벨 :"); lbpass1.setfont (font14); PANILMSG.ADD (lbpass1); // 레벨 수를 표시합니다 lbpass = new Jlabel ( "" + pass); lbpass.setforeground (color.red); lbpass.setfont (Font28); PANILMSG.ADD (lbpass); Jlabel lbpass2 = New Jlabel ( "총 10 레벨"); lbpass2.setfont (font14); PANILMSG.ADD (lbpass2); PanelComponent.Add (PANELMSG, BORTHLAYOUT.CENTER); }/** 인터페이스 초기화*/private void init () {imageicon image = new ImageIcon ( "icon/icon.png"); this.seticonimage (image.getImage ()); // 초기 창 크기를 설정 this.Setsize (515, 600); // 창의 초기 위치를 설정 this.setLocation (500, 50); // 윈도우 제목을 설정 this.settitle ( "Sukua Game (by : hou longchao)"); // 크기를 변경하지 않도록 양식을 설정하십시오. // 기본 닫기 작업을 설정 this.setDefaultCloseOperation (jframe.exit_on_close); }}게임 영역 캔버스 :
패키지 hlc.shudu.ui; import hlc.shudu.src.src.shuduhelper; import java.awt.borderlayout; import java.awt.color; import java.awt.dialog.modalexclusiontype; import java.awt.event.inputevent; java java.awt.event.mouselistener; import javax.swing.jdialog; import javax.swing.joptionpane; import javax.swing.jpanel; import javax.swing.border.border; import javax.swing.border.titledborder; public class shuducanvers extends jpanel empless mouseelist {]. 세포; // Sudoku 배열 int [] [] maps = new int [9] [9]를 가져옵니다. Private SelectNumFrame SelectNum; /** 기본 생성자*/ public shuducanvers () {shudumainframe.usedtime = 0; 맵 = shuduhelper.getMap (); // 스도쿠 영역을로드 this.setLayout (null); 세포 = 새로운 shuducell [9] [9]; for (int i = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {// this.remove (셀 [i] [j]); // 셀 세포 생성 [i] [J] = New Shuducell (); // 위치 셀 설정 [i] [J] .SetLocation (20 + i * 50 + (I / 3) * 5, 20 + J * 50 + (J / 3) * 5); if (passrole (shudumainframe.pass)) {셀 [i] [j] .settext ( "" + 맵 [i] [j]); // 배경 색상 셀 설정 [i] [J] .setbackground (getColor (지도 [i] [j])); 셀 [i] [J] .SetEnabled (false); 세포 [I] [J] .Setforeground (Color.Gray); } else {셀 [i] [j] .addmouselistener (this); } this.add (셀 [i] [j]); }} CheckFinish (); // ReloadCanvers (); } /** 완료되었는지 확인* / private void CheckFinish () {for (int i = 0; i <9; i ++) {for (int j = 0; j <9; j ++) {if (! check (i, j)) {return; }}} // 사용자 타이머 중지 shudumainframe.usertimeaction.stop (); // 모든 셀 리스너를 지우십시오. clearAllListener (); // 패스 번호 Shudumainframe.Pass += 1에 하나를 추가합니다. if (shudumainframe.pass> 10) {int o = joptionpane .showconfirmdialog (이것은 "레벨을 통과했는데, 다시 시작 했습니까?", ", 0); if (o == 1) {System.Exit (0); } else {shudumainframe.pass = 1; }} else {joptionpane.showmessagedialog (이것은 "이 레벨을 전달하는 것을 축하합니다! 시간을 보냈습니다 :" + shudumainframe.usedtime + "seconds/n이 곧 다음 레벨로 들어갑니다!"); } // 레벨 프롬프트 Shudumainframe.lbpass.settext ( "" + shudumainframe.pass); // 새 레벨 시작 repoadCanvers (); // 사용자 타이머를 엽니 다. shudumainframe.usertimeacution.start (); } / * * 지정된 좌표에서 셀을 점검하십시오 * / private boolean check (int i, int j) {if (셀 [i] [j] .getText (). isempty ()) {return false; } for (int k = 0; k <9; k ++) {if (셀 [i] [j] .getText (). Equals (셀 [i] [k] .getText (). trim ()) && i! = k) {return false; } if (셀 [i] [j] .getText (). trim (). Equals (셀 [k] [j] .getText (). trim ()) && i! = k) {return false; } int II = (I / 3) * 3 + k / 3; int jj = (j / 3) * 3 + k % 3; if (셀 [i] [j] .getText (). trim (). equals (셀 [ii] [jj] .getText (). trim ()) &&! (i == ii && j == jj) {return false; }} true를 반환합니다. } /** Reload Sudoku Area* / public void ReloadCanvers () {shudumainframe.usedtime = 0; I <9; i ++) {for (int j = 0; j <9; j ++) {this.remove (셀 [i] [j]); // 셀 세포 생성 [i] [J] = New Shuducell (); // 위치 셀 설정 [i] [J] .SetLocation (20 + i * 50 + (I / 3) * 5, 20 + J * 50 + (J / 3) * 5); if (passrole (shudumainframe.pass)) {셀 [i] [j] .settext ( "" + 맵 [i] [j]); // 배경 색상 셀 설정 [i] [J] .setbackground (getColor (지도 [i] [j])); 셀 [i] [J] .SetEnabled (false); 세포 [I] [J] .Setforeground (Color.Gray); } else {셀 [i] [j] .addmouselistener (this); } this.add (셀 [i] [j]); }} this.repaint (); CheckFinish (); } / * * 숫자 가이 위치에 표시되는지 무작위로 생성 * / 개인 부울 패스 role (int pass) {// todo 자동 생성 메소드 스터브 return math.random () * 11> pass; } /** 번호* / 개인 색상 getColor (int i) {color color = color.pink; 스위치 (i) {사례 1 : 색상 = 새로운 색상 (255, 255, 204); 부서지다; 사례 2 : 색상 = 새로운 색상 (204, 255, 255); 부서지다; 사례 3 : 색상 = 새로운 색상 (255, 204, 204); 부서지다; 사례 4 : 색상 = 새로운 색상 (255, 204, 153); 부서지다; 사례 5 : 색상 = 새로운 색상 (204, 255, 153); 부서지다; 사례 6 : 색상 = 새로운 색상 (204, 204, 204); 부서지다; 사례 7 : 색상 = 새로운 색상 (255, 204, 204); 부서지다; 사례 8 : 색상 = 새로운 색상 (255, 255, 255); 부서지다; 사례 9 : 색상 = 새로운 색상 (153, 255, 153); 부서지다; 기본값 : 브레이크; } 반환 색상; } @override public void mouseclicked (mouseevent e) {// todo 자동 생성 메소드 스터브} @override public void mousepressed (mouseevent e) {int modes = e.getModifiers (); if ((modes & inputevent.button3_mask)! = 0) {// 오른쪽 버튼을 클릭 // 클릭 셀에서 내용을 지우십시오 ((shuducell) e.getSource ()). setText ( ""); } else if ((모드 & inputevent.button1_mask)! = 0) {// 왼쪽 클릭 // 선택한 숫자 창이 존재하면 (selectNum! = null) {selectNum.dispose (); } // 새 선택 창을 만듭니다. selectNum = new SelectNumframe (); // modal 창으로 설정 selectNum.setModal (true); // 모니터에서 선택 창의 위치를 selectNum.setLocation (e.getLocationOnscreen (). x, e.getLocationOnscreen (). y); // 클릭 된 셀을 숫자 선택 창으로 전달합니다. selectNum.setCell ((shuducell) e.getSource ()); // 숫자 선택 창을 표시합니다. selectNum.setVisible (true); } CheckFinish (); } / * * 모든 셀을 클릭하십시오. }}} @override public void mouserEleled (mouseevent e) {// todo 자동 생성 메소드 스터브} @override public void mouseentered (mouseevent e) {// todo 자동 생성 메소드 stub} @override public void mouseexited (mouseevent e) {// to auto-genderated methode스도쿠 셀 :
패키지 hlc.shudu.ui; import java.awt.color; import java.awt.font; import javax.swing.jbutton; public class shuducell 확장 jbutton {public shuducell () {this.setsize (50,50); 글꼴 글꼴 = 새로운 글꼴 ( "", 2,24); this.setfont (font); this.setbackground (새로운 색상 (255,153,102)); this.setforeground (color.blue); }}번호 선택 상자 :
패키지 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.swing.swing javax.swing.jframe; public class selectNumframe 확장 jdialog emplesments mouselistener {private shuducell cell; public void setcell (shuducell cell) {this.cell = cell; } public selectNumFrame () {// 인터페이스에서 도구 모음을 숨 깁니다. this.setsize (150, 150); this.setbackground (새로운 색상 (255,204,153, 123)); this.setLayout (null); addnum (); } // 숫자 추가 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 자동 생성 메소드 stub} @override public void mousepressed (mouseevent e) {int modes = e.getModifiers (); if ((모드 & inputevent.button1_mask)! = 0) {jbutton btn = (jbutton) e.getSource (); cell.settext (btn.gettext ()); } this.dispose (); } @override public void mouserEleled (mouseevent e) {// todo 자동 생성 메소드 스터브} @override public void mouseentered (mouseevent e) {// todo 자동 생성 메소드 스터브} @Override public void mouseEntered (mouseevent e) {// to auto-generated method stub} mouseexited (mouseevent e) {// todo 자동 생성 메소드 스텁}}전체 패키지는 github : https://github.com/houlongchao/shudu.git에서 다운로드 할 수 있습니다
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.