Java编写的扫雷小程序.docx
- 文档编号:11308207
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:22
- 大小:397.64KB
Java编写的扫雷小程序.docx
《Java编写的扫雷小程序.docx》由会员分享,可在线阅读,更多相关《Java编写的扫雷小程序.docx(22页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 编写 扫雷 程序