この記事では、参照用のSudokuゲームインターフェイスの実装のJavaバージョンの特定のコードを共有しています。特定のコンテンツは次のとおりです
実装レンダリング:
ここに写真の説明を書いてください
主な関数は、プログラムの開始に使用されます。
パッケージhlc.shudu.app;インポート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;インポートjava.awt.color; Import java.awt.font; Import java.awt.gridlayout; Import java.awt.awt.event.actionevent; Import Java.awt.Event.Event.Event. java.text.simpledateformat; Import javax.swing.icon; Import javax.swing.imageicon; Import javax.swing.jbutton; Import javax.swing.jframe; Import javax.swing.jlabel; javax.swing.jpanel; Import javax.swing.swing.swing.javax.javax.swing.javax.javax.javax.javax.javax.javax.javax.javax.javax.javax.javax.javax. javax.swing.border.titledborder;/** sudoku main form*/public class shudumainframe拡張jframe {public static int pass = 1; // public static jlabel lbpassのレベル; //レベルのlableのpublic static long usedtime = 0を表示します。 //プレーヤーはプライベートシュドゥカンバーズパネルカンバルを使用します。 //メインゲームエリアPublic Static Timer Usertimeaction; /** default constructor*/ public shudumainframe(){//初期化メソッドinit(); // component addComponent();を追加します。 //メインゲーム領域を追加するaddcanvers(); } /**メインゲームエリアを追加* / private void addcanvers(){panelcanvers = new Shuducanvers(); panelcanvers.setborder(new Titledborder( "ゲームエリア")); //メインゲーム領域をthis.add(panelcanvers、borderlayout.center)に追加します。 } /**コンポーネント領域の追加* / private void addComponent(){jPanel PanelComponent = new JPanel(); //メッセージ領域を追加するaddpanelmsg(panelComponent); //タイムエリアを追加するAddPanelTime(PanelComponent); // form this.add(panercomponent、borderlayout.north)の上部にコンポーネントを追加します。 } private void addpaneltime(jPanel PanelComponent){jPanel Panelime = new JPanel(); panelime.setborder(new Titledborder( "Time")); panelime.setLayout(new gridlayout(2、1)); final jlabel lbsystime = new jlabel(); final jlabel lbusertime = new jlabel(); panelime.add(lbsystime、borderlayout.north); panelime.add(lbusertime、borderlayout.south); //システムタイムタイムタイマーsystimeaction = new Timer(500、new ActionListener(){@Override public void actionperformed(actionEvent e){long timemillis = system.currenttimemillis(); simpledateformat df = new simpledateformat( "時間: " + 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(Panelime、borderlayout.east); } /**メッセージ領域を追加* / private void addpanelmsg(jpanel panelcomponent){// panelcomponent.setborder(new Titledborder( "message area")); panelComponent.setLayout(new gridlayout(1、3)); font font14 = new font( ""、4、14); font font28 = new Font( ""、2、28); jpanel panelmsg = new JPanel(); panelmsg.setborder(new Titledborder( "メッセージ領域")); jlabel lbpass1 = new Jlabel( "level:"); lbpass1.setfont(font14); panelmsg.add(lbpass1); //レベル数lbpass = new Jlabel( "" + pass); lbpass.setforeground(color.red); lbpass.setfont(font28); panelmsg.add(lbpass); jlabel lbpass2 = new Jlabel( "OFF/10レベルで合計"); lbpass2.setfont(font14); panelmsg.add(lbpass2); PanelComponent.Add(PanelMSG、borderlayout.center); }/**インターフェイス初期化*/private void init(){ImageIcon image = new ImageIcon( "Icon/Icon.png"); this.seticOnimage(image.getImage()); //初期ウィンドウサイズを設定しますthis.setsize(515、600); //ウィンドウの初期位置を設定します。 //ウィンドウタイトルthis.settitle( "sukua game(by:hou longchao)"); //フォームを設定してサイズを変更しないように設定します。 //デフォルトの閉鎖操作を設定しますthis.setDefaultCloseOperation(jframe.exit_on_close); }}ゲームエリアキャンバス:
パッケージhlc.shudu.ui; Import hlc.shudu.src.shuduhelper; Import java.awt.borderlayout; import java.awt.color; Import java.awt.dialog.modalexclusiontype; java.awt.event.mouselistener; Import javax.swing.jdialog; Import javax.swing.joptionpane; Import javax.swing.jpanel; Import javax.swing.border.border; import javax.swing.swing.border.titledborder; Shuducell [] []細胞; // sudoku array int [] [] maps = new int [9] [9]を取得します。 private selectnumframe selectnum; /** default constructor*/ public shuducanvers(){shudumainframe.usedtime = 0;マップ= shuduhelper.getMap(); // sudoku領域をロードするthis.setlayout(null); Cells = new Shuducell [9] [9]; for(int i = 0; i <9; i ++){for(int j = 0; j <9; j ++){// this.remove(cells [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)){cells [i] [j] .settext( "" + maps [i] [j]); //背景色のセル[i] [j] .setbackground(getColor(Maps [i] [j]));セル[i] [j] .setEnabled(false);セル[i] [j] .setforeground(color.gray); } else {cells [i] [j] .addmouseListener(this); } this.add(cells [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(); //パス番号に1つを追加します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 +"秒/nはすぐに次のレベルに入ります! "); } //レベルの更新shudumainframe.lbpass.settext( "" + shudumainframe.pass); //新しいレベルのreloadcanvers()を起動します。 //ユーザータイマーShudumainframe.usertimeaction.start()を開きます。 } / * *指定された座標でセルをチェックします * / private boolean check(int i、int j){if(cells [i] [j] .getText()。isempty()){return false; } for(int k = 0; k <9; k ++){if(cells [i] [j] .getText()。 } if(cells [i] [j] .getText()。trim()。equals(cells [k] [j] .getText()。trim())&& i!= k){return false; } int II =(i / 3) * 3 + k / 3; int jj =(j / 3) * 3 + k%3; if(cells [i] [j] .getText()。trim()。equals(cells [ii] [jj] .getText()。trim())&&!(i == ii && j == jj){return false; }} trueを返します。 } /** sudokuエリアをリロードする* / public void reloadcanvers(){shudumainframe.usedtime = 0; I <9; i ++){for(int j = 0; j <9; j ++){this.remove(cells [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)){cells [i] [j] .settext( "" + maps [i] [j]); //背景色のセル[i] [j] .setbackground(getColor(Maps [i] [j]));セル[i] [j] .setEnabled(false);セル[i] [j] .setforeground(color.gray); } else {cells [i] [j] .addmouseListener(this); } this.add(cells [i] [j]); }} this.repaint(); checkfinish(); } / * *この位置に数値が表示されているかどうかをランダムに生成 * / private boolean passrole(int pass){// todo auto-fenated method stub return math.random() * 11> pass; } /**数字に基づいて色を取得* /プライベートカラーgetColor(int i){color color = color.pink; switch(i){case 1:color = new Color(255、255、204);壊す;ケース2:color = new Color(204、255、255);壊す;ケース3:color = new Color(255、204、204);壊す;ケース4:color = new Color(255、204、153);壊す;ケース5:color = new Color(204、255、153);壊す;ケース6:color = new Color(204、204、204);壊す;ケース7:color = new Color(255、204、204);壊す;ケース8:color = new Color(255、255、255);壊す;ケース9:color = new Color(153、255、153);壊す;デフォルト:break; }色を返します。 } @Override public void mouseclicked(mousevent e){// todo auto-enerated method stub} @override public void mousepressed(mousevent e){int modes = e.getModifiers(); if((modes&inputevent.button3_mask)!= 0){//右クリック//クリックセルのコンテンツをクリア((shuducell)e.getSource())。setext( ""); } else if((modes&inputevent.button1_mask)!= 0){//左クリック//選択した番号ウィンドウが存在する場合、if(selectnum!= null){selectnum.dispose(); } //新しい選択ウィンドウを作成selectnum = new selectnumframe(); //モーダルウィンドウに設定SelectNum.setModal(true); // [モニター] selectnum.setlocation(e.getLocationOnscreen()。x、e.getlocationonscreen()。y); //クリックされたセルを番号選択ウィンドウに渡しましたselectnum.setcell((shuducell)e.getSource()); //番号選択ウィンドウを表示selectnum.setVisible(true); } checkfinish(); } / * *すべてのセルのクリア 'クリックリスニング * / private void clearalllistener(){for(int i = 0; i <9; i ++){for(int j = 0; j <9; j ++){cells [i] [j] .removemouseListener(this); }}} @Override public void mouseReleased(mouseEvent e){// todo auto-fide method stub} @override public void mouseEntered(// todo auto-generated method stub} @override public void mouseexited(mousevent exited)Sudoku Cell:
パッケージhlc.shudu.ui; import java.awt.color; import java.awt.font; import javax.swing.jbutton; public class shuducell extends jbutton {public shuducell(){this.setsize(50,50); font font = new Font( ""、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.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.wing.javax. javax.swing.jframe; public class selectnumframe拡張jdialog実装muselistener {private shuducell cell; public void setcell(shuducell cell){this.cell = cell; } public selectnumframe(){//インターフェイス上のツールバーを非表示this.setundecorated(true); this.setsize(150、150); this.setbackground(新しい色(255,204,153、123)); this.setlayout(null); addnum(); } //番号1〜9プライベート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 auto-enerated method stub} @override public void mousepressed(mousevent 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 mouseReleased(MouseEvent e){// todo auto-fide method stub} @override public void mouseentered(MouseEvent e){// todo auto-enerated method stub} MouseExited(MouseEvent E){// TODO自動生成方法スタブ}}完全なパッケージは、github:https://github.com/houlongchao/shudu.gitにダウンロードできます
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。