java版掃雷

方塊類

import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JOptionPane;


public class stone extends JButton implements MouseListener 
{
private int count=0;
public int sum=0;
public boolean mark=false;
public JButton jbtn;
public boolean danger=false;
public boolean ready=false;
public int col;
public int row;
public int record=0;
public ImageIcon[] icons;
public stone(int col,int row)
{
this.col=col;
this.row=row;
init();

this.addMouseListener(this);
}

public void init()
{
  icons=new ImageIcon[8];
  for(int i=0;i<8;i++)
  {
  icons[i]=new ImageIcon("C:\\Users\\zhao\\Desktop\\java\\掃雷"+"\\"+(i+1)+".jpg");
  }
setBounds(100,100,20,20);
setFont(new Font("楷體",Font.BOLD,3));
setForeground(Color.BLACK);
}
public void mouseClicked(MouseEvent e) 
{
// TODO 鼠標右鍵點擊後插和取消國旗
if( (e.getModifiers() & InputEvent.BUTTON3_MASK) != 0)
{
ImageIcon icon1=new ImageIcon("C:\\Users\\zhao\\Desktop\\java\\掃雷\\國旗.jpg");
if(count%2==0)
{
setIcon(icon1);
mark=true;
}

else
{
setIcon(null);
mark=false;

}

count++;
}

// TODO 鼠標左鍵點擊
else if( (e.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
{
if(danger)
{
//TODO
ImageIcon icon1=new ImageIcon("C:\\Users\\zhao\\Desktop\\java\\掃雷\\雷.jpg");

setIcon(icon1);
}
else
{
setIcon(icons[sum]);

ready=true;
}
}

}



public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}


}


界面類

import java.awt.Container;


import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;




public class panel 
{
private JFrame jfrmMain;
private Container con;
private JPanel p1;
private JPanel p2;
private stone[][] btn;
private JButton btnface;
private JButton jtxtgrade;
public JButton jtxttime;
final int max=20;
private int indexcol;
private int indexrow;
private ImageIcon[] icon;
public boolean goon=true;
public panel()
{
init();
Test();
record();
btn[indexcol][indexrow].setIcon(icon[btn[indexcol][indexrow].sum]);
new listenner();
new  time();
new leiofsum();
}
//TODO
public void dealAction()
{
p1.addMouseListener
(
new MouseListener()
{



public void mouseClicked(MouseEvent e) 
{
if( (e.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
{
JOptionPane.showMessageDialog(null, "dsf");
}

}



public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}

}
);
}
//TODO 統計各個方格周圍的雷的數目
public void record()
{
int count;
int i,j;
for(i=0;i<max;i++)
for(j=0;j<max;j++)
{
count=0;
if(!btn[i][j].danger)
{
if(i>0&&i<max-1&&j>0&&j<max-1)
{
int m;
int n;
for(m=i-1,n=j-1;n<j+2;n++)
{
if(btn[m][n].danger)
{
count++;
}
}
if(btn[i][j-1].danger)
{
count++;
}
if(btn[i][j+1].danger)
{
count++;
}
for(m=i+1,n=j-1;n<j+2;n++)
{
if(btn[m][n].danger)
{
count++;
}
}
}
else if(i==0&&j==0)
{


if(btn[i][j+1].danger)
{
count++;
}
if(btn[i+1][j+1].danger)
{
count++;
}
if(btn[i+1][j].danger)
{
count++;
}
}
else if(i==0&&j==max-1)
{


if(btn[i][j-1].danger)
{
count++;
}
if(btn[i+1][j-1].danger)
{
count++;
}
if(btn[i+1][j].danger)
{
count++;
}
}
else if(i==0&&j<max-1&&j>0)
{
int m=j;
if(btn[i][m].danger)
{
count++;
}

if(btn[i][m-1].danger)
{
count++;
}
if(btn[i][m+1].danger)
{
count++;
}

}
else if(i==max-1&&j==0)
{
if(btn[i-1][j].danger)
{
count++;
}
if(btn[i-1][j+1].danger)
{
count++;
}
if(btn[i][j+1].danger)
{
count++;
}
}
else if(i==max-1&&j==max-1)
{
if(btn[i-1][j].danger)
{
count++;
}
if(btn[i-1][j-1].danger)
{
count++;
}
if(btn[i][j-1].danger)
{
count++;
}
}
else if(i==max-1&&j>0&&j<max-1)
{
int m=j;
if(btn[i][m].danger)
{
count++;
}

if(btn[i][m-1].danger)
{
count++;
}
if(btn[i][m+1].danger)
{
count++;
}
}
else if(j==0&&i>0&&i<max-1)
{
int m=1;
if(btn[m][j].danger)
{
count++;
}

if(btn[m+1][j].danger)
{
count++;
}
if(btn[m-1][j].danger)
{
count++;
}
}
else if(j==max-1&&i>0&&i<max-1)
{
int m=1;
if(btn[m][j].danger)
{
count++;
}

if(btn[m+1][j].danger)
{
count++;
}
if(btn[m-1][j].danger)
{
count++;
}
}
}
btn[i][j].sum=count-1;
}
}
//TODO 查詢是否已經點擊第一次
public void Test()
{
int i,j;
boolean goon=true;
while(goon)
{
for(i=0;i<max;i++)
if(goon)
for(j=0;j<max;j++)
{
if(btn[i][j].ready)
{
indexcol=i;
indexrow=j;
product();
goon=false;
break;
}
}
}


}
//TODO 產生雷
public void product()
{
int col,row;
for(int i=0;i<100;i++)
{
col=(int) Math.floor(Math.random()*max);
row=(int) Math.floor(Math.random()*max);
if(btn[col][row].danger)
{
i--;
}
else
{
if(col==indexcol&&row==indexrow)
{
i--;
}
else
{
btn[col][row].danger=true;
}
}


}
}
   public void init()
   {
  int i,j;
  
  btn=new stone[max][max];
  for( i=0;i<max;i++)
  for(j=0;j<max;j++)
      btn[i][j]=new stone(i,j);
  jfrmMain=new JFrame("掃雷");
  jfrmMain.setSize(500, 580);
  jfrmMain.setResizable(false);
  con=jfrmMain.getContentPane();
  con.setLayout(null);
  jfrmMain.setLocationRelativeTo(null);
  btnface=new JButton("笑臉");
  btnface.setFont(new Font("楷體",Font.PLAIN,5));
  btnface.setBounds(200, 0, 50, 50);
  
  jtxtgrade=new JButton("99");
  jtxtgrade.setEnabled(false);
  jtxtgrade.setBounds(0, 0, 100, 50);
  jtxtgrade.setFont(new Font("楷體",Font.PLAIN,24));
  
  jtxttime=new JButton("0");
  jtxttime.setFont(new Font("楷體",Font.PLAIN,24));
  jtxttime.setEnabled(false);
  jtxttime.setBounds(400, 0,100, 50);
   
  icon=new ImageIcon[8];
  for(i=0;i<8;i++)
  {
  icon[i]=new ImageIcon("C:\\Users\\zhao\\Desktop\\java\\掃雷"+"\\"+(i+1)+".jpg");
  }
   
  p2=new JPanel();
  p2.setBounds(0, 0, 500,50);
  con.add(jtxtgrade);
  con.add(btnface);
  con.add(jtxttime);
  
  
  p1=new JPanel(new GridLayout(20,20,0,0));
  p1.setBounds(0, 50, 500,500);
  for( i=0;i<max;i++)
  for(j=0;j<max;j++)
  p1.add(btn[i][j]);
  con.add(p1);
  con.add(p2);
  jfrmMain.setVisible(true);
  
   }
   public class leiofsum extends Thread
   {
  public leiofsum()
  {
  this.start();
  }
  public void run()
  {
  int i,j;
  int sums=0;
  while(goon)
  {
  sums=0;
  for(i=0;i<max;i++)
  {
  if(goon)
  for(j=0;j<max;j++)
  {
  String str=String.valueOf(btn[i][j].getIcon());
  if(str.equals("C:\\Users\\zhao\\Desktop\\java\\掃雷\\國旗.jpg"))
  {
  //TODO
  sums++;

  
  }
  }
  }
   jtxtgrade.setText(""+(99-sums)); jtxtgrade.setText(""+(99-sums));
  }
  }
   }
   public class time extends Thread
   {
  public int times=0;
  public time()
  {
  this.start();
  }
  public void run()
  {
  while(goon)
  {
  //TODO
  jtxttime.setText(""+(++times));
  try 
  {
sleep(1000);
  } catch (InterruptedException e) 
  {
// TODO 自動生成的 catch 塊
e.printStackTrace();
}
  }
  }
   }
   public class listenner extends Thread
   {
 
  public listenner()
  {
  this.start();
  }
  public void run()
  {
  int i,j;
  while(goon)
  {
  for(i=0;i<max;i++)
  {
  if(goon)
  for(j=0;j<max;j++)
  {
  String str=String.valueOf(btn[i][j].getIcon());
  if(str.equals("C:\\Users\\zhao\\Desktop\\java\\掃雷\\雷.jpg"))
  {
  int m,n;
  for(m=0;m<max;m++)
  {
  for(n=0;n<max;n++)
  {
  if(btn[m][n].danger)
  {
  ImageIcon icon1=new ImageIcon("C:\\Users\\zhao\\Desktop\\java\\掃雷\\雷.jpg");
  btn[m][n].setIcon(icon1);
  
  } 
  }
  }
  JOptionPane.showMessageDialog(null, "你踩到雷了!");
  goon=false;
  break;
  }
  }
  }
  }
  }
   }
public static void main(String[] args) 
{
new panel();


}


}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章