Java编写的扫雷小程序.docx
- 文档编号:29476722
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:26
- 大小:97.81KB
Java编写的扫雷小程序.docx
《Java编写的扫雷小程序.docx》由会员分享,可在线阅读,更多相关《Java编写的扫雷小程序.docx(26页珍藏版)》请在冰豆网上搜索。
Java编写的扫雷小程序
整个程序使用了4个类:
Game用于启动程序,界面的布置,各种行列的算法。
ExtendButton继承了Jbutton用于新建button的各种属性
ShowNum监听到某个button后,计算出此button周围有几个雷,不同的雷对应不通的图片,类得到button上应加载的图片地址
ViewReSet此类用于新建一个窗口,用户输入自己想要的行、列、雷数,然后用新的行列雷数new一个新的Game
biaose
dise1
dise2
dise3
dise4
dise5
dise6
dise7
dise8
dise
lei
biaoji
/****************************************************************
运行类创建游戏主窗体
*/
packagecom.dhl.saolei;
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Container;
importjava.awt.Dimension;
importjava.awt.Font;
importjava.awt.GridLayout;
importjava.awt.Toolkit;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.InputEvent;
importjava.awt.event.KeyEvent;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JToolBar;
importjavax.swing.KeyStroke;
importjavax.swing.Timer;
publicclassGameextendsJFrameimplementsActionListener{
privateContainermyContainer;
privateGridLayoutmyLayout;
privateJPanelmyPanelMain;
privateJPanelmyPanel;
privateJToolBarmyTool;
privateJLabeltime;
privateJLabellabelTime;
privateJLabelbombNum;
privateJLabellabelBombNum;
privateJMenuBarmenuBar;
privateJMenumenuE,menuH;
privateJMenuItemmenuItemCZ,menuItemSZ;
privateintnumBomb,countTime,leaveBomb,numEnd;
privateintmyRows,myColumns;
privateintxis,yis;
privateTimertimer;
privateExtendButton[]myButton=null;
//初始化窗体
privatevoidInitView(){
//菜单初始化
this.menuBar=newJMenuBar();
this.menuE=newJMenu("菜单(E)");
this.menuH=newJMenu("帮助(H)");
this.menuItemCZ=newJMenuItem("重置");
this.menuItemCZ.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
this.menuItemCZ.addActionListener(this);
this.menuE.add(this.menuItemCZ);
this.menuItemSZ=newJMenuItem("设置");
this.menuItemCZ.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
this.menuItemSZ.addActionListener(this);
this.menuE.add(this.menuItemSZ);
this.menuBar.add(this.menuE);
this.menuBar.add(this.menuH);
setJMenuBar(this.menuBar);
//时间信息初始化
this.myTool=newJToolBar();
this.myTool.setLayout(newGridLayout(1,4));
this.myTool.setFloatable(false);
BorderLayoutborderLayout=newBorderLayout();
this.myPanelMain=newJPanel(borderLayout);
this.labelTime=newJLabel("时间:
");
this.time=newJLabel();
this.time.setForeground(Color.RED);
this.time.setFont(newFont("font",Font.PLAIN,20));
this.labelBombNum=newJLabel("雷数:
");
this.bombNum=newJLabel();
this.bombNum.setText(String.valueOf(this.numBomb));
this.bombNum.setForeground(Color.RED);
this.bombNum.setFont(newFont("font",Font.PLAIN,20));
this.myTool.add(this.labelTime);
this.myTool.add(this.time);
this.myTool.add(this.labelBombNum);
this.myTool.add(this.bombNum);
this.myPanelMain.add(this.myTool,borderLayout.NORTH);
}
//初始化myButton
privatevoidInitButton(){
BorderLayoutborderLayout=newBorderLayout();
this.leaveBomb=this.numBomb;
this.numEnd=(this.myRows*this.myColumns)-this.leaveBomb;
this.myContainer=this.getContentPane();
this.myLayout=newGridLayout(this.myRows,this.myColumns,1,1);
this.myPanel=newJPanel();
this.myPanel.setVisible(true);
this.myPanel.setLayout(myLayout);
this.myPanelMain.add(this.myPanel,borderLayout.CENTER);
this.myContainer.add(this.myPanelMain);
this.myButton=newExtendButton[(this.myRows*this.myColumns)];
for(inti=0;i<(this.myRows*this.myColumns);i++){
this.myButton[i]=newExtendButton();
this.myButton[i].SetPostion(i);
this.myButton[i].setIcon((newShowNum(10)).getImageIcon());
this.myButton[i].setButton_num(0);
this.myButton[i].SetVisited(false);
this.myButton[i].SetStatus(false);
//设置右键监听标记雷
this.myButton[i].addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEventevt){
if((evt.getModifiers()==InputEvent.BUTTON3_MASK)){
intn=((ExtendButton)evt.getSource()).getButton_num();
if(n==1){
if(!
((ExtendButton)evt.getSource()).GetVisited()){
((ExtendButton)evt.getSource()).setButton_num(0);
((ExtendButton)evt.getSource()).setIcon((newShowNum(10)).getImageIcon());
leaveBomb++;
bombNum.setText(String.valueOf(leaveBomb));
}
}else{
if(!
((ExtendButton)evt.getSource()).GetVisited()){
((ExtendButton)evt.getSource()).setButton_num
(1);
((ExtendButton)evt.getSource()).setIcon((newShowNum(11)).getImageIcon());
leaveBomb--;
bombNum.setText(String.valueOf(leaveBomb));
}
}
}
}
});
this.myPanel.add(this.myButton[i]);
this.myButton[i].addActionListener(this);
}
System.gc();
this.SetBomb(this.numBomb);
show();
//时钟设置
intdelay=1000;
//创建一个监听事件
ActionListenerdrawClock=newActionListener(){
publicvoidactionPerformed(ActionEventevt){
countTime++;
time.setText(String.valueOf(countTime));
repaint();
}
};
//创建一个时间计数器,每一秒触发一次
this.timer=newTimer(delay,drawClock);
this.timer.start();
}
//重新初始化方法
privatevoidSetExtendButton(){
for(inti=0;i<(this.myRows*this.myColumns);i++){
this.myButton[i].SetVisited(false);
this.myButton[i].SetStatus(false);
this.myButton[i].setText(null);
this.myButton[i].setIcon((newShowNum(10)).getImageIcon());
}
this.SetBomb(numBomb);
this.countTime=0;
this.timer.start();
this.leaveBomb=numBomb;
this.bombNum.setText(String.valueOf(this.numBomb));
this.numEnd=(this.myRows*this.myColumns)-leaveBomb;
}
//布雷方法
privatevoidSetBomb(intcount){
intcounter=0;
inttempint;
while(counter!
=count){
tempint=(int)(Math.random()*(this.myRows*this.myColumns));
if(!
this.myButton[tempint].GetStatus()){
this.myButton[tempint].SetStatus(true);
counter++;
}
}
}
//显示雷得方法
privatevoidShowBomb(){
for(inti=0;i<(this.myRows*this.myColumns);i++){
if(this.myButton[i].GetStatus()){
this.myButton[i].setIcon((newShowNum(9)).getImageIcon());
}
}
}
//监听点击扫雷方法
privatevoidCheckButton(ExtendButtonTempButton){
if(TempButton.GetStatus()){
this.timer.stop();
JOptionPane.showMessageDialog(null,"YouFailed!
","Game",JOptionPane.INFORMATION_MESSAGE);
this.ShowBomb();
inti=JOptionPane.showConfirmDialog(null,"是否要继续?
","消息",JOptionPane.YES_NO_OPTION);
if(JOptionPane.YES_OPTION==i){
SetExtendButton();
}else{
this.dispose();
}
return;
}
int[]CircleNum=newint[8];
inttemp=0;
if(!
TempButton.GetVisited()){
CircleNum[0]=TempButton.GetPostion()-this.myColumns-1;
CircleNum[0]=(CircleNum[0]<0||(CircleNum[0]+1)%this.myColumns==0)?
-1:
CircleNum[0];
CircleNum[1]=TempButton.GetPostion()-this.myColumns;
CircleNum[1]=(CircleNum[1]<0)?
-1:
CircleNum[1];
CircleNum[2]=TempButton.GetPostion()-this.myColumns+1;
CircleNum[2]=(CircleNum[2]<0||CircleNum[2]%this.myColumns==0)?
-1:
CircleNum[2];
CircleNum[3]=TempButton.GetPostion()-1;
CircleNum[3]=((CircleNum[3]+1)%this.myColumns==0)?
-1:
CircleNum[3];
CircleNum[4]=TempButton.GetPostion()+1;
CircleNum[4]=(CircleNum[4]%this.myColumns==0)?
-1:
CircleNum[4];
CircleNum[5]=TempButton.GetPostion()+this.myColumns-1;
CircleNum[5]=(CircleNum[5]>(this.myRows*this.myColumns-1)||(CircleNum[5]+1)%this.myColumns==0)?
-1:
CircleNum[5];
CircleNum[6]=TempButton.GetPostion()+this.myColumns;
CircleNum[6]=(CircleNum[6]>(this.myRows*this.myColumns-1))?
-1:
CircleNum[6];
CircleNum[7]=TempButton.GetPostion()+this.myColumns+1;
CircleNum[7]=(CircleNum[7]>(this.myRows*this.myColumns-1)||CircleNum[7]%this.myColumns==0)?
-1:
CircleNum[7];
for(inti=0;i<8;i++){
if(CircleNum[i]!
=-1){
if(myButton[CircleNum[i]].GetStatus()&&!
myButton[CircleNum[i]].GetVisited()){
temp++;
}
}
}
//显示button图片过程
if(temp>0){
TempButton.SetVisited(true);
TempButton.setIcon((newShowNum(temp)).getImageIcon());
temp=0;
}elseif(temp==0){
TempButton.SetVisited(true);
TempButton.setIcon((newShowNum(0)).getImageIcon());
for(inti=0;i<8;i++){
if(CircleNum[i]!
=-1&&!
myButton[CircleNum[i]].GetVisited()){
CheckButton(myButton[CircleNum[i]]);
}
}
}
this.numEnd--;
if(this.numEnd==0){
this.timer.stop();
JOptionPane.showMessageDialog(this,"恭喜你!
","消息",JOptionPane.INFORMATION_MESSAGE);
ShowBomb();
}
}
}
//构造方法
publicGame(){
Dimensiondimension=Toolkit.getDefaultToolkit().getScreenSize();
intx=(int)((dimension.getWidth()-400)/2);
inty=(int)((dimension.getHeight()-500)/2);
this.xis=300;
this.yis=400;
this.setBounds(x,y,this.xis,this.yis);
this.setTitle("扫雷");
this.numBomb=10;
this.myRows=9;
this.myColumns=9;
this.InitView();
this.InitButton();
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
}
publicGame(introw,intcolumn,intnumbomb){
Dimensiondimension=Toolkit.getDefaultToolkit().getScreenSize();
int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 编写 扫雷 程序