Java编写的扫雷小程序.docx

上传人:b****8 文档编号:11308207 上传时间:2023-02-26 格式:DOCX 页数:22 大小:397.64KB
下载 相关 举报
Java编写的扫雷小程序.docx_第1页
第1页 / 共22页
Java编写的扫雷小程序.docx_第2页
第2页 / 共22页
Java编写的扫雷小程序.docx_第3页
第3页 / 共22页
Java编写的扫雷小程序.docx_第4页
第4页 / 共22页
Java编写的扫雷小程序.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

Java编写的扫雷小程序.docx

《Java编写的扫雷小程序.docx》由会员分享,可在线阅读,更多相关《Java编写的扫雷小程序.docx(22页珍藏版)》请在冰豆网上搜索。

Java编写的扫雷小程序.docx

Java编写的扫雷小程序

new一个新的

整个程序使用了4个类

Game用于启动程序,界面的布置,各种行列的算法。

ExtendButton继承了Jbutton用于新建button的各种属性

ShowNum监听到某个button后,计算出此button周围有几个雷,不同的雷对应不通的图片,类得到button上应加载的图片地址

ViewReSet此类用于新建一个窗口,用户输入自己想要的行、列、雷数,然后用新的行列雷数

运行类创建游戏主窗体

*/

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.JMenultem;

importjavax.swing.JOptionPane;importjavax.swing.JPanel;

importjavax.swing.JToolBar;

importjavax.swing.KeyStroke;

importjavax.swing.Timer;

publicclassGameextendsJFrame

privateContainermyContainer

privateGridLayoutmyLayout;

implements

ActionListener{

privateprivateprivateprivateprivateprivateprivateprivateprivateprivate

JPanelmyPanelMain;JPanelmyPanel;

JToolBarmyTool;JLabeltime;

JLabellabelTime;

JLabelbombNum;

JLabellabelBombNumJMenuBarmenuBar;

JMenumenuE,menuH;JMenuItemmenuItemCZ

menuItemSZ

private

intnumBomb,

countTime,

leaveBomb

private

intmyRows,

myColumns;

private

intxis,yis

J

private

Timertimer;

private

ExtendButton[]

myButton

=null;

//初始化窗体

privatevoidInitView(){

numEnd;

//菜单初始化

this

.menuBar

=newJMenuBar();

this

.menuE=

newJMenu(

"菜单(E)"

this

.menuH=

newJMenu(

"帮助(H)"

this.menuItemCZ=newJMenuItem(

);

);

"重置");

 

ent.VK_C,InputEvent.

CTRL_MASK));

this

.menuItemCZ

.addActionListener(

this

this

.menuE.add(

this.menuItemCZ);

1

this

.menuItemSZ

=newJMenuItem(

"设置

this.menuItemCZ.setAccelerator(KeyStroke.

);

);

this.menuItemCZ.setAccelerator(KeyStroke.ent.VK_S,InputEvent.CTRL_MASK));

this.menuItemSZ.addActionListener(

this.menuE.add(this.menuItemSZ);this.menuBar.add(this.menuE);this.menuBar.add(this.menuH);setJMenuBar(this.menuBar);

//时间信息初始化

this.myTool=newJToolBar();

this.myTool.setLayout(this.myTool.setFloatable(BorderLayoutborderLayout=newGridLayout(1,4));false);

newBorderLayout();

this.myPanelMain=newJPanel(borderLayout);

this.labelTime=newJLabel("时间:

");

this.time=newJLabel();

this.time.setForeground(Color.RED);

PLAIN,20));

