




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
整 個 程 序 使 用 了 4 個 類 :Game用于啟動程序,界面的布置,各種行列的算法。ExtendButton繼承了Jbutton用于新建button的各種屬性ShowNum監聽到某個button后,計算出此button周圍有幾個雷,不同的雷對應不通的圖片,類得到button上應加載的圖片地址ViewReSet 此類用于新建一個窗口,用戶輸入自己想要的行、列、雷數,然后用新的行列雷數new一個新的Gamebiaose dise1 dise2 dise3dise4 dise5 dise6 dise7dise8 dise lei biaoji/****************************************************************運行類 創建游戲主窗體*/package importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Container;importjava.awt.Dimension;importjava.awt.Font;importjava.awt.GridLayout;importjava.awt.Toolkit;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.InputEvent;importjava.awt.event.KeyEvent;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JToolBar;importjavax.swing.KeyStroke;importjavax.swing.Timer;publicclassGameextendsJFrameimplementsActionListener{privateContainermyContainer;privateGridLayoutmyLayout;privateJPanelmyPanelMain;privateJPanelmyPanel;privateJToolBarmyTool;privateJLabeltime;privateJLabellabelTime;privateJLabelbombNum;privateJLabellabelBombNum;privateJMenuBarmenuBar;privateJMenumenuE,menuH;privateJMenuItemmenuItemCZ,menuItemSZ;privateintnumBomb,countTime,leaveBomb,numEnd;privateintmyRows,myColumns;privateintxis,yis;private Timer timer ;private ExtendButton[] myButton = null ;初始化窗體privatevoidInitView(){//菜單初始化this.menuBar=newJMenuBar();this.menuE=newJMenu("菜單(E)");this.menuH=newJMenu("幫助(H)");this.menuItemCZ=newJMenuItem("重置");this.menuItemCZ.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));this.menuItemCZ.addActionListener(this);this.menuE.add(this.menuItemCZ);this.menuItemSZ=newJMenuItem("設置");this.menuItemCZ.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));this.menuItemSZ.addActionListener(this);this.menuE.add(this.menuItemSZ);this.menuBar.add(this.menuE);this.menuBar.add(this.menuH);setJMenuBar(this.menuBar);時間信息初始化this.myTool=newJToolBar();this.myTool.setLayout(newGridLayout(1,4));this.myTool.setFloatable(false);BorderLayoutborderLayout=newBorderLayout();this.myPanelMain=newJPanel(borderLayout);this.labelTime=newJLabel("時間:");this.time=newJLabel();this.time.setForeground(Color.RED);this.time.setFont(newFont("font",Font.PLAIN,20));this.labelBombNum=newJLabel("雷數:");this.bombNum=newJLabel();this.bombNum.setText(String.valueOf(this.numBomb));this.bombNum.setForeground(Color.RED);this.bombNum.setFont(newFont("font",Font.PLAIN,20));this.myTool.add(this.labelTime);this.myTool.add(this.time);this.myTool.add(this.labelBombNum);this.myTool.add(this.bombNum);this.myPanelMain.add(this.myTool,borderLayout.NORTH);}初始化myButtonprivate void InitButton(){BorderLayoutborderLayout=newBorderLayout();this.leaveBomb=this.numBomb;this.numEnd=(this.myRows*this.myColumns)-this.leaveBomb;this.myContainer=this.getContentPane();this.myLayout=newGridLayout(this.myRows,this.myColumns,1,1);this.myPanel=newJPanel();this.myPanel.setVisible(true);this.myPanel.setLayout(myLayout);this.myPanelMain.add(this.myPanel,borderLayout.CENTER);this.myContainer.add(this.myPanelMain);this.myButton=newExtendButton[(this.myRows*this.myColumns)];for(inti=0;i<(this.myRows*this.myColumns);i++){this.myButton[i]=newExtendButton();this.myButton[i].SetPostion(i);this.myButton[i].setIcon((newShowNum(10)).getImageIcon());this.myButton[i].setButton_num(0);this.myButton[i].SetVisited(false);this.myButton[i].SetStatus(false);//設置右鍵監聽標記雷this.myButton[i].addMouseListener(newMouseAdapter(){publicvoidmouseClicked(MouseEventevt){{if((evt.getModifiers()==InputEvent.BUTTON3_MASK))intn=((ExtendButton)evt.getSource()).getButton_num();if (n==1){if (!((ExtendButton)evt.getSource()).GetVisited()){((ExtendButton)evt.getSource()).setButton_num(0);((ExtendButton)evt.getSource()).setIcon((newShowNum(10)).getImageIcon());leaveBomb ++;bombNum.setText(String. valueOf (leaveBomb ));}} else {if (!((ExtendButton)evt.getSource()).GetVisited()){((ExtendButton)evt.getSource()).setButton_num(1);((ExtendButton)evt.getSource()).setIcon((newShowNum(11)).getImageIcon());leaveBomb --;bombNum.setText(String. valueOf (leaveBomb ));}}}});}this.myPanel.add(this.myButton[i]);this.myButton[i].addActionListener(this);}System. gc();this .SetBomb( this .numBomb);show();時鐘設置int delay=1000;創建一個監聽事件ActionListenerdrawClock= newActionListener(){public void actionPerformed(ActionEventevt){countTime ++;time .setText(String. valueOf (countTime ));repaint();}};創建一個時間計數器,每一秒觸發一次this .timer = newTimer(delay,drawClock);this .timer .start();}重新初始化方法privatevoidSetExtendButton(){for(inti=0;i<(this.myRows*this.myColumns);i++){this.myButton[i].SetVisited(false);this.myButton[i].SetStatus(false);this.myButton[i].setText(null);this.myButton[i].setIcon((newShowNum(10)).getImageIcon());}this.SetBomb(numBomb);this.countTime=0;this.timer.start();this.leaveBomb=numBomb;this.bombNum.setText(String.valueOf(this.numBomb));this.numEnd=(this.myRows*this.myColumns)-leaveBomb;}// 布雷方法this
private void SetBomb( int count){int counter=0;int tempint;while (counter!=count){tempint=( int )(Math. random.myColumns ));
()*(
this
.myRows*if
(!
this .myButton
[tempint].GetStatus()){this .myButton
[tempint].SetStatus(
true
);counter++;}}}顯示雷得方法private void ShowBomb(){for (int i=0;i<(
this .myRows*
this
.myColumns
);i++){if (this .myButton
[i].GetStatus()){this .myButton
[i].setIcon((
newShowNum(9)).getImageIcon());}}}監聽點擊掃雷方法privatevoidCheckButton(ExtendButtonTempButton){if(TempButton.GetStatus()){this.timer.stop();JOptionPane.showMessageDialog(null,"YouFailed!","Game",JOptionPane.INFORMATION_MESSAGE);this.ShowBomb();inti=JOptionPane.showConfirmDialog(null,"是否要繼續?","消息",JOptionPane.YES_NO_OPTION);if(JOptionPane.YES_OPTION==i){SetExtendButton();}else{this.dispose();}}return;int []CircleNum= new int [8];int temp=0;if (!TempButton.GetVisited()){CircleNum[0]=TempButton.GetPostion()-this.myColumns-1;CircleNum[0]=(CircleNum[0]<0||(CircleNum[0]+1)%this.myColumns==0)?-1:CircleNum[0];CircleNum[1]=TempButton.GetPostion()-this.myColumns;CircleNum[1]=(CircleNum[1]<0)?-1:CircleNum[1];CircleNum[2]=TempButton.GetPostion()-this.myColumns+1;CircleNum[2]=(CircleNum[2]<0||CircleNum[2]%this.myColumns==0)?-1:CircleNum[2];CircleNum[3]=TempButton.GetPostion()-1;CircleNum[3]=((CircleNum[3]+1)%this.myColumns==0)?-1:CircleNum[3];CircleNum[4]=TempButton.GetPostion()+1;CircleNum[4]=(CircleNum[4]%this.myColumns==0)?-1:CircleNum[4];CircleNum[5]=TempButton.GetPostion()+this.myColumns-1;CircleNum[5]=(CircleNum[5]>(this.myRows*this.myColumns-1)||(CircleNum[5]+1)%this.myColumns==0)?-1:CircleNum[5];CircleNum[6]=TempButton.GetPostion()+this.myColumns;CircleNum[6]=(CircleNum[6]>(this.myRows*this.myColumns-1))?-1:CircleNum[6];CircleNum[7]=TempButton.GetPostion()+this.myColumns+1;CircleNum[7]=(CircleNum[7]>(this.myRows*this.myColumns-1)||CircleNum[7]%this.myColumns==0)?-1:CircleNum[7];for(inti=0;i<8;i++){if(CircleNum[i]!=-1){if(myButton[CircleNum[i]].GetStatus()&&!myButton[CircleNum[i]].GetVisited()){}temp++;}}//顯示button圖片過程if(temp>0){TempButton.SetVisited(true);TempButton.setIcon((newShowNum(temp)).getImageIcon());temp=0;}elseif(temp==0){TempButton.SetVisited(true);TempButton.setIcon((newShowNum(0)).getImageIcon());for(inti=0;i<8;i++){if(CircleNum[i]!=-1&&!myButton[CircleNum[i]].GetVisited()){CheckButton(myButton[CircleNum[i]]);}}}this.numEnd--;if(this.numEnd==0){this.timer.stop();JOptionPane.showMessageDialog(this,"恭喜你!","消息",JOptionPane.INFORMATION_MESSAGE);}ShowBomb();}}構造方法publicGame(){Dimensiondimension=Toolkit.getDefaultToolkit().getScreenSize();intx=(int)((dimension.getWidth()-400)/2);inty=(int)((dimension.getHeight()-500)/2);this.xis=300;this.yis=400;this.setBounds(x,y,this.xis,this.yis);this.setTitle("掃雷");this.numBomb=10;this.myRows=9;this.myColumns=9;this.InitView();this.InitButton();}this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);publicGame(introw,intcolumn,intnumbomb){Dimensiondimension=Toolkit.getDefaultToolkit().getScreenSize();intx=(int)((dimension.getWidth()-400)/2);inty=(int)((dimension.getHeight()-500)/2);this.xis=310*column/9;this.yis=300*row/9+100;this.setBounds(x,y,this.xis,this.yis);this.setTitle("掃雷");this.myRows=row;this.myColumns=column;this.numBomb=numbomb;this.InitView();this.InitButton();}this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);監聽方法publicvoidactionPerformed(ActionEvente){//對(this.myRows*this.myColumns)個button的監聽進行處理for(inti=0;i<(this.myRows*this.myColumns);i++){if(e.getSource()==myButton[i]){}CheckButton((ExtendButton)e.getSource());}重置按鈕監聽if
(e.getSource()==
menuItemCZ
){SetExtendButton();// 設置按鈕進行監聽} elseif(e.getSource()==newViewReSet(this
menuItemSZ ){.myRows, this .myColumns
,
this
.numBomb);this .dispose();}}public static void main(String[]args){newGame();}}/***********************************************************創建一個button 的實體類*/package import publicclassExtendButtonextendsJButton{privateintButton_pos;privateintButton_num;privatebooleanButton_Status;privatebooleanButton_Visited;publicintgetButton_num(){returnButton_num;}publicvoidsetButton_num(intbutton_num){this.Button_num=button_num;}publicintSetPostion(intpos){this.Button_pos=(pos>=0)?pos:0;returnthis.Button_pos;}publicintGetPostion(){returnthis.Button_pos;}publicbooleanSetStatus(booleansta){this.Button_Status=sta;returnthis.Button_Status;}publicbooleanGetStatus(){returnthis.Button_Status;}publicbooleanSetVisited(booleanvis){this.Button_Visited=vis;returnthis.Button_Visited;}publicbooleanGetVisited(){returnthis.Button_Visited;}}/*******************************************************************設置button 顯示圖片*/package import import publicclassShowNum{privateintnum;publicShowNum(intn){}this.num=n;publicImageIcongetImageIcon(){ImageIconimageIcon;switch(num){case0:imageIcon=newImageIcon("./class/images/dise.jpg");break;case1:imageIcon=newImageIcon("./class/images/dise1.jpg");break;case2:imageIcon=newImageIcon("./class/images/dise2.jpg");break;case3:imageIcon=newImageIcon("./class/images/dise3.jpg");break;case4:imageIcon=newImageIcon("./class/images/dise4.jpg");break;case5:imageIcon=newImageIcon("./class/images/dise5.jpg");break;case6:imageIcon=newImageIcon("./class/images/dise6.jpg");break;case7:imageIcon=newImageIcon("./class/images/dise7.jpg");break;case8:imageIcon=newImageIcon("./class/images/dise8.jpg");break;case9:imageIcon=newImageIcon("./class/images/lei.jpg");break;case10:imageIcon=newImageIcon("./class/images/biaose.jpg");break;case11:imageIcon=newImageIcon("./class/images/leibj.jpg");break;default:imageIcon=newImageIcon("./class/images/dise.jpg");break;}returnimageIcon;}}/********************************************************************創建一個新窗口,輸入新的行、列、雷數,然后用新數據重新 new一個Game窗口*/packagecom.dhl.saolei;importjava.awt.Container;importjava.awt.Dimension;importjava.awt.GridBagConstraints;importjava.awt.GridBagLayout;importjava.awt.Toolkit;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JDialog;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JTextField;publicclassViewReSetextendsJDialogimplementsActionListener{privateJFrameframe=null;privateJPanelmyPanel=null;privateJLabelmyLabel=null;privateJLabelmyLabelRow=null;privateJLabelmyLabelColum=null;privateJLabelmyLabelBombNum=null;privateJTextFieldmyFieldRow=null;privateJTextFieldmyFieldColum=null;privateJTextFieldmyFieldBombNum=null;privateJButtonbuttonOK=null;privateJButtonbuttonReset=null;privateintrow;privateintcolumn;privateintbombNum;privateint[]myrcb=newint[3];privatevoidcreateView(){Containercontainer=this.getContentPane();this.myPanel=newJPanel(newGridBagLayout());container.add(this.myPanel);GridBagConstraintsgbc=newGridBagConstraints();gbc.gridx=1;gbc.gridy=0;this.myLabel=newJLabel("窗口行列設置");this.myPanel.add(this.myLabel,gbc);gbc.gridx=0;gbc.gridy=1;this.myLabelRow=newJLabel("行數:");this.myPanel.add(this.myLabelRow,gbc);gbc.gridx=1;gbc.gridy=1;this.myFieldRow=newJTextField(10);this.myPanel.add(this.myFieldRow,gbc);gbc.gridx=0;gbc.gridy=2;this.myLabelColum=newJLabel("列數:");this.myPanel.add(this.myLabelColum,gbc);gbc.gridx=1;gbc.gridy=2;this.myFieldColum=newJTextField(10);this.myPanel.add(this.myFieldColum,gbc);gbc.gridx=0;gbc.gridy=3;this.myLabelBombNum=newJLabel("雷數:");this.myPanel.add(this.myLabelBombNum,gbc);gbc.gridx=1;gbc.gridy=3;this.myFieldBombNum=newJTextField(10);this.myPanel.add(t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年CFA考試行業監管分析試題及答案
- 站內公共服務設施優化考核試卷
- 關注市場變化的證券從業資格證試題及答案
- 烘焙食品企業生產設備升級考核試卷
- 玻璃保溫容器市場營銷渠道拓展考核試卷
- 電池制造與戶外廣告屏考核試卷
- 銀行從業資格證的復習建議試題及答案
- 出租資產招商方案范本
- 微生物樣本管理中的生態道德審視試題及答案
- 2024年項目管理考試知識點提煉試題及答案
- 除濕防潮施工方案
- 基于PLC的自動化立體倉庫控制系統設計
- 《囊螢夜讀.》教學設計及教學反思
- 2023下半年教師資格《初中道德與法治學科知識與教學能力》押題卷2
- 壓力容器年度自查表
- 危險化學品安全管理與安全技術培訓課件
- 小學數學-《圖形的拼組》教學課件設計
- 2023年學位英語考試真題
- 中國兵工學會團體標準立項論證投票單
- 四川省項目建設工作咨詢以下收費標準
- 眼屈光檢查 屈光參差的屈光狀態分析
評論
0/150
提交評論