知识大全 扫雷程序(Java语言)
Posted 知
篇首语:博观而约取,厚积而薄发。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 扫雷程序(Java语言)相关的知识,希望对你有一定的参考价值。
扫雷程序(Java语言) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
import java awt *;
import java awt event *;
import java math *;
import java util *;
import javax swing *;
//程序入口
public class JavaClearBomb
public static void main(String args[])
DrawInterFace DIF=new DrawInterFace();
DIF RandomMine();
//生成界面
class DrawInterFace
//地雷标志 无雷 有雷
private static int fmine[]=new int[ ];
//右键记录标志
private static boolean rmouse;
//用来存放总地雷数
private static int fcount= ;
//存放剩余地雷数
private static int rcount;
//存放随机生成的数
private static int r[]=new int[ ];
//记录标签是否翻开标志
private static boolean appear[]=new boolean[ ];
//记录时间
private static long time= ;
//标记线程
private boolean stop = true;
//标记又右键
private static boolean rightclick[]=new boolean[ ];
private Frame fr;
private Menu m m ;
private MenuBar mb;
private MenuItem mi mi mi mi mi mi mi mi mih;
private CheckboxMenuItem mi mi mi ;
//用CardLayout来放置按钮和标签 plbmine里包含lbmine和btmine 为了实现CardLayout的功能
private Panel pup pdown;
private Label lbleft lbright lbover;
private Button btagain btexit;
private JButton btstart;
private static Button btmine[];
private static Label lbmine[];
private static Panel plbmine[];
private int minenum= ;
private int mine[]=new int[ ];
private static CardLayout CLayout=new CardLayout();
private Dialog digOver;
public DrawInterFace()
//生成菜单栏
fr=new Frame( 扫雷 );
mb=new MenuBar();
fr setMenuBar(mb);
m =new Menu( 游戏 );
m =new Menu( 帮助 );
mb add(m );
mb setHelpMenu(m );
mi =new MenuItem( 开局 );
mi =new MenuItem( 初级 );
mi =new MenuItem( 中级 );
mi =new MenuItem( 高级 );
mi =new MenuItem( 自定义 );
mi =new CheckboxMenuItem( 标记 );
mi =new CheckboxMenuItem( 颜色 );
mi =new CheckboxMenuItem( 声音 );
mi =new MenuItem( 扫雷英雄榜 );
mi =new MenuItem( 退出 );
mih=new MenuItem( 河海大学 );
mi =new MenuItem( 计算机周挺川 );
m add(mi );
m addSeparator();
m add(mi );
m add(mi );
m add(mi );
m add(mi );
m addSeparator();
m add(mi );
m add(mi );
m add(mi );
m addSeparator();
m add(mi );
m addSeparator();
m add(mi );
m add(mih);
m addSeparator();
m add(mi );
fr setMenuBar(mb);
mb add(m );
mb add(m );
fr setResizable(false);
fr setLocation( );
//生成时间显示区 雷数显示区和开始游戏按钮
pup=new Panel();
pdown=new Panel();
pup setLayout(new FlowLayout());
lbleft=new Label( );
lbleft setAlignment(Label CENTER);
lbright=new Label( );
lbright setAlignment(Label CENTER);
btstart=new JButton( new ImageIcon( image/mine gif ));
// lbleft setLocation( );
// lbright setLocation( );
// btstart setBounds( );
pup add(lbleft);
pup add(btstart);
pup add(lbright);
//对话框
lbover=new Label( 踩到雷了 );
btagain=new Button( 再玩一局 );
btexit=new Button( 算了 );
digOver=new Dialog(fr 你输了 );
digOver setLayout(new FlowLayout());
digOver setResizable(false);
digOver setSize( );
digOver add(lbover);
digOver add(btagain);
digOver add(btexit);
btagain addActionListener(new Restart());
btexit addActionListener(new Exit());
digOver setLocation( );
//生成雷区
pdown setLayout(new GridLayout( ));
btmine=new Button[ ];
lbmine=new Label[ ];
plbmine=new Panel[ ];
for(int i= ;i< ;i++)
btmine[i]=new Button();
lbmine[i]=new Label();
lbmine[i] setBackground(Color LIGHT_GRAY);
lbmine[i] setAlignment(Label CENTER);//设定标签文字居中显示
plbmine[i]=new Panel();
for(int i= ;i< ;i++)
plbmine[i] setLayout(CLayout);
plbmine[i] add(btmine[i] up );
plbmine[i] add(lbmine[i] up );
pdown add(plbmine[i] down );
//设定雷区按钮的监听
for(int i= ;i< ;i++)
btmine[i] addActionListener(new BombAction());
btmine[i] addMouseListener(new UnitEvent(i));
//设定开始按钮的监听
btstart addActionListener(new Start());
//画出panel
fr add(pup North );
fr add(pdown South );
fr setSize( );
fr setVisible(true);
fr addWindowListener(new WindowClosing());
//初始化
for(int i= ;i< ;i++)
fmine[i]= ;
appear[i]=false;
rightclick[i]=false;
rmouse=false;
rcount= ;
lbright setText(Integer toString(rcount));
//随机生成 个大小介于 到 之间的整数并对雷进行标记(算法有待优化)
public static void RandomMine()
//存到fmine[i]中 为雷 没有
Random rm=new Random();
for(int i= ;i< ;i++)
r[i]=rm nextInt( );
for(int j= ;j<i;j++)
while((r[i]==r[j])&&(i!=j))
r[i]=rm nextInt( );
;
for(int i= ;i< ;i++)
fmine[r[i]]= ;
//计算某方格周围的雷数
static int HowManyMine(int x)
int temp= ;
switch (x)
//左上角
case : temp=fmine[x+ ]+fmine[x+ ]+fmine[x+ ];break;
//右上角
case : temp=fmine[x ]+fmine[x+ ]+fmine[x+ ];break;
//左下角
case : temp=fmine[x ]+fmine[x ]+fmine[x+ ];break;
//右下角
case : temp=fmine[x ]+fmine[x ]+fmine[x ];break;
//上边
case :
case :
case :
case :
case :
case :
case : temp=fmine[x ]+fmine[x+ ]+fmine[x+ ]+fmine[x+ ]+fmine[x+ ];break;
//下边
case :
case :
case :
case :
case :
case :
case : temp=fmine[x ]+fmine[x ]+fmine[x ]+fmine[x ]+fmine[x+ ];break;
//左边
case :
case :
case :
case :
case :
case :
case : temp=fmine[x ]+fmine[x ]+fmine[x+ ]+fmine[x+ ]+fmine[x+ ];break;
//右边
case :
case :
case :
case :
case :
case :
case : temp=fmine[x ]+fmine[x ]+fmine[x ]+fmine[x+ ]+fmine[x+ ];break;
//其余
default: temp=fmine[x ]+fmine[x ]+fmine[x ]+fmine[x ]+fmine[x+ ]+fmine[x+ ]+fmine[x+ ]+fmine[x+ ];break;
return temp;
//判断标签是否已经显示
////展开雷区方法(此算法严重需要改进)
static void ClickMine(int i)
CLayout last(plbmine[i]);
if(fmine[i]== )
System out println( 踩到雷了 );
return;
else
if(HowManyMine(i)== )
CLayout last(plbmine[i]);
appear[i]=true;
else
CLayout last(plbmine[i]);
appear[i]=true;
return;
btmine[i] setVisible(false);
switch (i)
//左上角
case : if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;break;
//右上角
case : if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;break;
//左下角
case : if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;break;
//右下角
case : if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;break;
//上边
case :
case :
case :
case :
case :
case :
case : if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;break;
//下边
case :
case :
case :
case :
case :
case :
case : if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;break;
//左边
case :
case :
case :
case :
case :
case :
case : if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;break;
//右边
case :
case :
case :
case :
case :
case :
case : if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;break;
//其余
default: if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i ]==false)CLayout last(plbmine[i ]);ClickMine(i );appear[i ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;if(appear[i+ ]==false)CLayout last(plbmine[i+ ]);ClickMine(i+ );appear[i+ ]=true;break;
//内部类实现监听 实现扫雷中心算法
class BombAction implements ActionListener
public void actionPerformed(ActionEvent e)
if(stop==true)
new Clock() start();
stop = false;
for (int i= ;i< ;i++)
if (e getSource()==btmine[i]&&rightclick[i]==true) return;
for (int i= ;i< ;i++)
lbmine[i] setText(Integer toString(HowManyMine(i)));
if(HowManyMine(i)== ) lbmine[i] setText( );
if (e getSource()==btmine[i])
if(fmine[i]== )
//判断是否失败
stop=true;
digOver setVisible(true);
fr setEnabled(false);
else
//实现展开雷区(较难算法)
ClickMine(i);
//判断是否胜利(要改进)
int win= ;
for(int j= ;j< ;j++)
if(appear[j]==true) win++;
if(win== )
stop=true;
lbover setText( 用时 +time+ 秒 );
digOver setTitle( 你赢了 );
digOver setVisible(true);
//右键标记
//线程实现记时
class Clock extends Thread
public void run()
while(stop==false)
try
sleep( );
catch(InterruptedException e)
System out println(e getMessage());
time++;
lbleft setText(String valueOf(time));
return;
//开始按钮的监听
class Start implements ActionListener
public void actionPerformed(ActionEvent e)
for(int i= ;i< ;i++)
fmine[i]= ;
appear[i]=false;
lbmine[i] setText( );
btmine[i] setVisible(true);
CLayout first(plbmine[i]);
btmine[i] setLabel( );
btmine[i] setEnabled(true);
rightclick[i]=false;
btstart setIcon(new ImageIcon( image/mine gif ));
RandomMine();
rcount= ;
lbright setText(Integer toString(rcount));
//初始化线程
stop = true;
time= ;
lbleft setText(Long toString(time));
//右击事件
class UnitEvent extends MouseAdapter
private int i;
public UnitEvent(int i)
this i=i;
public void mouseClicked(MouseEvent e)
if(e getModifiers()==InputEvent BUTTON _MASK)
if(e getModifiers()==InputEvent BUTTON _MASK)
if(e getModifiers()==InputEvent BUTTON _MASK)
if(btmine[i] getLabel()== )
btmine[i] setLabel( ▲ );
rightclick[i]=true;
rcount ;
lbright setText(String valueOf(rcount));
return;
if(btmine[i] getLabel()== ▲ )
btmine[i] setLabel( ? );
btmine[i] setEnabled(true);
rightclick[i]=false;
rcount++;
lbright setText(String valueOf(rcount));
return;
if(btmine[i] getLabel()== ? )
btmine[i] setLabel( );
return;
//对话框按钮的监听
class Restart implements ActionListener
public void actionPerformed(ActionEvent e)
new Start() actionPerformed(e);
digOver setVisible(false);
fr setEnabled(true);
lbover setText( 踩到雷了 );
digOver setTitle( 你输了 );
class Exit implements ActionListener
public void actionPerformed(ActionEvent e)
System exit( );
//内部类关闭窗口
class WindowClosing extends WindowAdapter
public void windowClosing(WindowEvent e)
System exit( );
cha138/Article/program/Java/hx/201311/26581
相关参考
Java实现扫雷(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! */ //清楚原来的方形
C#语言与Java语言程序的比较 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 迈入二十一世纪以
JAVA编程语言程序开发平方 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! [java] pa
Java语言深入多线程程序模型研究 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 多线程是较复杂
Java编程语言程序的认识误区 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 越来越多人开始使用
JAVA编程语言程序开发技术Dijkstra 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Di
数据压缩格式Java语言应用程序设计方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数据压缩
怎样学好java语言?学习程序的最好方式是参照源代码,先仿照,后创新,慢慢有积累了,就可以收发自由了。没关系的,慢慢来,不可能一步到位的。java确实很难学.学习Java其实应该上升到如何学习程序设计
知识大全 用java语言编程序:计算1+1/2!+1/3!+1/4,简单语句就好,不要写的太复杂哦,谢谢哦
用java语言编程序:计算1+1/2!+1/3!+1/4,简单语句就好,不要写的太复杂哦,谢谢哦!publicclassTestpublicstaticvoidmain(Stringargs[])in
浅析Java语言的事件处理快捷回复 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在JAVA程序