Java編寫的掃雷小程序_第1頁
Java編寫的掃雷小程序_第2頁
Java編寫的掃雷小程序_第3頁
Java編寫的掃雷小程序_第4頁
Java編寫的掃雷小程序_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、整個(gè)程序使用了4個(gè)類:Game 用于啟動(dòng)程序, 界面的布置,各種行列的算法。ExtendButton 繼承了Jbutton 用于新建button的各種屬性ShowNum 監(jiān)聽到某個(gè)button后,計(jì)算出此button周圍有幾個(gè)雷,不同的雷對應(yīng)不通的圖片,類得到button上應(yīng)加載的圖片地址ViewReSet 此類用于新建一個(gè)窗口,用戶輸入自己想要的行、列、雷數(shù),然后用新的行列雷數(shù)new一個(gè)新的Gamebiaose dise1 dise2 dise3dise4 dise5 dise6 dise7dise8 dise lei biaoji/* 運(yùn)行類 創(chuàng)建游戲主窗體 */package com.d

2、hl.saolei;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java

3、.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JT

4、oolBar;import javax.swing.KeyStroke;import javax.swing.Timer;public class Game extends JFrame implements ActionListenerprivate Container myContainer;private GridLayout myLayout;private JPanel myPanelMain;private JPanel myPanel;private JToolBar myTool;private JLabel time;private JLabel labelTime;priv

5、ate JLabel bombNum;private JLabel labelBombNum;private JMenuBar menuBar;private JMenu menuE, menuH;private JMenuItem menuItemCZ, menuItemSZ;private int numBomb, countTime, leaveBomb, numEnd;private int myRows, myColumns;private int xis, yis;private Timer timer;private ExtendButton myButton = null;/初

6、始化窗體private void InitView() /菜單初始化this.menuBar = new JMenuBar();this.menuE = new JMenu("菜單(E)");this.menuH = new JMenu("幫助(H)");this.menuItemCZ = new JMenuItem("重置");this.menuItemCZ.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK);this.menuItem

7、CZ.addActionListener(this);this.menuE.add(this.menuItemCZ);this.menuItemSZ = new JMenuItem("設(shè)置");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);t

