版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、整个程序使用了5个类:RunGame 用于启动程序。Game 界面的布置,各种行列的算法。ExtendButton 继承了Jbutton 用于新建button的各种属性ShowNum 监听到某个button后,计算出此button周围有几个雷,不同的雷对应不通的图片,此类得到button上应加载的图片地址ViewReSet 此类用于新建一个窗口,用户输入自己想要的行、列、雷数,然后用新的行列雷数new一个新的Gamebiaose dise1 dise2 dise3dise4 dise5 dise6 dise7dise8 dise lei biaoji/* 运行类 */package com.d
2、hl.saolei;public class RunGame public static void main(String args) new Game();/* 创建游戏主窗体 */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 jav
3、a.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;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;im
4、port javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JToolBar;import javax.swing.KeyStroke;import javax.swing.Timer;public class Game extends JFrame implements ActionListenerprivate Container myContainer;private GridLayout myLayout;private JPanel myP
5、anelMain;private JPanel myPanel;private JToolBar myTool;private JLabel time;private 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;priva
6、te int myRows, myColumns;private int xis, yis;private Timer timer;private 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(KeyStr
7、oke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK);this.menuItemCZ.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.me
8、nuE.add(this.menuItemSZ);this.menuBar.add(this.menuE);this.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(bo
9、rderLayout);this.labelTime = new JLabel(时间:);this.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
10、.RED);this.bombNum.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
11、= new BorderLayout();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
12、(myLayout);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.myButto
13、ni.setIcon(new ShowNum(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 = (
14、ExtendButton)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.g
15、etSource().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.num
16、Bomb);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 void SetExt
17、endButton() 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 = numBomb;t
18、his.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() this.m
19、yButtontempint.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(TempButton.GetStatus() this.tim
20、er.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();return;int CircleNum = new int8;in
21、t 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 = (CircleNum1 0) ? -1 : CircleNum1;CircleNum2 = Temp
22、Button.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 * this.myColumns - 1) ? -1 : CircleNum6;CircleNu
23、m7 = 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).getImageIcon();temp = 0; else if(temp = 0) TempButto
24、n.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.showMessageDialog(this, 恭喜你!, 消息, JOptionPane.INFORMATION
25、_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.setBounds(x, y, this.xis, this.yis);this.setTitle(扫雷);this.nu
26、mBomb = 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.getWidth() - 400) / 2);int y = (i
27、nt) (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_CL
28、OSE);/监听方法public void actionPerformed(ActionEvent e) /对(this.myRows * this.myColumns)个button的监听进行处理for (int i = 0; i = 0) ? pos : 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 bo
29、olean GetStatus() return this.Button_Status;public boolean SetVisited(boolean vis) this.Button_Visited = vis;return this.Button_Visited;public boolean GetVisited() return this.Button_Visited;/* 设置button显示图片 */package com.dhl.saolei;import java.awt.Image;import javax.swing.ImageIcon;public class Show
30、Num private int num;public ShowNum(int n) this.num = n;public ImageIcon getImageIcon() ImageIcon imageIcon;switch (num) case 0:imageIcon = new ImageIcon(./class/images/dise.jpg);break;case 1:imageIcon = new ImageIcon(./class/images/dise1.jpg);break;case 2:imageIcon = new ImageIcon(./class/images/dis
31、e2.jpg);break;case 3:imageIcon = new ImageIcon(./class/images/dise3.jpg);break;case 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 Ima
32、geIcon(./class/images/dise7.jpg);break;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);break;
33、default:imageIcon = new ImageIcon(./class/images/dise.jpg);break;return imageIcon;/* 创建一个新窗口,输入新的行、列、雷数,然后用新数据重新new一个Game窗口 */package com.dhl.saolei;import java.awt.Container;import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Toolkit;import jav
34、a.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 ActionListenerprivate JFram
35、e 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 myFieldBombNum = null;pri
36、vate 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.add(this.myPanel);GridBagC
37、onstraints gbc = new GridBagConstraints();gbc.gridx = 1;gbc.gridy = 0;this.myLabel = new JLabel(窗口行列设置);this.myPanel.add(this.myLabel, gbc);gbc.gridx = 0;gbc.gridy = 1;this.myLabelRow = new JLabel(行数:);this.myPanel.add(this.myLabelRow, gbc);gbc.gridx = 1;gbc.gridy = 1;this.myFieldRow = new JTextFiel
38、d(10);this.myPanel.add(this.myFieldRow, gbc);gbc.gridx = 0;gbc.gridy = 2;this.myLabelColum = new JLabel(列数:);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(雷数:);this.myPanel.add(this.myLabelBombNum, gbc);gbc.gridx = 1;gbc.gridy = 3;this.myFieldBombNum = new JTextField(10);this.myPanel.add(this.myFieldBombNum, gbc);JPanel btnPanel = new JPanel();btnPanel.setOpaque(false);this.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿意盎然家居绿植与健康环境的和谐共生
- 语文课堂中的语言积累与文化传承
- 职场妈妈如何在家中建立良好关系以促进心理健康
- 职场新星如何通过学科教育开启成功之路
- 语文教育的未来发展与创新思考-结合传统文化传承的挑战与机遇
- 现代教育技术下的数学教育新模式探讨
- 设备维护与日常管理策略
- 色彩运用打造独特的展览空间体验
- 2025年脉冲滤尘器项目可行性研究报告
- 2025年直燃式溴化锂冷暖水机组项目可行性研究报告
- 国有资产管理法律责任与风险防控
- 未婚生子的分手协议书
- 变更监事章程修正案范例
- 北京小客车指标租赁协议五篇
- 输液室运用PDCA降低静脉输液患者外渗的发生率品管圈(QCC)活动成果
- YY/T 0681.2-2010无菌医疗器械包装试验方法第2部分:软性屏障材料的密封强度
- GB/T 20472-2006硫铝酸盐水泥
- 烟气管道阻力计算
- 城乡环卫一体化保洁服务迎接重大节日、活动的保障措施
- 医院-9S管理共88张课件
- 高考作文复习:议论文论证方法课件15张
评论
0/150
提交评论