this.time.setFont(newFont("font",Font.

this.labelBombNum=newJLabel("雷数:

");this.bombNum=newJLabel();

//初始化myButton

privatevoidInitButton(){

BorderLayoutborderLayout=newBorderLayout();this.leaveBomb=this.numBomb;

this.numEnd=(this.myRows*this.myColumns)-

this.leaveBomb

.myContainer=this.getContentPane();

.myLayout=newGridLayout(this.myRows,this

1,1);

ShowNum(10)).getImageIcon());

this.myButtonthis.myButtonthis.myButton//设置右键监听标记雷

[i].setButton_num(0);

[i].SetVisited(false);[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()).setlcon((new

ShowNum(10)).getImageIcon());

leaveBomb++;

bombNum.setText(String.valueOf(leaveBomb));

}

}else{

if(!

((ExtendButton)evt.getSource()).GetVisited()){

((ExtendButton)evt.getSource()).setButton_num

(1);

((ExtendButton)evt.getSource()).setlcon((new

ShowNum(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.repaint();

valueOf(countTime));

}

};

//创建一个时间计数器,每一秒触发一次

this.timer=newTimer(delay,drawClock);this.timer.start();

}

//重新初始化方法

(int

i=0;i<(

this.

myRows*this

this.

myButton

[i].SetVisited(

false)

this.

myButton

[i].SetStatus(

false);

this.

myButton

[i].setText(

null);

this.

myButton

[i].setIcon((

new

.myColumns);i++){

privatevoidSetExtendButton(){for

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

privateintint

voidSetBomb(intcount){counter=0;tempint;

ShowNum(10)).getImageIcon());

}

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<(if(this.myButtonthis.myButtonShowNum(9)).getImageIcon());

this.myRows*this[i].GetStatus()){[i].setIcon((new

.myColumns);i++){

 

}

//监听点击扫雷方法

是否要继续?

"

privatevoidCheckButton(ExtendButtonTempButton){if(TempButton.GetStatus()){this.timer.stop();JOptionPane.

"Game",JOptionPane.

this.ShowBomb();

II

inti=JOptionPane.showConfirmDialog(null,"消息",JOptionPane.YES_NO_OPTION);

if(JOptionPane.YES_OPTION==i){SetExtendButton();

}else{

this.dispose();

}

return;

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)?

-1CircleNum[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((new

ShowNum(temp)).getImageIcon());

temp=0;

}elseif(temp==0){

TempButton.SetVisited(true);

TempButton.setIcon((new

ShowNum(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();

intx=(int)((dimension.getWidth()-400)/2);

inty=(int)((dimension.getHeight()-500)/2);

this.xis=310*column/9;

this.yis=300*row/9+100;

this.setBounds(x,y,this.xis,this.yis);

this.setTitle("扫雷");

this.myRows=row;

this.myColumns=column;

this.numBomb=numbomb;

this.InitView();

this.InitButton();

this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);

}一一

//监听方法

publicvoidactionPerformed(ActionEvente){

//对(this.myRows*this.myColumns)个button的监听进行处理

for(inti=0;i<(this.myRows*this.myColumns);i++){

if(e.getSource()==myButton[i]){

CheckButton((ExtendButton)e.getSource());

}

}

//重置按钮监听

if(e.getSource()==menultemCZ){

SetExtendButton();

//设置按钮进行监听

}elseif(e.getSource()==menultemSZ){

newViewReSet(this.myRows,this.myColumns,

this.numBomb);

this.dispose。

}

}

publicstaticvoidmain(String[]args){newGame();

}

}

/*****************************************************

创建一个button的实体类

*/packagecom.dhl.saolei;

importjavax.swing.JButton;

publicclassExtendButtonextendsJButton{

private

intButton_pos

J

private

intButton_num

J

private

boolean

Button

.Status

private

boolean

Button_

.Visited

public

intgetButton_num(){

returnButton_num

}

publicvoidsetButton_num(intbutton_num){

this.Button_num=button_num;

}

publicintSetPostion(intpos){

this.Button_pos=(pos>=0)?

pos:

0;

returnthis.Button_pos;

}_

publicintGetPostion(){returnthis.Button_pos;

 

}

/*************************************************************

******

设置button显示图片

*/

packagecom.dhl.saolei;

importjava.awt.Image;

importjavax.swing.lmageIcon;

publicclassShowNum{

privateintnum;

publicShowNum(intn){

this.num=n;

}

publicImageIcongetImageIcon(){

ImageIconimagelcon;

switch(num){

case0:

imageIcon二newImageIcon(

break;

case1:

imageIcon二newImageIcon(

break;

case2:

imageIcon二newImageIcon(

break;

case3:

imageIcon二newImageIcon(

break;

case4:

imageIcon二newImageIcon(

break;

case5:

imageIcon二newImageIcon(

break;

case6:

imageIcon二newImageIcon(

break;

case7:

imageIcon二new

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1