📄 新建 文本文档.txt
字号:
一个新的纯JAVA扫雷程序,写了三天!
一个新的纯JAVA扫雷程序,写了三天!其原理参照了网上原有的程序一点点,不知道算不算偷!
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Clearbomb extends WindowAdapter implements ActionListener{
Initdata data = new Initdata();
Frame f_main = new Frame("ClearBomb");
Panel p_up1 = new Panel();
Panel p_down1 = new Panel(new GridLayout(9,9,1,1));
Panel p_up2 = new Panel();
Panel p_down2 = new Panel();
Label l_left = new Label("0");
Label l_right = new Label("10");
JButton smile = new JButton();
MenuBar menub = new MenuBar();
Font ft = new Font("Seril",Font.BOLD,18);
JButton bunit[][] = new JButton[9][9];
Label lunit[][] = new Label[9][9];
Panel punit[][] = new Panel[9][9];
Dialog d1 = new Dialog(f_main,"恭喜",true);
Dialog d2 = new Dialog(f_main,"帮助",true);
Dialog d3 = new Dialog(f_main,"关于作者",true);
Button b1 = new Button("确定");
Button b2 = new Button("确定");
Button b3 = new Button("确定");
Label l1 = new Label("恭喜通关,再来一局吗?");
Label l2 = new Label("此游戏仿制Windows中的扫雷程序而写,具体请参照Windows扫雷!少许漏洞,留待观者实现");
Label l3 = new Label("黑人皮皮,本名,胡波。合肥工业大学计算机及应用专业本科毕业(自考)现正在学习java,已略有心得!志向:程序员。");
CardLayout c = new CardLayout();
//图片
Icon bomb = new ImageIcon("bomb.gif");
Icon touch = new ImageIcon("touch.gif");
Icon falsebomb = new ImageIcon("falsebomb.gif");
Icon smileface = new ImageIcon("smileface.gif");
Icon die = new ImageIcon("die.gif");
Icon puzzle = new ImageIcon("puzzle.gif");
Icon flag = new ImageIcon("flag.gif");
Icon flag1 = new ImageIcon("flag1.gif");
Timers timer = new Timers();
boolean stop = true;
private int remainbomb = 10;
private boolean appear = true;//控制对话框是否显示
boolean threadstart = true;
public void display(){
//主框架
f_main.setSize(241,350);
f_main.setLocation(300,200);
f_main.addWindowListener(this);
f_main.setLayout(null);
f_main.setBackground(Color.gray);
f_main.setMenuBar(menub);
//菜单
Menu m_game = new Menu("游戏");
Menu m_help = new Menu("帮助");
Menu m_about = new Menu("关于作者");
menub.add(m_game);
menub.add(m_help);
menub.add(m_about);
m_game.addActionListener(this);
m_help.addActionListener(this);
m_about.addActionListener(this);
m_game.add(new MenuItem("开局",new MenuShortcut(KeyEvent.VK_N)));
m_game.addSeparator();
m_game.add(new MenuItem("初级"));
m_game.add(new MenuItem("中级"));
m_game.add(new MenuItem("高级"));
m_game.addSeparator();
m_game.add(new MenuItem("退出",new MenuShortcut(KeyEvent.VK_E)));
m_help.add(new MenuItem("帮助主题",new MenuShortcut(KeyEvent.VK_H)));
m_about.add(new MenuItem("黑人皮皮",new MenuShortcut(KeyEvent.VK_W)));
//面板
p_up1.setBackground(Color.orange);
p_up1.setSize(225,50);
p_up1.setLocation(1,1);
p_down1.setBackground(Color.gray);
p_down1.setSize(225,225);
p_down1.setLocation(1,1);
p_up1.setLayout(null);
//p_down1.setLayout(null);
p_up2.setBackground(Color.white);
p_up2.setLocation(7,44);
p_up2.setSize(227,52);
p_down2.setBackground(Color.white);
p_down2.setLocation(7,104);
p_down2.setSize(227,227);
p_up2.setLayout(null);
p_down2.setLayout(null);
//标签与按钮
l_left.setFont(ft);
l_right.setFont(ft);
l_left.setLocation(8,8);
l_left.setSize(80,30);
l_left.setBackground(Color.red);
l_right.setLocation(137,8);
l_right.setSize(80,30);
l_right.setBackground(Color.red);
smile.setIcon(smileface);
smile.setLocation(98,8);
smile.setSize(30,30);
smile.setBackground(Color.white);
smile.addActionListener(this);
p_up1.add(l_left);
p_up1.add(smile);
p_up1.add(l_right);
//雷区
for(int i =0;i < 9;i++)
for(int j = 0;j < 9;j++){
bunit[i][j] = new JButton();
punit[i][j] = new Panel(c);
lunit[i][j] = new Label();
bunit[i][j].setBackground(Color.lightGray);
bunit[i][j].addMouseListener(new UnitEvent(i,j));
bunit[i][j].addActionListener(this);
lunit[i][j].setBackground(Color.white);
punit[i][j].add(lunit[i][j],"down");
punit[i][j].add(bunit[i][j],"up");
//c.show(punit[i][j],"up");
p_down1.add(punit[i][j]);
}
p_up2.add(p_up1);
p_down2.add(p_down1);
f_main.add(p_up2);
f_main.add(p_down2);
f_main.setResizable(false);
f_main.setVisible(true);
//对话框
d1.add(l1,"Center");
d1.setSize(300,150);
d1.setLocation(200,200);
d1.setLayout(new FlowLayout(FlowLayout.CENTER));
d1.addWindowListener(this);
b1.setSize(50,30);
b1.setLocation(75,50);
//d.addWindowListener(new Dlg());
b1.addActionListener(this);
d1.add(b1);
d1.setVisible(false);
d2.add(l2,"Center");
d2.setSize(550,150);
d2.setLocation(200,200);
d2.setLayout(new FlowLayout(FlowLayout.CENTER));
d2.addWindowListener(this);
b2.setSize(50,30);
//b2.setLocation();
b2.addActionListener(this);
d2.add(b2);
d2.setVisible(false);
d3.add(l3,"Center");
d3.setSize(670,150);
d3.setLocation(200,200);
d3.setLayout(new FlowLayout(FlowLayout.CENTER));
d3.addWindowListener(this);
b3.setSize(50,30);
//b3.setLocation();
b3.addActionListener(this);
d3.add(b3);
d3.setVisible(false);
init();
}
public void init(){
data.init();
appear = true;
remainbomb = 10;
for(int i = 0;i < 9;i++)
for(int j = 0;j < 9;j++){
bunit[i][j].setIcon(null);
lunit[i][j].setText(data.initlunit(i,j) + "");
if(!data.rand[i][j])
lunit[i][j].setText("*");
if(lunit[i][j].getText().equals("0") && data.rand[i][j])
lunit[i][j].setText("");
c.last(punit[i][j]);
}
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == b1){
appear = false;
d1.setVisible(false);
}
if(e.getSource() == b2)
d2.setVisible(false);
if(e.getSource() == b3)
d3.setVisible(false);
if(e.getActionCommand() == "帮助主题")
d2.setVisible(true);
if(e.getActionCommand() == "黑人皮皮")
d3.setVisible(true);
if(e.getActionCommand() == "开局")
gamestart();
if(e.getActionCommand() == "退出")
System.exit(1);
for(int i = 0;i < 9;i++)
for(int j = 0;j < 9;j++){
stop = false;
if(e.getSource() == bunit[i][j]){
if(lunit[i][j].getText().equals("*")) {
bunit[i][j].setIcon(touch);
data.rand[i][j] = true;
over();
return;
}
else{
if(lunit[i][j].getText().equals("")){
//c.first(punit[i][j]);
blankarea(i,j);
}
else c.first(punit[i][j]);
}
if(threadstart == true){
new Timers().start();
threadstart = false;
}
}
}
if(e.getSource() == smile ){
gamestart();
//return;
}
for(int i = 0;i < 9; i ++)
for(int j = 0;j < 9;j ++){
if(lunit[i][j].getText().equals("*") &&
bunit[i][j].getIcon() == flag &&
remainbomb == 0 && appear == true){
stop = true;
d1.setVisible(true);
}
}
}
public void gamestart(){
smile.setIcon(smileface);
init();
threadstart = true;
stop = true;
for( int i = 0;i < 9;i++)
for( int j = 0;j < 9;j++){
bunit[i][j].setIcon(null);
bunit[i][j].setEnabled(true);
}
l_right.setText("10");
l_left.setText("0");
}
//很不幸,踩到了雷!
public void over(){
stop = true;
smile.setIcon(touch);
for(int i = 0;i < 9;i++)
for(int j = 0;j < 9;j++){
c.first(punit[i][j]);
if(lunit[i][j].getText().equals("*") && bunit[i][j].getIcon() != touch){
bunit[i][j].setIcon(bomb);
c.last(punit[i][j]);
}
if(bunit[i][j].getIcon() == touch){
bunit[i][j].setIcon(die);
c.last(punit[i][j]);
}
bunit[i][j].setEnabled(false);
}
}
//显示空白区域
public void blankarea(int i,int j){
data.appear[i][j] = false;
if(lunit[i][j].getText().equals("*")) return;
else {
if(lunit[i][j].getText().equals("")) c.first(punit[i][j]);
else {
c.first(punit[i][j]);
return;
}
}
if(i > 0 && j > 0 && data.appear[i - 1][j - 1])
blankarea(i - 1,j - 1);
if(i > 0 && data.appear[i - 1][j] == true)
blankarea(i - 1,j);
if(i > 0 && j < 8 && data.appear[i - 1][j + 1])
blankarea(i - 1,j + 1);
if(j > 0 && data.appear[i][j - 1])
blankarea(i,j - 1);
if(j < 8 && data.appear[i][j + 1])
blankarea(i,j + 1);
if(i< 8 && j > 0 && data.appear[i + 1][j - 1])
blankarea(i + 1,j - 1);
if(i < 8 && data.appear[i + 1][j])
blankarea(i + 1,j);
if(i < 8 && j < 8 && data.appear[i + 1][j + 1])
blankarea(i + 1,j + 1);
}
//程序入口main方法
public static void main(String[] args){
new Clearbomb().display();
}
public void windowClosing(WindowEvent e){
if(e.getSource() == d1)
d1.setVisible(false);
else if (e.getSource() == d2)
d2.setVisible(false);
else if(e.getSource() == d3)
d3.setVisible(false);
else
System.exit(1);
}
//内部类,处理鼠标单击事件
class UnitEvent extends MouseAdapter{
private int a,b;
public UnitEvent(int a,int b){
this.a = a;
this.b = b;
}
public void mouseClicked(MouseEvent e){
if (e.getModifiers() == InputEvent.BUTTON1_MASK){
;
}
if (e.getModifiers() == InputEvent.BUTTON2_MASK){
}
if (e.getModifiers() == InputEvent.BUTTON3_MASK){
if(bunit[a][b].getIcon() == null){
bunit[a][b].setIcon(flag);
remainbomb--;
l_right.setText("" + remainbomb);
if(lunit[a][b].getText().equals("*") && //显示对话框
bunit[a][b].getIcon() == flag &&
remainbomb == 0){
stop = true;
d1.setVisible(true);
}
return;
}
if(bunit[a][b].getIcon() == flag){//标记与凝问的切换
bunit[a][b].setIcon(puzzle);
remainbomb++;
l_right.setText("" + remainbomb);
return;
}
if(bunit[a][b].getIcon() == puzzle){
bunit[a][b].setIcon(null);
return;
}
}
}
}
class Timers extends Thread{//内部类,处理时间的显示
public void run(){
int i = 0;
while(!stop){
try{
sleep(1000);
}
catch(InterruptedException e){
System.out.println(e.getMessage());
}
i++;
l_left.setText(""+i);
}
return;
}
}
}
class Initdata{//初始数据
public boolean rand[][] = new boolean[9][9];
public boolean appear[][] = new boolean[9][9];
public void init(){
for(int i = 0;i <= 8;i++)
for(int j = 0;j <= 8;j++){
rand[i][j] = true;
appear[i][j] = true;
}
Random r = new Random();
int bombcount = 0;
for(;;){
int i;
i = r.nextInt(81);
if(rand[i/9][i%9]){
rand[i/9][i%9] = false;
bombcount++;
}
if(bombcount == 10) break;
}
}
public int initlunit(int i,int j){
int sum=0;
if(i>0&&j>0&&!rand[i-1][j-1])sum++;
if(j>0&&!rand[i][j-1])sum++;
if(i<8&&j>0&&!rand[i+1][j-1])sum++;
if(i<8&&!rand[i+1][j])sum++;
if(i<8&&j<8&&!rand[i+1][j+1])sum++;
if(j<8&&!rand[i][j+1])sum++;
if(i>0&&j<8&&!rand[i-1][j+1])sum++;
if(i>0&&!rand[i-1][j])sum++;
return sum;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -