是老早之前写的,今天整理系统文件发现了这个扫雷,也是小惊喜,小看了下还挺有趣哈!
直接上代码,具体在代码中注释。
主要看点有两块,一个是从n个整数随机产生不重复的m个随机整数,m<n
另一个就是自动搜寻周边不是雷的区域,也就是点了一个不是雷有时会显现一大片。
<!DOCTYPE html> <html lang="en"> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=no" /> <title>扫雷</title> <style type="text/css"> *{ color: black; margin:0px; padding:0px; } html,body{ -webkit-tap-highlight-color: transparent; -webkit-touch-callout: none; -webkit-user-select: none; text-decoration: none; height: 100%; } .con div{ height: 40px; margin-left: 0.2%; width: 11%; display: inline-block; border: solid 1px #000; position: absolute; line-height: 50px; text-align: center; color:red; } .ti{ position: absolute; bottom: 12%; } </style> </head> <body> <div id="contain" class="con"></div> <div class="ti">已花时间:<span id="time">0</span>秒</div> <script type="text/javascript"> var leiRes=new Array(),nums=new Array(); var Lei=1,i,jk,G=81,res=1,clickNum=0,num=0; //随机产生区间内的随机数 function setRandomNum(min,max){ return Math.floor(Math.random()*(max-min+1)+min); } //搜寻周边8个点 function NotLeiNum(n){ var z=Math.floor(n/9),x=n%9,leiNum=0; var arr=new Array(); if(z-1>=0){ arr.push((z-1)*9+x); } if(z+1<9){ arr.push((z+1)*9+x); } if(x-1>=0){ arr.push(z*9+x-1); } if(x+1<9){ arr.push(z*9+x+1); } if(x-1>=0&&z-1>=0){ arr.push((z-1)*9+x-1); } if(x-1>=0&&z+1<9){ arr.push((z+1)*9+x-1); } if(x+1<9&&z-1>=0){ arr.push((z-1)*9+x+1); } if(x+1<9&&z+1<9){ arr.push((z+1)*9+x+1); } for(i=0;i<arr.length;i++){ if(leiRes[arr[i]]==1){ leiNum++; } } return leiNum; } //搜寻周边四个点 function NotLei(n){ var z=Math.floor(n/9),x=n%9,leiNum=0; var arr=new Array(); if(z-1>=0){ arr.push((z-1)*9+x); } if(z+1<9){ arr.push((z+1)*9+x); } if(x-1>=0){ arr.push(z*9+x-1); } if(x+1<9){ arr.push(z*9+x+1); } for(i=0;i<arr.length;i++){ if(leiRes[arr[i]]==1){ leiNum++; } } if(leiNum<1){ if(NotLeiNum(n)==0){ document.getElementById(n).innerHTML=0; document.getElementById(n).style.backgroundColor="#84EFFF"; document.getElementById(n).style.color="#000"; return 1; } } return 0; } //递归判断周边四个点 function judgeLei(n,dir){ var z=Math.floor(n/9),x=n%9,leiNum=0; var arr=new Array(); switch(dir){ case 1: if(z-1>=0&&leiRes[(z-1)*9+x]==0){ if(NotLei((z-1)*9+x)){ judgeLei((z-1)*9+x,1); } } case 2: if(z+1<9&&leiRes[(z+1)*9+x]==0){ if(NotLei((z+1)*9+x)){ judgeLei((z+1)*9+x,2); } } case 3: if(x-1>=0&&leiRes[z*9+x-1]==0){ if(NotLei(z*9+x-1)){ judgeLei(z*9+x-1,3); } } case 4: if(x+1<9&&leiRes[z*9+x+1]==0){ if(NotLei(z*9+x+1)){ judgeLei(z*9+x+1,4); } } } } //初始化 for(i=0;i<G;i++){ nums[i]=i; j=Math.floor(i/9),k=i%9; leiRes[i]=0; var ele=document.createElement("div"); ele.setAttribute("id",i); document.getElementById("contain").appendChild(ele); document.getElementById(i).setAttribute("style","top:"+j*40+"px;"+"left:"+k*11+"%"); } //n个整数获取m个不相等整数 //思路为例存有0-100的数组,首先随机获取一个整数,然后这个整数作为下标与数组下标0的数交换位置,进行下一步从数组下标1-100中在获取数 for(i=0;i<Lei;i++){ r=setRandomNum(i,G-1); var temp=nums[i]; nums[i]=nums[r]; nums[r]=temp; leiRes[nums[i]]=1; } //主游戏环节,为所有节点绑定事件 var sl=document.getElementById("contain").childNodes; for(i=0;i<sl.length;i++){ sl[i].onclick=function(){ for(j=0;j<Lei;j++){ if(this.id==nums[j]){ res=0; document.getElementById(this.id).innerHTML="雷"; alert('游戏失败'); if(confirm("确认重新开始游戏?")){ window.location.reload(); } } } if(res==1){ var n = NotLeiNum(this.id); document.getElementById(this.id).innerHTML=n; document.getElementById(this.id).style.backgroundColor="#84EFFF"; document.getElementById(this.id).style.color="#000"; if(n==0){ judgeLei(this.id,1); /*judgeLei(this.id,2); judgeLei(this.id,3); judgeLei(this.id,4);*/ } } seledNum=document.getElementById("contain").childNodes; for(i=0;i<seledNum.length;i++){ if(seledNum[i].innerHTML==""){ num++; } } if(num==Lei){ alert("你成功啦"); }else{ num=0; } } } //计时器 var n=0; function addtime(){ n++; document.getElementById("time").innerHTML=n; } setInterval("addtime()",1000); </script> </body> </html>
版权声明:本文为原创文章,转载请注明出处和作者,不得用于商业用途,请遵守
CC BY-NC-SA 4.0协议。
赞赏一下