Swingの鉱山掃除体験はあなたの参照のためです。特定のコンテンツは次のとおりです
最近、Swing:Minesweepingを勉強した後、小さなゲームを作りました
1。予備設計
2。実装
実際、このゲームを完了するコアは、配列の操作にあります。以下の主なコードはmain.javaです:
最初にパッケージ; java.awt.color;インポートjava.awt.dimension; Import java.awt.font; import java.awt.gridlayout; Import java.awt.image; Import java.awt.toolkit; Import java.awt.datatransfer.clipbode; java.awt.event.actionlistener; Import java.awt.event.mousevent; Import java.awt.event.mouselistener; Import java.io.BufferedReader; Import Java.io.BufferedWriter; Import java.io.ioexception; Import.Intuptrerreaf. java.net.serversocket; Import java.net.socket; import java.sql.drivermanager; import java.sql.sqlexception; import java.util.hashset; import java.util.set; Import java.util.uuid; Import javax.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing.swing javax.swing.jframe; Import javax.swing.jlabel; import javax.swing.jmenu; Import javax.swing.jmenubar; Import javax.swing.jmenuitem; Import javax.swing.joptionpane; com.mysql.jdbc.statement; public class main extends jframe explention actionlistener、mouselistener { / *** yijian* / private static final long serialversionuid = 1l; //初期パラメーター宣言Toolkit Toolkit = toolkit.getDefaultToolkit(); //デフォルトのツールキットを取得します。クリップボードクリップボード= toolkit.getSystemClipboard(); //システムのインスタンスをネイティブプラットフォームが提供するクリップボードツールのインターフェイスとして取得します。 // 2つのアイコンImageIcon Icon = new ImageIcon( "g://eclipse-workspace//classtest_thundergame//mine.png"); ImageIcon Icon1 = new ImageIcon( "g://eclipse-workspace//classtest_thundergame//flag.png"); Private static int num = 1; //このnumは雷番号です。//private static final int snum = 9; //このsnumは鉱山のタイル数です。 private int [] [] []マップ; boolean [] []フラグ; boolean [] []フラグ; int couttime; //接続オブジェクト接続を宣言します。 //ドライバー名文字列driver = "com.mysql.jdbc.driver"; // url:データベース名を指して、文字列url = "jdbc:mysql:// localhost:3306/testsql3"; // mysql構成ユーザー文字列ユーザー= "root"; //パスワード文字列パスワード= "huang"; Public Main(Int Snum、Int Mines){// Main Interface Constructor Settitle( "Mine-Sweeping"); // Thunder num = Minesの初期数; jmenubar greenbar = new jmenubar(); //メニューコンテナgreenbar.setopaque(true); Greenbar.setbackground(新しい色(250、250、250)); greenbar.setPreferredSize(新しい次元(800、28)); greenbar.setfont(new font(font.dialog_input、font.italic、16)); //メニューjmenu filemenu1 = new jmenu( "game"); jmenu filemenu2 = new jmenu( "難易度"); jmenu filemenu3 = new jmenu( "help:"); greenbar.add(filemenu1); greenbar.add(filemenu2); greenbar.add(jmishowinfo = filemenu3); filemenu1.setfont(new Font(font.dialog_input、font.italic、16)); filemenu2.setfont(new Font(font.dialog_input、font.italic、16)); filemenu3.setfont(new font(font.dialog_input、font.italic、16)); //メニュー項目filemenu1.add(jminew = new jmenuitem( "new Game")); filemenu1.add(jmisave = new jmenuitem( "ランキングバージョン")); filemenu1.add(jmiziding = new jmenuitem( "custom")); filemenu1.addseparator(); filemenu1.add(jmiexit = new jmenuitem( "exit")); filemenu2.add(jmichuji = new jmenuitem( "Junior")); filemenu2.add(jmizhongji = new jmenuitem( "中間")); filemenu2.add(jmigaoji = new jmenuitem( "advanced")); filemenu3.add(jmishowinfo = new jmenuitem( "開発者情報")); jminew.addactionlistener(this); jmiexit.AddActionListener(this); jmisave.addactionlistener(this); jmisave.addactionlistener(this); jmishowinfo.addactionlistener(this); jmichuji.addactionlistener(this); jmizhongji.addactionlistener(this); jmigaoji.addActionListener(this); jmiziding.addactionlistener(this); jmiziding.setfont(new font(font.dialog_input、font.italic、16)); jmishowinfo.setfont(new font(font.dialog_input、font.italic、16)); jminew.setfont(new Font(font.dialog_input、font.italic、16)); jmisave.setfont(new font(font.dialog_input、font.italic、16)); jmiexit.setfont(new font(font.dialog_input、font.italic、16)); jmichuji.setfont(new font(font.dialog_input、font.italic、16)); jmizhongji.setfont(new font(font.dialog_input、font.italic、16)); jmizhongji.setfont(new font(font.dialog_input、font.italic、16)); jmigaoji.setfont(new font(font.dialog_input、font.italic、16)); setjmenubar(greenbar);画像アイコン= toolkit.getDefaultToolkit()。getImage( "g://eclipse-workspace//classtest_thundergame//mine.png"); seticonimage(アイコン); setLayout(new gridlayout(snum、snum)); jb = new jbutton [snum] [snum]; map = new int [snum] [snum]; //ボタンを配列フラグにマップ= new boolean [map.length] [map [0] .length]; //レコードテーブルフラグを保存= new boolean [map.length] [map [0] .length]; //レコードテーブルを保存int count = 0; // bleigh while(count <num){int i =(int)(math.random() * map.length); // hang int j =(int)(math.random() * map [0] .length); // lie if(map [i] [j]!= ' *'){map [i] [j] = ' *'; count ++; }} for(int i = 0; i <snum; i ++){for(int j = 0; j <snum; j ++){jb [i] [j] = new jbutton(); jb [i] [j] .setname(i + "_" + j); jb [i] [j] .setbackground(new Color(220、220、220)); jb [i] [j] .setfont(new font(font.dialog_input、font.italic、10)); jb [i] [j] .addactionlistener(this); jb [i] [j] .addmouseListener(this); //マウスリスナーを追加する(jb [i] [j]); }} //タイマーJlabel ststus = new Jlabel(); jlabel times = new Jlabel(); jlabel miao = new Jlabel(); add(ststus);追加(時間); Times.settext( "0"); miao.settext( "秒"); Settimer(Times); couttime = 0; ststus.settext( "time:"); greenbar.add(ststus); greenbar.add(times、right_alignment); greenbar.add(miao、right_alignment); Times.setFont(new Font(font.dialog_input、font.italic、16)); ststus.setfont(new font(font.dialog_input、font.italic、16)); miao.setfont(new font(font.dialog_input、font.italic、16)); SetSize(700、700); setLocationRelativeto(null); setVisible(true); // setDefaultCloseoperation(jframe.exit_on_close); setDefaultCloseoperation(dispose_on_close); //このラインを追加} private void sittimer(jlabel time){//時間を聞くfinal jlabel vartime = time; Timer Timeaction = new Timer(1000、new ActionListener(){public void actionperformed(actionEvent e){couttime ++; vartime.settext( "+couttime);}}); timeaction.start(); } private void showtheclick(int x、int y){//イベント実装をクリックするif(map [x] [y] == '*'){jb [x] [y] .seticon(icon); showmines(); } else {int count1 = 0; for(int a = x -1; a <= x+1; a ++){for(int b = y -1; b <= y+1; b ++){if(!(a <0 || b <0 || b> = map [0] .length || a> = map.length)&& length) }} flags [x] [y] = true; if(count1 == 0){jb [x] [y] .setbackground(color.white); } else {jb [x] [y] .settext(count1 + ""); jb [x] [y] .setfont(new font(font.dialog_input、font.italic、20)); jb [x] [y] .setbackground(color.white); } if(count1 == 0){for(int i = x -1; i <= x+1; i ++){for(int j = y -1; j <= y+1; j ++){if(!(i <0 || J <0 || i> = map.length || j> = map [0]){if(!(i = x = of]){ == false){showtheclick(i、j); // loop traversal} else {//繰り返しアクセスを防止}}}}}}}}}}}}}}}}}} show all thunders <map.length; j ++){if(map [i] == '*'){jb [i] [j] .seticon(icon); //}}} //ゲームを終了します。 if(b == 1){system.exit(0); } else {setVisible(false);新しいメイン(map.length、num); }} @Override public void ActionPerformed(actionEvent e){//イベントリスニング処理// todo auto-feenatedメソッドスタブif(e.getSource()== jminew){setVisible(false);新しいメイン(map.length、num); } else if(e.getSource()== jmisave){showrange(); } else if(e.getSource()== jmiexit){system.exit(0); } else if(e.getSource()== jMiziding){new selfmines(); } else if(e.getSource()== jmichuji){setVisible(false);新しいメイン(5,3); } else if(e.getSource()== jmishowinfo){new myInfo(); } else if(e.getSource()== jmizhongji){setVisible(false);新しいメイン(10,10); } else if(e.getSource()== jmigaoji){setVisible(false);新しいメイン(20,60); } else {object obj = e.getSource(); int x、y; string [] strm =((jbutton)obj).getname()。split( "_"); x = integer.parseint(strm [0]); y = integer.parseint(strm [1]); showtheclick(x、y); checksuccess(); //ゲームが終了しているかどうかを確認}} private void showrange(){// show new shiyan13(map.length); } private void checkksuccess(){//ゲームが超えているかどうかを決定しますfor(int i = 0; i <map.length; i ++){for(int j = 0; j <map [0] .length; j ++){if(flags [i] [j] == true)count--; }} if(count == num){string uuid = uuid.randomuuid()。toString()。fallingeall( " - "、 ""); con =(connection)drivermanager.getConnection(url、user、password);文字列sql; if(!con.isclosed()){// ta.settext( ""); System.out.println( "データベースの接続に正常に"); // Object Statement Statement =(Statement)Con.CreateStatement(); // if(map.length == 10){// // sqlステートメントが実行されるsql = "middlerange(userid、usertime)valuesに挿入(/" " + uuid +"/"、" + couttime + ");"; Statement.ExeCuteUpDate(SQL); con.close(); } else if(map.length == 5){sql = "rang(userid、usertime)values(/" " + uuid +"/"、" + couttime + ");"; Statement.ExeCuteUpDate(SQL); con.close(); } else if(map.length == 20){sql = "toprange(userid、usertime)values(/" " + uuid +"/"、" + couttime + ");"; Statement.ExeCuteUpDate(SQL); con.close(); } else {}} catch(classNotFoundException e){// Database Driver Class Exception Handling System.out.println( "error"); e.printstacktrace(); } catch(sqlexception e){// system.out.println(e); system.err.println( "Data Not Found"); // int i = joptionpane.showconfirmdialog(null、 "入力したsqlステートメントは間違っています"、// "not not"、joptionpane.yes_no_option); } catch(Exception e){e.printstacktrace(); }最後に{system.out.println( "データベースはデータを正常に取得します!"); } int i = joptionpane.showoptiondialog(null、「テストに合格してくれておめでとうございます、続行しますか?」、「box」、joptionpane.yes_no_option、joptionpane.question_message、null、null、null); // ststus.settext( "hello"+i); if(i == 1){system.exit(0); } else {setVisible(false);新しいメイン(map.length、num); }}} @Override public void mouseClicked(mouseEvent e){// todo auto-enerated method stub int c = e.getButton(); if(c == mouseevent.button3){object obj1 = e.getSource(); int x、y; string [] strm =((jbutton)obj1).getname()。split( "_"); x = integer.parseint(strm [0]); y = integer.parseint(strm [1]); if(flag [x] [y] == false && flags [x] [y] == false){// flag jb [x] [y] .seticon(icon1); flag [x] [y] = true; } else {jb [x] [y] .seticon(null); flag [x] [y] = false; }}} @Override public void mousepressed(mouseEvent e){// todo auto-fide method stub} @override public void mouseEntered(MouseEvent e){// todo auto-generated method stub} @Override public void mouseExited(Mousevent exite3.効果を実現します
4.メイン関数の実装
(1)基本的な鉱山掃除機能(ランダム鉱山燃焼、旗の挿入)
(2)難易度を選択できます(3)鉱山の数とグリッドの数をカスタマイズできます(4)設定時間(5)ランキング関数を追加します(時間に応じてデータベースに保存)
(6)exeファイル(JREを使用)にパッケージ化することは、複数のプラットフォームで実行できます。 (exe4jを使用してJARパッケージをパッケージ化します)
ソースコードが必要な場合は、メールを残すことができます!これはソースコードです:マインスイープゲーム
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。