知识大全 扫雷程序(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)

Java实现扫雷(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  */  //清楚原来的方形

知识大全 C#语言与Java语言程序的比较

C#语言与Java语言程序的比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  迈入二十一世纪以

知识大全 JAVA编程语言程序开发平方

JAVA编程语言程序开发平方  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  [java]  pa

知识大全 Java语言深入 多线程程序模型研究

Java语言深入多线程程序模型研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  多线程是较复杂

知识大全 Java编程语言程序的认识误区

Java编程语言程序的认识误区  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  越来越多人开始使用

知识大全 JAVA编程语言程序开发技术Dijkstra

JAVA编程语言程序开发技术Dijkstra  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Di

知识大全 数据压缩格式Java语言应用程序设计方法

数据压缩格式Java语言应用程序设计方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据压缩

知识大全 怎样学好java语言

怎样学好java语言?学习程序的最好方式是参照源代码,先仿照,后创新,慢慢有积累了,就可以收发自由了。没关系的,慢慢来,不可能一步到位的。java确实很难学.学习Java其实应该上升到如何学习程序设计

知识大全 用java语言编程序:计算1+1/2!+1/3!+1/4,简单语句就好,不要写的太复杂哦,谢谢哦

用java语言编程序:计算1+1/2!+1/3!+1/4,简单语句就好,不要写的太复杂哦,谢谢哦!publicclassTestpublicstaticvoidmain(Stringargs[])in

知识大全 浅析Java语言的事件处理快捷回复

浅析Java语言的事件处理快捷回复  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在JAVA程序