下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。
内存溢出小编现在分享给大家,也给大家做个参考。
<HTML><head><Meta http-equiv="Content-Language" content="zh-cn"><Meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"><Title>扫雷-JavaScript mine sweeper</Title><style type="text/CSS">table{table-LAYOUT: fixed;cursor:pointer}td{wIDth: 20px; height: 20px; Font-size: 12px; Font-family: Verdana;Font-weight:bold; text-align:center;background:#CECECE;}td.normal,.Flag{border-left:2px solID #F5F5F5; border-right:2px outset #F5F5F5; border-top:2px solID #F5F5F5; border-bottom:2px outset #F5F5F5; Font-weight:bold}.mine,.Boom,.M0,.M1,.M2,.M3,.M4,.M5,.M6,.M7,.M8{background:#C5C5C5;border-right:1px solID #B4B4B4; border-bottom:1px solID #B4B4B4;}td.mine{background: url(http://sandBox.runjs.cn/uploads/rs/202/xyovf5xj/mine.gif) no-repeat center}td.Boom{background:#F00 url(http://sandBox.runjs.cn/uploads/rs/202/xyovf5xj/mine.gif) no-repeat center}td.Flag,td.ErrFlag{background-image: url(http://sandBox.runjs.cn/uploads/rs/202/xyovf5xj/flag.gif);background-repeat: no-repeat; background-position: center;}td.ErrFlag{background:#0F0}td.M1 {color: #00f}td.M2 {color: #008000}td.M3 {color: #f00}td.M4 {color: #000080}td.M5 {color: #800000}td.M6 {color: #008080}td.M7 {color: #000}td.M8 {color: #808080}</style><script>var $=function(ID){return document.getElementByID(ID)},Mousebutton=leftMouse=0,//作为双键单击的计数,mouseup事件置0,mousedown事件+1,当Mousebutton=2说明双键同时单击;鼠标左键是否按下,当鼠标左键按下时为1,松开为0 Flagimg=new Image(),Happyimg=new Image(),mineimg=new Image(),Sadimg=new Image(),Successimg=new Image(),Whichbutton=function(e){ e=e||window.event; var b=getos(); if(b!=2){ //非FF switch(e.button){ case 2: return 0; case 0: return b==1?0:1; //b==1,IE default: return 1; } }else{ //FF return e.which==3?0:1; } },Omine={ MaxX:9,MaxY:9,//最大的坐标 mineCount:10,//定义雷的个数,可改 FlagCount:0,//已经标记的旗子的数量 OpenedCount:0,//已经打开的地区的数量 MaxOpenCount:0,//应该要打开的最大地区数量 //当OpenedCount=MaxOpenCount&&FlagCount=mineCount的时候,判断游戏成功结束 mine:[],GameOver:false,//true代表游戏失败结束 Success:false,//true代表游戏成功结束 aClear:[],//临时开雷的数组 //刷新网页的时候初始化 fInit:function(){ var T=this,MaxX=T.MaxX,MaxY=T.MaxY,nX,nY=MaxY,mineCount=T.mineCount,AStr=['<table bordercolor="#000000" border="0" cellpadding="0" cellspacing="0" height="'+20*MaxY+'px" wIDth="'+20*MaxX+'px" >'],i=0,TAr,Tmine=T.mine; T.MaxOpenCount=MaxX*MaxY-mineCount; while(nY--){ AStr[++i]='<tr>'; TAr=Tmine[nY]=[]; nX=MaxX; while(nX--){ AStr[++i]='<td onmousedown="Omine.fMouseDown('+nX+','+nY+',event);" onmouseup="Omine.fMouseUp('+nX+',event);" onmouSEOver="Omine.fbuttonMouSEOver('+nX+','+nY+')" onmouSEOut="Omine.fbuttonMouSEOut('+nX+','+nY+')" ID="img'+nX+'_'+nY+'"> </td>'; TAr[nX]={ mine:0,//0表示没有雷,1表示有雷 State:0,//0表示未开启,1表示左键开启,2表示右键标记 mineCount:0//周围有几个雷 } } AStr[++i]='</tr>'; } AStr[++i]='</table>'; $('dMap').INNERHTML=T.InitStr=AStr.join(''); $('txtFlagCount').value=mineCount; T.fInitmine(); $('btnRefreshMap').src='http://sandBox.runjs.cn/uploads/rs/202/xyovf5xj/happy.gif'; T.GameOver=T.Success=false; T.OpenedCount=T.FlagCount=T.aClear.lenght=0; },//为了方便循环赋值,给表格数组赋值的时候是XY倒过来循环的,所以调用的时候要倒回去 //比如要获得该格子是否有雷,用Omine.fgetmine(x,y).mine; fgetmine:function(X,Y){return this.mine[Y][X]},//仅当按重新开始的按钮,不初始化大表格字符 fRefreshMap:function(){ var T=this; $('dMap').INNERHTML=T.InitStr; T.fresetOmine();//必须先重置Omine,再重置99个雷 T.fInitmine(); T.GameOver=T.Success=false; $('btnRefreshMap').src='http://sandBox.runjs.cn/uploads/rs/202/xyovf5xj/happy.gif'; $('txtFlagCount').value=T.mineCount; T.OpenedCount=T.FlagCount=T.aClear.lenght=0; },//重置Omine.mine数组 fresetOmine:function(){ var T=this,X,Y=MaxY,M,mine=T.mine,TAr; while(Y--){ X=MaxX; TAr=mine[Y]; while(X--)(M=TAr[X]).mine=M.State=M.mineCount=0; } },//初始化雷的数组 fInitmine:function(){ var T=this,a,fgetmine=T.fgetmine,aold=[],x,y=MaxY,n=0,l=T.mineCount,xRand; //一个随机数字 while(y--){ x=MaxX; while(x--)aold[n++]=[x,y]; } while(l--){ a=aold[xRand=Math.floor(Math.random()*(n-1))]; T.fgetmine(a[0],a[1]).mine=1; aold.splice(xRand,1); --n; } },//鼠标移动到某格子的时候 fbuttonMouSEOver:function(X,Y){ var T=this; switch(Mousebutton){ case 2://双键按下的状态 var arr=T.fgetAround(X,Y),i=arr.length,TAr; while(i--)T.fbuttonDown((TAr=arr[i])[0],TAr[1]); case 1: leftMouse==1&&T.fbuttonDown(X,Y); //左键是按下的 } },//鼠标移出某格子的时候 fbuttonMouSEOut:function(X,TAr; while(i--)T.fbuttonUp((TAr=arr[i])[0],TAr[1]); case 1: leftMouse==1&&T.fbuttonUp(X,//鼠标按下时没被开启的格子呈现被按下 fbuttonDown:function(X,Y){ var srcEle=$('img'+X+'_'+Y); srcEle.classname=='normal'&&(srcEle.classname='M0'); },//让没被开启并且已经呈现被按下的格子回复normal fbuttonUp:function(X,Y){ var srcEle=$('img'+X+'_'+Y); srcEle.classname=='M0'&&!this.fgetmine(X,Y).State&&(srcEle.classname='normal'); },//获取8个方向的坐标 fgetAround:function(X,Y){ var TX,TY,i=8,MX=this.MaxX-1,MY=this.MaxY-1,Arr=[[-1,0],[-1,-1],[0,[1,1],1]],newArr=[],TAr; while(i--){ TX=X+(TAr=Arr[i])[0]; TY=Y+TAr[1]; !(TX<0||TX>MX||TY<0||TY>MY)&&newArr.push([TX,TY]); } return newArr; },//鼠标在格子按下 fMouseDown:function(X,Y,evt){ var T=this; if(T.GameOver){ alert('游戏失败,再接再厉!'); return; } if(T.Success){ alert('恭喜游戏成功!再来一局吧?'); return; } var srcEle=$('img'+X+'_'+Y),ObXY=T.fgetmine(X,arr,i,TAr; ++Mousebutton; evt=evt||window.event; switch(Mousebutton){ case 2: arr=T.fgetAround(X,Y);i=arr.length; while(i--)T.fbuttonDown((TAr=arr[i])[0],TAr[1]); break; case 1: if(Whichbutton(evt)){ leftMouse=1; T.fbuttonDown(X,Y); }else{ switch(ObXY.State){ case 0: ObXY.State=2; srcEle.classname='Flag'; --$('txtFlagCount').value; ++T.FlagCount; break; case 2: ObXY.State=0; srcEle.classname='normal'; ++$('txtFlagCount').value; --T.FlagCount; } } } },//鼠标在格子d起 fMouseUp:function(X,evt){ var T=this; evt=evt||window.event; var srcEle=$('img'+X+'_'+Y),TAr; switch(Mousebutton){ case 2: //MouseDown为两个键都单击按下,任意一个键d起都判断为双键d起 leftMouse=0; //鼠标d起,把呈现被按下状态的格子恢复 arr=T.fgetAround(X,Y);i=arr.length; while(i--)T.fbuttonUp((TAr=arr[i])[0],TAr[1]); !ObXY.State&&T.fbuttonUp(X,Y); ObXY.State==1&&ObXY.mineCount&&T.fOpenFlagmine(X,Y); break; case 1: //当MouseDown为一个键单击时,MouseUp才判断为一个键d起 if(Whichbutton(evt)){ //只有在State=0才起作用,跟是否有雷没关系 leftMouse=0; if(ObXY.State){break;} ObXY.mine?( //触雷,结束该局 T.fFail(),srcEle.classname='Boom' ):( ObXY.State=1,//压栈之前就要设置为已经开启 T.aClear.push([X,Y]),T.fClearmine() ) } } Mousebutton=0; if(T.OpenedCount==T.MaxOpenCount&&T.FlagCount==T.mineCount){ T.fSuccess(); alert('恭喜游戏成功!再来一局吧?'); return; } //当剩余未开启的格子数=剩余的旗子数,自动完成 T.MaxOpenCount+T.mineCount-T.OpenedCount-T.FlagCount==$('txtFlagCount').value&&( T.fSuccess(),T.fautoFlag(),alert('恭喜游戏成功!再来一局吧?') ) },//自动填充未开启的地区的雷 fautoFlag:function(){ var T=this,nY=T.MaxY,TAr; while(nY--){ nX=MaxX; TAr=mine[nY]; while(nX--)!TAr[nX].State&&($('img'+nX+'_'+nY).classname='Flag'); } $('txtFlagCount').value=0; },//递归开雷 fClearmine:function(){ var T=this; if(T.aClear.length==0){return} ++T.OpenedCount; var aXY=T.aClear.pop(),X=aXY[0],Y=aXY[1],TX,aTmpClear=[],//一个临时数组 srcEle=$('img'+X+'_'+Y),ObXY,ObTXTY,countmine=0,//获取周围雷的个数 //从正左开始的8个方向 arr=T.fgetAround(X,TAr; while(i--){ //TX,TY获得本格周围的坐标 (ObTXTY=T.fgetmine(TX=(TAr=arr[i])[0],TY=TAr[1])).mine==1&&++countmine; !ObTXTY.State&&aTmpClear.push([TX,TY]); } ObXY=T.fgetmine(X,Y); ObXY.mineCount=countmine; srcEle.classname='M'+countmine; if(!countmine){ Array.prototype.push.apply(T.aClear,aTmpClear); i=aTmpClear.length; while(i--)T.fgetmine((TAr=aTmpClear[i])[0],TAr[1]).State=1; }else{ getos()==2? srcEle.textContent=countmine :srcEle.innerText=countmine } T.fClearmine(); },//获得双键辅助开启 fOpenFlagmine:function(X,Y){ var T=this,FlagCount=0,FlagErr=false,arr=T.fgetAround(X,TY获得本格周围的坐标 ObTXTY=T.fgetmine(TX=(TAr=arr[i])[0],TY=TAr[1]); switch(ObTXTY.State){ case 0: //未开启未标记 !ObTXTY.mine&&aTmpClear.push([TX,TY]); //没雷也没旗子的时候加入到被辅助开启的数组} break; case 2: //标记了旗子 ++FlagCount; //只要标记了旗子,无论对错,都记录标记数+1 !ObTXTY.mine&&(FlagErr=true); //没有雷但是标记了旗子,标记错误 } } if(FlagCount<T.fgetmine(X,Y).mineCount||aTmpClear.length==0)return; //旗子比实际雷少,无论标记对错,不开启 //没有可以提供开启的空格 if(FlagErr){ //有错误则进行结束游戏处理 T.fFail(); return; } Array.prototype.push.apply(T.aClear,aTmpClear); i=aTmpClear.length; while(i--)T.fgetmine((TAr=aTmpClear[i])[0],TAr[1]).State=1; T.fClearmine(); },//显示所有的雷 fShowmine:function(){ var T=this,X=0,Y=T.MaxY,TArX; while(Y--){ X=MaxX; TAr=mine[Y]; while(X--){ TArX=TAr[X]; switch(TArX.mine){ case 0: TArX.State==2&&($('img'+X+'_'+Y).classname='ErrFlag'); break; case 1: $('img'+X+'_'+Y).classname='mine'; } } } },//游戏成功结束 fSuccess:function(){ this.Success=true; $('btnRefreshMap').src='http://sandBox.runjs.cn/uploads/rs/202/xyovf5xj/success.gif'; },//游戏失败结束 fFail:function(){ this.GameOver=true; $('btnRefreshMap').src='http://sandBox.runjs.cn/uploads/rs/202/xyovf5xj/sad.gif'; this.fShowmine(); }},//换地图ChangeMap=function(Map){ var O=Omine; switch(Map){ case 1: O.MaxX=O.MaxY=9; O.mineCount=10; break; case 2: O.MaxX=O.MaxY=16; O.mineCount=40; break; case 3: O.MaxX=30; O.MaxY=16; O.mineCount=99; } O.fInit();},getos=function(){ if(navigator.userAgent.indexOf("MSIE")>0)return 1; if(isfirefox=navigator.userAgent.indexOf("firefox")>0)return 2; if(isSafari=navigator.userAgent.indexOf("Safari")>0)return 3; if(isCamino=navigator.userAgent.indexOf("Camino")>0)return 4; if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0)return 5; return 0;};Flagimg.src='http://sandBox.runjs.cn/uploads/rs/202/xyovf5xj/flag.gif';Happyimg.src='http://sandBox.runjs.cn/uploads/rs/202/xyovf5xj/happy.gif';mineimg.src='http://sandBox.runjs.cn/uploads/rs/202/xyovf5xj/mine.gif';Sadimg.src='http://sandBox.runjs.cn/uploads/rs/202/xyovf5xj/sad.gif';Successimg.src='http://sandBox.runjs.cn/uploads/rs/202/xyovf5xj/success.gif';</script></head><body topmargin="0" oncontextmenu="return false" ondragstart="return false" onselectstart="return false" onload="Omine.fInit()" bgcolor="#808080"><center><div ID="dtop" align="center" ><table cellpadding="0" cellspacing="0" wIDth="380" height="44"> <tr> <td > <input type="text" ID="txtFlagCount" size="20" value=""></td> <td > <input onclick="Omine.fRefreshMap()" type="image" ID="btnRefreshMap" src="happy.gif"><input onclick="Omine.fShowmine();" type="button" name="B3" value="显雷"></td> <td > <input type="radio" value="V1" checked name="R1" ID="R1" onclick="ChangeMap(1)">初级<input type="radio" value="V1" name="R1" ID="R2" onclick="ChangeMap(2)">中级<input type="radio" value="V1" name="R1" ID="R3" onclick="ChangeMap(3)">高级</td> </tr></table></div><div ID="dMap" align="center"></div></center></body></HTML>
以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
总结以上是内存溢出为你收集整理的仿windows经典扫雷小代码全部内容,希望文章能够帮你解决仿windows经典扫雷小代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)