知识共享很好玩的扫雷java源代码雷惊风.docx
- 文档编号:3173500
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:18
- 大小:20.38KB
知识共享很好玩的扫雷java源代码雷惊风.docx
《知识共享很好玩的扫雷java源代码雷惊风.docx》由会员分享,可在线阅读,更多相关《知识共享很好玩的扫雷java源代码雷惊风.docx(18页珍藏版)》请在冰点文库上搜索。
知识共享很好玩的扫雷java源代码雷惊风
很好玩的扫雷java源代码
1.Block.java文件
publicclassBlock{
Stringname;
intnumber;
booleanhaveMine=false;
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetName(){
returnname;
}
publicvoidsetNumber(intnumber){
this.number=number;
}
publicintgetNumber(){
returnnumber;
}
publicvoidsetMine(booleanhaveMine){
this.haveMine=haveMine;
}
publicbooleanblockHaveMine(){
returnthis.haveMine;
}
}
---------------------------------------------------------------------------------------------------------
2.LayMines.java文件
importjava.util.LinkedList;
publicclassLayMines{
publicvoidlayMine(Block[][]block,intmineCount){
introw=block.length;
intcolumn=block[0].length;
LinkedList
//先把二维数组表放入链表中去
for(inti=0;i for(intj=0;j list.add(block[i][j]); } } //在链表中随机"置雷" while(mineCount>0){ intrandomIndex=(int)(Math.random()*list.size()); Blockb=(Block)(list.get(randomIndex)); b.setName("雷"); b.setMine(true); list.remove(randomIndex); mineCount--; } //每个非雷的block设置其显示的雷数目 for(inti=0;i for(intj=0;j if(block[i][j].blockHaveMine()){} else{ intmineNumber=0; for(intk=Math.max(i-1,0);k<=Math.min(i+1,row-1);k++){ for(intt=Math.max(j-1,0);t<=Math.min(j+1,column-1);t++){ mineNumber++; } } block[i][j].setName(""+mineNumber); block[i][j].setNumber(mineNumber); } } } } } --------------------------------------------------------------------------------------------------------- 3.BlockView.java文件 importjava.awt.*;; publicclassBlockViewextendsPanel{ LabelblockName; ButtonblockCover; CardLayoutcard; BlockView(){ card=newCardLayout(); setLayout(card); blockName=newLabel(); blockCover=newButton(); add("cover",blockCover); add("name",blockName); } publicvoidsetName(Stringname){ blockName.setText(name); } publicStringgetName(){ returnblockName.getText(); } publicvoidseeBlockName(){ card.show(this,"name"); validate(); } publicvoidseeBlockCover(){ card.show(this,"cover"); validate(); } publicButtongetBlockCover(){ returnblockCover; } } --------------------------------------------------------------------------------------------------------- 4.MineFrame.java importjava.awt.*; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.awt.event.WindowAdapter; importjava.awt.event.WindowEvent; publicclassMineFrameextendsFrameimplementsActionListener{ ButtonreStart; Block[][]block; BlockView[][]blockView; LayMineslay; introw=10; intcolumn=12; intmineCount=22; intcolorSwith=0; PanelpCenter,pNorth; publicMineFrame(){ reStart=newButton("重新开始"); pCenter=newPanel(); pNorth=newPanel(); pNorth.setBackground(Color.cyan); block=newBlock[row][column]; for(inti=0;i for(intj=0;j block[i][j]=newBlock(); } } lay=newLayMines(); lay.layMine(block,mineCount); blockView=newBlockView[row][column]; pCenter.setLayout(newGridLayout(row,column)); for(inti=0;i for(intj=0;j blockView[i][j]=newBlockView(); blockView[i][j].setName(block[i][j].getName()); pCenter.add(blockView[i][j]); blockView[i][j].getBlockCover().addActionListener(this); } } reStart.addActionListener(this); pNorth.add(reStart); add(pNorth,BorderLayout.NORTH); add(pCenter,BorderLayout.CENTER); setSize(200,232); setLocation(100,100); setVisible(true); addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ System.exit(0); } }); validate(); } publicvoidactionPerformed(ActionEvente){ Buttonsource=(Button)e.getSource(); if(source! =reStart){ intm=-1,n=-1; for(inti=0;i for(intj=0;j if(source==blockView[i][j].getBlockCover()){ m=i; n=j; break; } } } if(block[m][n].blockHaveMine()){ for(inti=0;i for(intj=0;j blockView[i][j].getBlockCover().removeActionListener(this); if(block[i][j].blockHaveMine()){ blockView[i][j].seeBlockName(); } } } }else{ if(block[m][n].getNumber()>0){ blockView[m][n].seeBlockName(); }elseif(block[m][n].getNumber()==0){ for(intk=Math.max(m-1,0);k<=Math.min(m+1,row-1);k++){ for(intt=Math.max(n-1,0);t<=Math.min(n+1,column-1);t++){ blockView[k][t].seeBlockName(); } } } } if(source==reStart){ for(inti=0;i for(intj=0;j block[i][j].setMine(false); } } lay.layMine(block,mineCount); for(inti=0;i for(intj=0;j blockView[i][j].setName(block[i][j].getName()); blockView[i][j].seeBlockCover(); blockView[i][j].getBlockCover().addActionListener(this); } } } } } } --------------------------------------------------------------------------------------------------------- 5.测试文件 publicclassMineMain{ publicstaticvoidmain(String[]args){ newMineFrame(); } } /** *CreatedbyIntelliJIDEA. *User: Eastsun *Date: 2006-7-23 *Time: 17: 30: 16 *TochangethistemplateuseFile|Settings|FileTemplates. */ packagemine; importjava.util.*; importjavax.swing.*; importjava.awt.*; importjava.awt.event.*; importjavax.swing.border.*; import.*; classTimerimplementsRunnable{ privateThreadthread; privateJLabellabel; longstartTime; publicvoidstartTimer(){//开始计时 startTime=System.currentTimeMillis(); thread=newThread(this); thread.start(); } privatestaticStringformatStr(longn){ if(n<10)return"00"+n; elseif(n<100)return"0"+n; elseif(n<1000)returnString.valueOf(n); elsereturn"..."; } publicvoidstopTimer(){//停止计时 thread=null; } publicvoidrun(){ while(thread! =null){ longcurTime=System.currentTimeMillis(); label.setText(formatStr((curTime-startTime)/1000)); try{ thread.sleep(500); }catch(Exceptione){ } } } publicTimer(JLabellabel){ this.label=label; } } publicclassMineextendsJFrame{ privatestaticfinalintSTATUS_M=1,STATUS_O=2,STATUS_F=4; privatestaticfinalintBUTTON_HGAP=2,BUTTON_VGAP=2,BUTTON_WIDTH=30,BUTTON_HEIGHT=30; privatestaticfinalintEASY_LEVEL=0,NORMAL_LEVEL=1,HARD_LEVEL=2,DEFINE_LEVEL=3; privateIconnumIcon[]; privateIconmineIcon; privateIconsmileIcon,laughIcon,cryIcon; privateBlock[][]blocks=null; privateintheight,width,mine,level,mark,remainder; //mark用来计数: 打开的和标记的总数,当等于height*width时游戏获胜 ,remainder;剩余的雷 privateJPanelpanel=null,bar=null; privateJLabelleft,mid,right; privateTimertimer; privatebooleanflags=false; //是否已经开始游戏 publicMine(){ super("扫雷"); initSource(); setJMenuBar(getMenu()); setLevel(NORMAL_LEVEL); refresh(); setDefaultCloseOperation(EXIT_ON_CLOSE); setResizable(false); setVisible(true); } publicIcongetIcon(Stringfilename){ URLClassLoaderurlLoader=(URLClassLoader)this.getClass().getClassLoader(); URLurl=null; Imageimage=null; url=urlLoader.findResource(filename); image=Toolkit.getDefaultToolkit().getImage(url); MediaTrackermediatracker=newMediaTracker(this); try{ mediatracker.addImage(image,0); mediatracker.waitForID(0); } catch(InterruptedException_ex){ image=null; } if(mediatracker.isErrorID(0)){ image=null; } returnnewImageIcon(image); } privatevoidinitSource(){ numIcon=newIcon[9]; for(intn=0;n<=8;n++)numIcon[n]=getIcon("image/"+n+"x.jpg"); mineIcon=getIcon("image/mine.jpg"); smileIcon=getIcon("image/smile.gif"); laughIcon=getIcon("image/laugh.gif"); cryIcon=getIcon("image/cry.gif"); left=newJLabel(); mid=newJLabel(); right=newJLabel(); timer=newTimer(right); } privateJMenuBargetMenu(){ //设置菜单,只需在构造函数中调用一次 JMenuBarmenuBar=newJMenuBar(); JMenugameMenu=newJMenu("游戏"); menuBar.add(gameMenu); JMenuItemnewGame=newJMenuItem("开局"); gameMenu.add(newGame); newGame.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,ActionEvent.ALT_MASK)); newGame.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ refresh(); } }); gameMenu.addSeparator(); ButtonGrouplevelGroup=newButtonGroup(); JMenuItemeasyLevel=newJRadioButtonMenuItem("初级"); levelGroup.add(easyLevel); gameMenu.add(easyLevel); easyLevel.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1,ActionEvent.ALT_MASK)); easyLevel.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ setLevel(EASY_LEVEL); refresh(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 知识 共享 很好 扫雷 java 源代码 惊风