java源代码1.docx
《java源代码1.docx》由会员分享,可在线阅读,更多相关《java源代码1.docx(15页珍藏版)》请在冰豆网上搜索。
java源代码1
importjava.util.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassClearbomb
extendsWindowAdapterimplementsActionListener//雷的类
{
Initdatadata=newInitdata();
Framef_main=newFrame("扫雷");//创建主窗口
Panelp_up1=newPanel();//面板
Panelp_down1=newPanel(newGridLayout(9,9,1,1));
Panelp_up2=newPanel();
Panelp_down2=newPanel();
Labell_left=newLabel("0");//标签
Labell_right=newLabel("10");
JButtonsmile=newJButton();//创建不带有设置文本或图标的按钮
MenuBarmenub=newMenuBar();//菜单条
Fontft=newFont("Seril",Font.BOLD,18);//设置字体为Seril,18磅,粗体,
JButtonbunit[][]=newJButton[9][9];//创建按钮
Labellunit[][]=newLabel[9][9];//创建标签
Panelpunit[][]=newPanel[9][9];
Dialogd1=newDialog(f_main,"恭喜",true);//构造一个标题为"恭喜"不可见对话框,依赖窗口f_main,有模式
Dialogd2=newDialog(f_main,"帮助",true);
Buttonb1=newButton("确定");
Buttonb2=newButton("确定");
Labell1=newLabel("恭喜通关,再来一局吗?
");
Labell2=newLabel("把所有非地雷的格子揭开即胜利;踩到地雷格子就算失败。
");
CardLayoutc=newCardLayout();//创建新卡片布局
Iconbomb=newImageIcon("bomb.gif");//图标
Icontouch=newImageIcon("touch.gif");
Iconfalsebomb=newImageIcon("falsebomb.gif");
Iconsmileface=newImageIcon("smileface.gif");
Icondie=newImageIcon("die.gif");
Iconpuzzle=newImageIcon("puzzle.gif");
Iconflag=newImageIcon("flag.gif");
Timerstimer=newTimers();//创建一个计时器
booleanstop=true;
privateintremainbomb=10;
privatebooleanappear=true;//控制对话框是否显示
booleanthreadstart=true;
publicvoiddisplay(){
//主框架
f_main.setSize(241,342);//窗口大小
f_main.setLocation(300,200);//窗口位置
f_main.addWindowListener(this);//将窗口f_main作为主程序监视器
f_main.setLayout(null);//f_main窗口布局为空
f_main.setBackground(Color.gray);//设置组件的背景色为灰色
f_main.setMenuBar(menub);//将菜单条添加到窗口的顶端
//菜单
Menum_game=newMenu("游戏");
Menum_help=newMenu("帮助");
menub.add(m_game);//菜单条上添加菜单
menub.add(m_help);
m_game.addActionListener(this);
m_help.addActionListener(this);
m_game.add(newMenuItem("开局",newMenuShortcut(KeyEvent.VK_N)));//添加菜单项设置开局快捷键为CTRL+N
m_game.addSeparator();//分隔线
m_game.add(newMenuItem("初级"));
m_game.add(newMenuItem("中级"));
m_game.add(newMenuItem("高级"));
m_game.addSeparator();//分隔线
m_game.add(newMenuItem("退出",newMenuShortcut(KeyEvent.VK_E)));//设置退出快捷键为CTRL+E
m_help.add(newMenuItem("游戏规则",newMenuShortcut(KeyEvent.VK_H)));//设置帮助快捷键为CTRL+H
//面板
p_up1.setBackground(Color.lightGray);
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_up2.setBackground(Color.gray);//小方格颜色
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(inti=0;i<9;i++)
for(intj=0;j<9;j++){
bunit[i][j]=newJButton();
punit[i][j]=newPanel(c);
lunit[i][j]=newLabel();
bunit[i][j].setBackground(Color.lightGray);//格子背景色
bunit[i][j].addMouseListener(newUnitEvent(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");
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(newFlowLayout(FlowLayout.CENTER));
d1.addWindowListener(this);
b1.setSize(50,30);
b1.setLocation(75,50);
b1.addActionListener(this);
d1.add(b1);
d1.setVisible(false);
d2.add(l2,"Center");
d2.setSize(550,150);
d2.setLocation(200,200);
d2.setLayout(newFlowLayout(FlowLayout.CENTER));
d2.addWindowListener(this);
b2.setSize(50,30);
b2.addActionListener(this);
d2.add(b2);
d2.setVisible(false);
init();
}
publicvoidinit(){//
data.init();
appear=true;
remainbomb=10;
for(inti=0;i<9;i++)
for(intj=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]);
}
}
//处理事件接口
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==b1){//扫雷成功后,处理事件
appear=false;
d1.setVisible(false);
}
if(e.getSource()==b2)//帮助菜单的监视器处理接口
d2.setVisible(false);
if(e.getActionCommand()=="游戏规则")
d2.setVisible(true);
if(e.getActionCommand()=="开局")
gamestart();
if(e.getActionCommand()=="退出")
System.exit
(1);
for(inti=0;i<9;i++)
for(intj=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("")){
blankarea(i,j);
}
elsec.first(punit[i][j]);
}
if(threadstart==true){
newTimers().start();
threadstart=false;
}
}
}
if(e.getSource()==smile){
gamestart();
}
for(inti=0;i<9;i++)
for(intj=0;j<9;j++){
if(lunit[i][j].getText().equals("*")&&
bunit[i][j].getIcon()==flag&&
remainbomb==0&&appear==true){
stop=true;
d1.setVisible(true);
}
}
}
publicvoidgamestart(){//游戏重新开始
smile.setIcon(smileface);
init();
threadstart=true;
stop=true;
for(inti=0;i<9;i++)
for(intj=0;j<9;j++){
bunit[i][j].setIcon(null);
bunit[i][j].setEnabled(true);
}
l_right.setText("10");
l_left.setText("0");
}
//游戏失败
publicvoidover(){
stop=true;
smile.setIcon(touch);
for(inti=0;i<9;i++)
for(intj=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);
}
}
//显示空白区域
publicvoidblankarea(inti,intj){
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方法
publicstaticvoidmain(String[]args){
newClearbomb().display();
}
publicvoidwindowClosing(WindowEvente){
if(e.getSource()==d1)
d1.setVisible(false);
elseif(e.getSource()==d2)
d2.setVisible(false);
else
System.exit
(1);
}
//内部类,处理鼠标单击事件
classUnitEventextendsMouseAdapter{
privateinta,b;
publicUnitEvent(inta,intb){
this.a=a;
this.b=b;
}
publicvoidmouseClicked(MouseEvente){
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;
}
}
}
}
classTimersextendsThread{//内部类,处理时间的显示
publicvoidrun(){
inti=0;
while(!
stop){
try{
sleep(1000);
}
catch(InterruptedExceptione){
System.out.println(e.getMessage());
}
i++;
l_left.setText(""+i);
}
return;
}
}
}
classInitdata{//初始数据
publicbooleanrand[][]=newboolean[9][9];
publicbooleanappear[][]=newboolean[9][9];
publicvoidinit(){
for(inti=0;i<=8;i++)
for(intj=0;j<=8;j++){
rand[i][j]=true;
appear[i][j]=true;
}
Randomr=newRandom();
intbombcount=0;
for(;;){
inti;
i=r.nextInt(81);
if(rand[i/9][i%9]){
rand[i/9][i%9]=false;
bombcount++;
}
if(bombcount==10)break;
}
}
publicintinitlunit(inti,intj){
intsum=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++;
returnsum;
}
}