package sweep;
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.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.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.Timer;
/*
* 主窗口界面布置及行列算法
*/
public class Sweep extends JFrame implements ActionListener {
private Container myContainer;
// 网格布局
private GridLayout myLayout;
private JPanel myPanelMain;
private JPanel myPanel;
// 工具栏
private JToolBar myTool;
private JLabel time;
private JLabel labelTime;
private JLabel bombNum;
private JLabel labelBombNum;
// 菜单栏
private JMenuBar menuBar;
private JMenu menuE;
// 设置、重置
private JMenuItem menuItemCZ;
private int numBomb, countTime, leaveBomb, numEnd;
private int myRows, myColumns;
private int xis, yis;
// 计时器
private Timer timer;
private Button[] myButton = null;
// 初始化窗体
private void initView() {
// 初始化菜单
this.menuBar = new JMenuBar();
this.menuE = new JMenu("菜单(E)");
this.menuItemCZ = new JMenuItem("重置");
this.menuItemCZ.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
this.menuItemCZ.addActionListener(this);
this.menuE.add(this.menuItemCZ);
this.menuBar.add(this.menuE);
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.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", 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.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(myLayout);
this.myPanelMain.add(this.myPanel, borderLayout.CENTER);
this.myContainer.add(this.myPanelMain);
this.myButton = new Button[(this.myRows * this.myColumns)];
for (int i = 0; i < (this.myRows * this.myColumns); i++) {
this.myButton[i] = new Button();
this.myButton[i].setPostion(i);
this.myButton[i].setIcon((new ShowPicture(10)).getImageIcon());
this.myButton[i].setButton_num(0);
this.myButton[i].setVisited(false);
this.myButton[i].setStatus(false);
// 设置鼠标右键监听标记雷点
this.myButton[i].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if ((e.getModifiers() == InputEvent.BUTTON3_MASK)) {
int n = ((Button) e.getSource()).getButton_num();
if (n == 1) {
if (!((Button) e.getSource()).getVisited()) {
((Button) e.getSource()).setButton_num(0);
((Button) e.getSource()).setIcon((new ShowPicture(10)).getImageIcon());
leaveBomb++;
bombNum.setText(String.valueOf(leaveBomb));
}
} else {
if (!((Button) e.getSource()).getVisited()) {
((Button) e.getSource()).setButton_num(1);
((Button) e.getSource()).setIcon((new ShowPicture(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;
// 创建监听事件
ActionListener drawClock = new ActionListener() {
public void actionPerformed(ActionEvent e) {
countTime++;
time.setText(String.valueOf(countTime));
repaint();
}
};
// 创建时间计数器,每一秒触发一次
this.timer = new Timer(delay, drawClock);
this.timer.start();
}
// 设置button
private void setButton() {
for (int i = 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((new ShowPicture(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;
}
// 设置雷点
private void setBomb(int count) {
int counter = 0;
int tempint;
while (counter != count) {
tempint = (int) (Math.random() * (this.myRows * this.myColumns));
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((new ShowPicture(9)).getImageIcon());
}
}
}
// 点击每个格子
private void checkButton(Button tempButton) {
if (tempButton.getStatus()) {
this.timer.stop();
JOptionPane.showMessageDialog(null, "你输了!", "Game Over", JOptionPane.INFORMATION_MESSAGE);
this.showBomb();
int i = JOptionPane.showConfirmDialog(null, "是否继续游戏?", "消息", JOptionPane.YES_NO_OPTION);
if (JOptionPane.YES_OPTION == i) {
setButton();
} 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 (int i = 0; i < 8; i++) {
if (circleNum[i] != -1) {
if (myButton[circleNum[i]].getStatus() && !myButton[circleNum[i]].getVisited()) {
temp++;

金枝玉叶9
- 粉丝: 91
- 资源: 7420
最新资源
- baiduwenku_AndroidPhone_1029855y.apk
- 8051 高精度电子秤HX711
- 文件反转2.0.py
- 开源OA协同办公系统,集成Flowable流程引擎 可拖拽创建个性表单 基于RuoYi-VUE版本开发
- 开源OA协同办公系统 集成Flowable流程引擎 可拖拽创建个性表单
- 最新版本2023UI千月影视APP源码 开源完美版前后端完美匹配 后端基于ThinkPHP框架
- 浪子易支付源码 优化缓存机制
- PHP域名授权验证系统是一个功能强大的系统,提供了多项功能来保护你的域名和软件的合法性 它包括盗版追踪、域名IP双重授权、在线加
- 支持免费的Openai人工智能 问答记录保留 系统
- 彩纸屋开源定制少儿编程培训管理系统源码 在线培训系统源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


