站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        分享一個用h5制作的網(wǎng)頁版掃雷游戲?qū)嵗a

        閑的沒事 寫個掃雷, 算法 不太好·····湊合,還真的不錯,可以看一下

        <!DOCTYPE html>  <html>  <head>  <meta charset="utf-8">  <title>掃雷</title>  </head>  <body>      <script>          function Set(r,c,hard){              var data = new Array();              for(var i=0;i<r;i++){data[i]=new Array(c);}              for (var i = 0; i < r*c; i++)              {                  var ran=Math.floor(Math.random()*100);                  data[Math.floor(i / c)][i % c] =ran<hard?1:0;                  }              return data;          }                    function GetNewData(data,r,c){              var newdata = new Array();              for(var i=0;i<r;i++){newdata[i]=new Array(c);}              for (var i = 0; i < r * c; i++)              {                  if (data[Math.floor(i / c)][i % c] == 1)                  {                      newdata[Math.floor(i / c)][i % c] = 9;                  }                  else                  {                      var d = 0;                      for (var j = 0; j < 9; j++)                      {                          if (Math.floor(i / c) + (Math.floor(j / 3) - 1)>=0 && i % c + (j % 3 - 1) >= 0 &&                              Math.floor(i / c) + (Math.floor(j / 3) - 1) < r && i % c + (j % 3 - 1) < c &&                              data[Math.floor(i / c) + Math.floor(j / 3 - 1)][i % c + (j % 3 - 1)] == 1)                          {                              d++;                          }                      }                      newdata[Math.floor(i / c)][i % c] = d;                  }              }              return newdata;          }          function GetRegion(rr,cc,data,list){              if (data[rr][cc]!=0)              {                  return;              }              else              {                  for (var j = 0; j < 9; j++)                  {                      if (rr+ (Math.floor(j / 3) - 1)>=0 && cc + (j % 3 - 1) >= 0 &&                          rr + (Math.floor(j / 3) - 1) < r && cc + (j % 3 - 1) < c &&                          data[rr+ Math.floor(j / 3 - 1)][cc+ (j % 3 - 1)] == 0)                      {                          var pr=rr+ Math.floor(j / 3 - 1);                          var pc=cc+ (j % 3 - 1);                          console.log(pr,pc);                          if(contains(list,{r:pr,c:pc}))continue;                          list.push({r:pr,c:pc});                          GetRegion(pr,pc,data,list);                      }                  }                  return;               }          }      </script>      <!--<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=22654542&auto=1&height=66"></iframe>-->      <h2>掃雷游戲</h2>      <!--<audio src="http://music.163.com/style/swf/widget.swf?sid=26569168" controls="controls"></audio>-->      <p>難度:          <select NAME="Difficulty" onchange="load(this.value)" id="Difficulty">          <option value></option>          <option value="1" selected="selected">初9*9</option>          <option value="2" >中16*16</option>          <option value="3">高30*16</option>          </select>          <button onclick="timedCount()">開始</button>          <button onclick="stop()">停止</button>          <button onclick="reload()">重置</button>          <button onclick="Drawall()">顯示所有</button>          <input type="text" readonly="readonly" id="time">      </p>      <p>          <canvas id="myCanvas" oncontextmenu=self.event.returnvalue=false width="180" height="180" style="border:1px solid #000000;background:lightgray;"></canvas>      </p>      <script>          var r=9;//99 1616 3016          var c=9;          var difficulty=15          var tempdata;          var minedata;          var signdata = new Array();          var checkSigndata=new Array          document.write("<br/>");          var Difficulty=document.getElementById("Difficulty");          Difficulty.options[1].selected = true;                      var canvas=document.getElementById("myCanvas");          canvas.addEventListener("mousedown", doMouseDown, false);           canvas.oncontextmenu=function(){return false;}          load(1);          redraw();          //test();                    //Drawall();          var t;          var tick=0;          function timedCount(){              document.getElementById('time').value=tick              tick=tick+1              t=setTimeout("timedCount()",1000)          }          function stop(){              if(t!=null)clearTimeout(t);              tick=0;          }          function loadsigndata(){              for(var i=0;i<r;i++){signdata[i]=new Array(c);}              for(var i=0;i<r;i++){checkSigndata[i]=new Array(c);    }              for (var i = 0; i < r*c; i++)              {                  switch(minedata[Math.floor(i / c)][i % c])                  {                      case 9:checkSigndata[Math.floor(i / c)][i % c]=2;                          break;                      case 0:checkSigndata[Math.floor(i / c)][i % c]=3;                          break;                      default:checkSigndata[Math.floor(i / c)][i % c]=1;                          break;                  }              }                        }          function test(){              for (var i = 0; i < r*c; i++)              {                  document.write(minedata[Math.floor(i / c)][i % c]+"&nbsp");                  if(i%c==c-1)document.write("<br/>");              }          }          function load(v){              switch(parseInt(v))              {                  case 1:                      r=9;                      c=9;                      break;                  case 2:                      r=16;                      c=16;                      break;                  case 3:                      r=30;                      c=16;                      break;              }              reload();              //Drawall();          }          function reload(){              redraw();              tempdata=Set(r,c,difficulty);              minedata=GetNewData(tempdata,r,c);              loadsigndata();          }          function redraw(){              canvas.setAttribute('width',c*30);              canvas.setAttribute('height',r*30);              var ctx=canvas.getContext("2d");              for(var i=0;i<r+1;i++)              {                  ctx.moveTo(0,i*30);                  ctx.lineTo(c*30,i*30);                  ctx.stroke();                      }              for(var i=0;i<c+1;i++)              {                  ctx.moveTo(i*30,0);                  ctx.lineTo(i*30,r*30);                  ctx.stroke();                      }                        }          function contains(arr, obj) {                var i = arr.length;                while (i--) {                    if (arr[i].r==obj.r&&arr[i].c==obj.c) {                        return true;                    }                }                return false;            }          var plist=new Array();          function doMouseDown(event){              var btnNum = event.button;              var x = event.pageX;              var y = event.pageY;              var loc = getPointOnCanvas(canvas, x, y);              var xx=Math.floor(loc.x/30);              var yy=Math.floor(loc.y/30);              if(signdata[yy]!=null&&signdata[yy][xx]!=null&&(signdata[yy][xx]==3||signdata[yy][xx]==1))return;              if (btnNum==0)              {                  drawCell(xx,yy);                  plist.splice(0,plist.length);                  GetRegion(yy,xx,minedata,plist);                  for(var l=0;l<plist.length;l++){drawCell(plist[l].c,plist[l].r);}              }              else if(btnNum==2)              {                  drawCellr(xx,yy);              }              if(check())alert("成功:"+tick);          }          function check(){              for (var i = 0; i < r*c; i++)              {                  if(checkSigndata[Math.floor(i / c)][i % c]!=signdata[Math.floor(i / c)][i % c])                  {                      return false;                  }              }              return true;          }          function drawCell(xx,yy){              var ctx = canvas.getContext("2d");              ctx.textAlign = "start";              ctx.fillStyle = "red";              ctx.font = "30px Arial";              if(signdata[yy][xx]!=null && signdata[yy][xx]==    2)              {                  ctx.fillStyle = "lightgray";                  ctx.fillRect(xx*30,yy*30,29,29);              }              ctx.fillStyle = "red";              if(minedata[yy][xx]==9){                  //ctx.fillText("×",xx*30,(yy+1)*30);                  alert("失敗");                  Drawall();                  //signdata[yy][xx]=2;              }              else if(minedata[yy][xx]==0){                  //ctx.fillText("0",xx*30,(yy+1)*30);                  ctx.fillStyle = "green";                  ctx.fillRect(xx*30,yy*30,29,29);                  signdata[yy][xx]=3;              }              else{                  ctx.fillText(minedata[yy][xx].toString(),xx*30,(yy+1)*30);                  signdata[yy][xx]=1;              }          }          function drawCellr(xx,yy){              var ctx = canvas.getContext("2d");              ctx.textAlign = "start";              ctx.fillStyle = "red";              ctx.font = "30px Arial";              if(signdata[yy][xx]==0||signdata[yy][xx]==null)              {                  ctx.fillText("√",xx*30,(yy+1)*30);                  signdata[yy][xx]=2;              }              else              {                  ctx.fillStyle = "lightgray";                  ctx.fillRect(xx*30,yy*30,29,29);                  //ctx.fillText("√",xx*30,(yy+1)*30);                  signdata[yy][xx]=0;              }              ctx.stroke();                        }          function getPointOnCanvas(canvas, x, y) {                var bbox = canvas.getBoundingClientRect();                return { x: x - bbox.left * (canvas.width  / bbox.width),                        y: y - bbox.top  * (canvas.height / bbox.height)                        };            }           function Drawall(){              redraw();              var ctx = canvas.getContext("2d");              ctx.textAlign = "start";              ctx.fillStyle = "red";              ctx.font = "30px Arial";              for(var i=0;i<r*c;i++)              {                  var x=i%c*30;                  var y=(Math.floor(i/c)+1)*30;                  if(minedata[Math.floor(i/c)][i%c]==9){ctx.fillText("×",x,y);}                  else if(minedata[Math.floor(i/c)][i%c]==0){ctx.fillText("0",x,y);}                  else{ctx.fillText(minedata[Math.floor(i/c)][i%c].toString(),x,y);}                            }          }      </script>  </body>    </html>

        【相關(guān)推薦】

        1. 免費h5在線視頻教程

        2. HTML5 完整版手冊

        3. php.cn原創(chuàng)html5視頻教程

        贊(1)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 国产亚洲婷婷香蕉久久精品| 97国产视频精品| 青草青草久热精品视频在线网站| 欧美成人精品高清在线播放 | 日韩人妻精品无码一区二区三区 | 国产精品免费福利久久| 午夜国产精品无套| 99爱在线视频这里只有精品| 91精品成人免费国产| 无码国产精品一区二区免费vr| 精品亚洲欧美无人区乱码| 在线精品国产一区二区| 国产亚洲精品观看91在线| 国产在线精品无码二区 | 97精品一区二区视频在线观看| 亚洲综合国产精品第一页| 精品久久人人做人人爽综合| 影音先锋国产精品国语对白| 91麻豆精品国产| 国产精品9999久久久久| 欧美精品欧美人与动人物牲交| 亚洲综合精品网站| 亚洲第一永久AV网站久久精品男人的天堂AV | 国产精品久久久久AV福利动漫| 欧美精品v欧洲精品| 亚洲精品国产首次亮相| 97精品伊人久久大香线蕉app| 亚洲AV无码精品色午夜果冻不卡 | 一本一本久久aa综合精品| 国产成人精品无码一区二区| 亚洲av无码国产精品色午夜字幕| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 国产精品户外野外| 成人精品一区二区三区免费看| 中文字幕乱码中文乱码51精品| 欧美成人精品欧美一级乱黄码| 久久精品国产亚洲7777| 国产a∨精品一区二区三区不卡| 精品无码无人网站免费视频 | 国产成人无码精品一区二区三区| 精品一区二区三区自拍图片区|