1、Java编写的扫雷小程序doc整个程序使用了4个类:Game 用于启动程序, 界面的布置,各种行列的算法。ExtendButton 继承了Jbutton 用于新建button的各种属性ShowNum 监听到某个button后,计算出此button周围有几个雷,不同的雷对应不通的图片,类得到button上应加载的图片地址ViewReSet 此类用于新建一个窗口,用户输入自己想要的行、列、雷数,然后用新的行列雷数new一个新的Gamebiaose dise1 dise2 dise3dise4 dise5 dise6 dise7dise8 dise lei biaoji/* 运行类 创建游戏主窗体
2、*/package com.dhl.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.InputEv
3、ent;import java.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
4、 javax.swing.JToolBar;import javax.swing.KeyStroke;import javax.swing.Timer;public class Game extends JFrame implements ActionListener private Container myContainer; private GridLayout myLayout; private JPanel myPanelMain; private JPanel myPanel; private JToolBar myTool; private JLabel time; private
5、 JLabel labelTime; private 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
6、 ExtendButton myButton = null; /初始化窗体 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.menuIt
7、emCZ.addActionListener(this); this.menuE.add(this.menuItemCZ); this.menuItemSZ = new JMenuItem(设置); 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
8、.menuBar.add(this.menuH); setJMenuBar(this.menuBar); /时间信息初始化 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(时间:); this
9、.time = new JLabel(); this.time.setForeground(Color.RED); this.time.setFont(new Font(font, Font.PLAIN, 20); this.labelBombNum = new JLabel(雷数:); this.bombNum = new JLabel(); this.bombNum.setText(String.valueOf(this.numBomb); this.bombNum.setForeground(Color.RED); this.bombNum.setFont(new Font(font,
10、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); / 初始化myButton private void InitButton() BorderLayout borderLayout = new BorderLayout(); this.leaveBo
11、mb = 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(myLayout); this.myPanelMai
12、n.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.setIcon(new ShowNu
13、m(10).getImageIcon(); this.myButtoni.setButton_num(0); this.myButtoni.SetVisited(false); this.myButtoni.SetStatus(false); /设置右键监听标记雷 this.myButtoni.addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent evt) if (evt.getModifiers() = InputEvent.BUTTON3_MASK) int n = (ExtendButton)evt
14、.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.getSource().G
15、etVisited() (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.numBomb
16、); show(); /时钟设置 int delay = 1000;/ 创建一个监听事件 ActionListener drawClock = new ActionListener() public void actionPerformed(ActionEvent evt) countTime+; time.setText(String.valueOf(countTime); repaint(); ;/ 创建一个时间计数器,每一秒触发一次 this.timer = new Timer(delay,drawClock); this.timer.start(); /重新初始化方法 private
17、void SetExtendButton() 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.lea
18、veBomb = numBomb; 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.myButtont
19、empint.GetStatus() this.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(); /监听点击扫雷方法 private void CheckButton(ExtendButton TempButton) if(T
20、empButton.GetStatus() this.timer.stop(); JOptionPane.showMessageDialog(null, You Failed!, Game,JOptionPane.INFORMATION_MESSAGE); this.ShowBomb();int i = JOptionPane.showConfirmDialog(null, 是否要继续?, 消息, JOptionPane.YES_NO_OPTION); if(JOptionPane.YES_OPTION = i) SetExtendButton(); else this.dispose();
21、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; CircleNum1 = (CircleNum
22、1 0) ? -1 : CircleNum1; CircleNum2 = TempButton.GetPostion() - this.myColumns + 1; CircleNum2 = (CircleNum2 (this.myRows * this.myColumns - 1) | (CircleNum5 + 1) % this.myColumns = 0) ? -1 : CircleNum5; CircleNum6 = TempButton.GetPostion() + this.myColumns; CircleNum6 = (CircleNum6 (this.myRows * th
23、is.myColumns - 1) ? -1 : CircleNum6; CircleNum7 = TempButton.GetPostion() + this.myColumns +1; CircleNum7 = (CircleNum7 (this.myRows * this.myColumns - 1) | CircleNum7 % this.myColumns = 0) ? -1 : CircleNum7; for (int i = 0; i 0) TempButton.SetVisited(true); TempButton.setIcon(new ShowNum(temp).getI
24、mageIcon(); temp = 0; else if(temp = 0) TempButton.SetVisited(true); 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.sho
25、wMessageDialog(this, 恭喜你!, 消息, JOptionPane.INFORMATION_MESSAGE); ShowBomb(); / 构造方法 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
26、.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); public Game(int row, int column, int numbomb) Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1