仿windows经典扫雷小代码

仿windows经典扫雷小代码,第1张

概述仿windows经典扫雷代码

下面是内存溢出 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经典扫雷小代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1091136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存