8、his.menuBar.add(this.menuH);setJMenuBar(this.menuBar);/時(shí)間信息初始化this.myTool = new JToolBar();this.myTool.setLayout(new GridLayout(1, 4);this.myTool.setFloatable(false);BorderLayout borderLayout = new BorderLayout();this.myPanelMain = new JPanel(borderLayout);this.labelTime = new JLabel("時(shí)間:"

9、);this.time = new JLabel();this.time.setForeground(Color.RED);this.time.setFont(new Font("font", Font.PLAIN, 20);this.labelBombNum = new JLabel("雷數(shù):");this.bombNum = new JLabel();this.bombNum.setText(String.valueOf(this.numBomb);this.bombNum.setForeground(Color.RED);this.bombNum.

10、setFont(new Font("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() BorderLayout borderLayout = new B

11、orderLayout();this.leaveBomb = this.numBomb;this.numEnd = (this.myRows * this.myColumns) - this.leaveBomb;this.myContainer = this.getContentPane();this.myLayout = new GridLayout(this.myRows, this.myColumns, 1, 1);this.myPanel = new JPanel();this.myPanel.setVisible(true);this.myPanel.setLayout(myLayo

12、ut);this.myPanelMain.add(this.myPanel, borderLayout.CENTER);this.myContainer.add(this.myPanelMain);this.myButton = new ExtendButton(this.myRows * this.myColumns);for (int i = 0; i < (this.myRows * this.myColumns); i+) this.myButtoni = new ExtendButton();this.myButtoni.SetPostion(i);this.myButtoni

13、.setIcon(new ShowNum(10).getImageIcon();this.myButtoni.setButton_num(0);this.myButtoni.SetVisited(false);this.myButtoni.SetStatus(false);/設(shè)置右鍵監(jiān)聽標(biāo)記雷this.myButtoni.addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent evt) if (evt.getModifiers() = InputEvent.BUTTON3_MASK) int n = (Ex

14、tendButton)evt.getSource().getButton_num();if(n = 1) if(!(ExtendButton)evt.getSource().GetVisited() (ExtendButton)evt.getSource().setButton_num(0);(ExtendButton)evt.getSource().setIcon(new ShowNum(10).getImageIcon();leaveBomb+;bombNum.setText(String.valueOf(leaveBomb); else if(!(ExtendButton)evt.get

15、Source().GetVisited() (ExtendButton)evt.getSource().setButton_num(1);(ExtendButton)evt.getSource().setIcon(new ShowNum(11).getImageIcon();leaveBomb-;bombNum.setText(String.valueOf(leaveBomb););this.myPanel.add(this.myButtoni);this.myButtoni.addActionListener(this);System.gc();this.SetBomb(this.numBo

16、mb);show();/時(shí)鐘設(shè)置int delay = 1000;/創(chuàng)建一個(gè)監(jiān)聽事件ActionListener drawClock = new ActionListener()public void actionPerformed(ActionEvent evt)countTime+;time.setText(String.valueOf(countTime);repaint();/創(chuàng)建一個(gè)時(shí)間計(jì)數(shù)器,每一秒觸發(fā)一次this.timer = new Timer(delay,drawClock); this.timer.start();/重新初始化方法private void SetExten

17、dButton() for (int i = 0; i < (this.myRows * this.myColumns); i+) this.myButtoni.SetVisited(false);this.myButtoni.SetStatus(false);this.myButtoni.setText(null);this.myButtoni.setIcon(new ShowNum(10).getImageIcon();this.SetBomb(numBomb);this.countTime = 0;this.timer.start();this.leaveBomb = numBom

18、b;this.bombNum.setText(String.valueOf(this.numBomb);this.numEnd = (this.myRows * this.myColumns) - leaveBomb;/布雷方法private void SetBomb(int count) int counter = 0;int tempint;while(counter != count) tempint = (int) (Math.random()*(this.myRows * this.myColumns);if(!this.myButtontempint.GetStatus() thi

19、s.myButtontempint.SetStatus(true);counter+;/顯示雷得方法private void ShowBomb() for(int i = 0; i < (this.myRows * this.myColumns); i+) if(this.myButtoni.GetStatus() this.myButtoni.setIcon(new ShowNum(9).getImageIcon();/監(jiān)聽點(diǎn)擊掃雷方法private void CheckButton(ExtendButton TempButton) if(TempButton.GetStatus()

20、this.timer.stop();JOptionPane.showMessageDialog(null, "You Failed!", "Game",JOptionPane.INFORMATION_MESSAGE);this.ShowBomb();int i = JOptionPane.showConfirmDialog(null, "是否要繼續(xù)?", "消息", JOptionPane.YES_NO_OPTION);if(JOptionPane.YES_OPTION = i) SetExtendButton()

21、; else this.dispose();return;int CircleNum = new int8;int temp = 0;if(!TempButton.GetVisited() CircleNum0 = TempButton.GetPostion() - this.myColumns - 1;CircleNum0 = (CircleNum0 < 0 | (CircleNum0 + 1) % this.myColumns = 0) ? -1 : CircleNum0;CircleNum1 = TempButton.GetPostion() - this.myColumns;Ci

22、rcleNum1 = (CircleNum1 < 0) ? -1 : CircleNum1;CircleNum2 = TempButton.GetPostion() - this.myColumns + 1;CircleNum2 = (CircleNum2 < 0 |CircleNum2 % this.myColumns = 0) ? -1 : CircleNum2;CircleNum3 = TempButton.GetPostion() - 1;CircleNum3 = (CircleNum3 + 1) % this.myColumns = 0) ? -1 : CircleNum

23、3;CircleNum4 = TempButton.GetPostion() + 1;CircleNum4 = (CircleNum4 % this.myColumns = 0) ? -1 : CircleNum4;CircleNum5 = TempButton.GetPostion() + this.myColumns -1;CircleNum5 = (CircleNum5 > (this.myRows * this.myColumns - 1) | (CircleNum5 + 1) % this.myColumns = 0) ? -1 : CircleNum5;CircleNum6

24、= TempButton.GetPostion() + this.myColumns;CircleNum6 = (CircleNum6 > (this.myRows * this.myColumns - 1) ? -1 : CircleNum6;CircleNum7 = TempButton.GetPostion() + this.myColumns +1;CircleNum7 = (CircleNum7 > (this.myRows * this.myColumns - 1) | CircleNum7 % this.myColumns = 0) ? -1 : CircleNum7

25、;for (int i = 0; i < 8; i+) if(CircleNumi != -1) if(myButtonCircleNumi.GetStatus() && !myButtonCircleNumi.GetVisited() temp+;/顯示button圖片過程if(temp > 0) TempButton.SetVisited(true);TempButton.setIcon(new ShowNum(temp).getImageIcon();temp = 0; else if(temp = 0) TempButton.SetVisited(true)

26、;TempButton.setIcon(new ShowNum(0).getImageIcon();for (int i = 0; i < 8; i+) if(CircleNumi != -1 && !myButtonCircleNumi.GetVisited() CheckButton(myButtonCircleNumi);this.numEnd-;if(this.numEnd = 0) this.timer.stop();JOptionPane.showMessageDialog(this, "恭喜你!", "消息", JOp

27、tionPane.INFORMATION_MESSAGE);ShowBomb(); /構(gòu)造方法public Game() Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();int x = (int) (dimension.getWidth() - 400) / 2);int y = (int) (dimension.getHeight() - 500) / 2);this.xis = 300;this.yis = 400;this.setBounds(x, y, this.xis, this.yis);this.

28、setTitle("掃雷");this.numBomb = 10;this.myRows = 9;this.myColumns = 9;this.InitView();this.InitButton();this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);public Game(int row, int column, int numbomb) Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();int x = (int) (dimension.g

29、etWidth() - 400) / 2);int y = (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();t

30、his.setDefaultCloseOperation(this.EXIT_ON_CLOSE);/監(jiān)聽方法public void actionPerformed(ActionEvent e) /對(this.myRows * this.myColumns)個(gè)button的監(jiān)聽進(jìn)行處理for (int i = 0; i < (this.myRows * this.myColumns); i+) if(e.getSource() = myButtoni) CheckButton(ExtendButton) e.getSource();/重置按鈕監(jiān)聽if(e.getSource() = me

31、nuItemCZ) SetExtendButton();/設(shè)置按鈕進(jìn)行監(jiān)聽 else if(e.getSource() = menuItemSZ) new ViewReSet(this.myRows, this.myColumns, this.numBomb);this.dispose();public static void main(String args) new Game();/* 創(chuàng)建一個(gè)button的實(shí)體類 */package com.dhl.saolei;import javax.swing.JButton;public class ExtendButton extends JB

32、utton private int Button_pos;private int Button_num;private boolean Button_Status;private boolean Button_Visited;public int getButton_num() return Button_num;public void setButton_num(int button_num) this.Button_num = button_num;public int SetPostion(int pos) this.Button_pos = (pos >= 0) ? pos :

33、0;return this.Button_pos;public int GetPostion() return this.Button_pos;public boolean SetStatus(boolean sta) this.Button_Status = sta;return this.Button_Status;public boolean GetStatus() return this.Button_Status;public boolean SetVisited(boolean vis) this.Button_Visited = vis;return this.Button_Vi

34、sited;public boolean GetVisited() return this.Button_Visited;/* 設(shè)置button顯示圖片 */package com.dhl.saolei;import java.awt.Image;import javax.swing.ImageIcon;public class ShowNum private int num;public ShowNum(int n) this.num = n;public ImageIcon getImageIcon() ImageIcon imageIcon;switch (num) case 0:ima

35、geIcon = new ImageIcon("./class/images/dise.jpg");break;case 1:imageIcon = new ImageIcon("./class/images/dise1.jpg");break;case 2:imageIcon = new ImageIcon("./class/images/dise2.jpg");break;case 3:imageIcon = new ImageIcon("./class/images/dise3.jpg");break;cas

36、e 4:imageIcon = new ImageIcon("./class/images/dise4.jpg");break;case 5:imageIcon = new ImageIcon("./class/images/dise5.jpg");break;case 6:imageIcon = new ImageIcon("./class/images/dise6.jpg");break;case 7:imageIcon = new ImageIcon("./class/images/dise7.jpg");b

37、reak;case 8:imageIcon = new ImageIcon("./class/images/dise8.jpg");break;case 9:imageIcon = new ImageIcon("./class/images/lei.jpg");break;case 10:imageIcon = new ImageIcon("./class/images/biaose.jpg");break;case 11:imageIcon = new ImageIcon("./class/images/leibj.jpg

38、");break;default:imageIcon = new ImageIcon("./class/images/dise.jpg");break;return imageIcon;/* 創(chuàng)建一個(gè)新窗口,輸入新的行、列、雷數(shù),然后用新數(shù)據(jù)重新new一個(gè)Game窗口 */package com.dhl.saolei;import java.awt.Container;import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import j

39、ava.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;public class ViewReSet extends JDialog implements A

40、ctionListenerprivate JFrame frame = null;private JPanel myPanel = null;private JLabel myLabel = null;private JLabel myLabelRow = null;private JLabel myLabelColum = null;private JLabel myLabelBombNum = null;private JTextField myFieldRow = null;private JTextField myFieldColum = null;private JTextField

41、 myFieldBombNum = null;private JButton buttonOK = null;private JButton buttonReset = null;private int row;private int column;private int bombNum;private int myrcb = new int 3;private void createView()Container container = this.getContentPane();this.myPanel = new JPanel(new GridBagLayout();container.

42、add(this.myPanel);GridBagConstraints gbc = new GridBagConstraints();gbc.gridx = 1;gbc.gridy = 0;this.myLabel = new JLabel("窗口行列設(shè)置");this.myPanel.add(this.myLabel, gbc);gbc.gridx = 0;gbc.gridy = 1;this.myLabelRow = new JLabel("行數(shù):");this.myPanel.add(this.myLabelRow, gbc);gbc.gridx

43、 = 1;gbc.gridy = 1;this.myFieldRow = new JTextField(10);this.myPanel.add(this.myFieldRow, gbc);gbc.gridx = 0;gbc.gridy = 2;this.myLabelColum = new JLabel("列數(shù):");this.myPanel.add(this.myLabelColum, gbc);gbc.gridx = 1;gbc.gridy = 2;this.myFieldColum = new JTextField(10);this.myPanel.add(this.myFieldColum, gbc);gbc.gridx = 0;gbc.gridy = 3;this.myLabelBombNum = new JLabel("雷數(shù):");this.myPanel.add(this.myLabelBombNum, gbc);gbc.gridx = 1;gbc.gridy = 3;this.myFieldBombNum = new JTextFiel

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論