茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    JavaScript實現(xiàn)簡潔的俄羅斯方塊完整實例
    來源:易賢網(wǎng) 閱讀:1161 次 日期:2016-08-04 15:20:39
    溫馨提示:易賢網(wǎng)小編為您整理了“JavaScript實現(xiàn)簡潔的俄羅斯方塊完整實例”,方便廣大網(wǎng)友查閱!

    本文實例講述了JavaScript實現(xiàn)簡潔的俄羅斯方塊。分享給大家供大家參考,具體如下:

    完整實例代碼如下:

    代碼如下:

    <!DOCTYPE html>

    <html>

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>俄羅斯方塊</title>

    <style type="text/css">

     .c{margin:1px; width:19px; height:19px; background:red; position:absolute;}

     .d{margin:1px; width:19px; height:19px; background:gray; position:absolute;}

     .f{top:0px; left:0px; background:black; position:absolute;}

     .e{top:0px; background:#151515; position:absolute;}

     .g{width:100px; height:20px; color:white; position:absolute;}

    </style>

    <script type="text/javascript">

    var row = 18;

    var col = 10;

    var announcement = 6;

    var size = 20;

    var isOver = false;

    var shapes = ("0,1,1,1,2,1,3,1;1,0,1,1,1,2,2,2;2,0,2,1,2,2,1,2;0,1,1,1,1,2,2,2;1,2,2,2,2,1,3,1;1,1,2,1,1,2,2,2;0,2,1,2,1,1,2,2").split(";");

    var tetris;

    var container;

    function createElm(tag,css)

    {

     var elm = document.createElement(tag);

     elm.className = css;

     document.body.appendChild(elm);

     return elm;

    }

    function Tetris(css,x,y,shape)

    {

     // 創(chuàng)建4個div用來組合出各種方塊

     var myCss = css?css:"c";

     this.divs = [createElm("div",myCss),createElm("div",myCss),createElm("div",myCss),createElm("div",myCss)];

     if(!shape)

     {

      this.divs2 = [createElm("div",myCss),createElm("div",myCss),createElm("div",myCss),createElm("div",myCss)];

      this.score = createElm("div","g");

      this.score.style.top = 10*size+"px";

      this.score.style.left = (col- -1)*size+"px";

      this.score.innerHTML = "score:0";

     }

     this.container = null;

     this.refresh = function()

     {

      this.x = (typeof(x)!='undefined')?x:3;

      this.y = (typeof(y)!='undefined')?y:0;

      // 如果有傳參,優(yōu)先使用參數(shù)的,如果有預告,優(yōu)先使用預告,都沒有就自己生成

      if(shape)

       this.shape = shape;

      else if(this.shape2)

       this.shape = this.shape2;

      else

       this.shape = shape?shape:shapes[Math.floor((Math.random()*shapes.length-0.000000001))].split(",");

      this.shape2 = shapes[Math.floor((Math.random()*shapes.length-0.000000001))].split(",");

      if(this.container && !this.container.check(this.x,this.y,this.shape))

      {

       isOver = true;

       alert("游戲結束");

      }

      else

      {

       this.show();

       this.showScore();

       this.showAnnouncement();

      }

     }

     // 顯示方塊

     this.show = function()

     {

      for(var i in this.divs)

      {

       this.divs[i].style.top = (this.shape[i*2+1]- -this.y)*size+"px";

       this.divs[i].style.left = (this.shape[i*2]- -this.x)*size+"px";

      }

     }

     // 顯示預告

     this.showAnnouncement = function()

     {

      for(var i in this.divs2)

      {

       this.divs2[i].style.top = (this.shape2[i*2+1]- -1)*size+"px";

       this.divs2[i].style.left = (this.shape2[i*2]- -1- -col)*size+"px";

      }

     }

     // 顯示分數(shù)

     this.showScore = function()

     {

      if(this.container && this.score)

      {

       this.score.innerHTML = "score:" + this.container.score;

      }

     }

     // 水平移動方塊的位置

     this.hMove = function(step)

     {

      if(this.container.check(this.x- -step,this.y,this.shape))

      {

       this.x += step;

       this.show();

      }

     }

     // 垂直移動方塊位置

     this.vMove = function(step)

     {

      if(this.container.check(this.x,this.y- -step,this.shape))

      {

       this.y += step;

       this.show();

      }

      else

      {

       this.container.fixShape(this.x,this.y,this.shape);

       this.container.findFull();

       this.refresh();

      }

     }

     // 旋轉(zhuǎn)方塊

     this.rotate = function()

     {

      var newShape = [this.shape[1],3-this.shape[0],this.shape[3],3-this.shape[2],this.shape[5],3-this.shape[4],this.shape[7],3-this.shape[6]];

      if(this.container.check(this.x,this.y,newShape))

      {

       this.shape = newShape;

       this.show();

      }

     }

     this.refresh();

    }

    function Container()

    {

     this.init = function()

     {

      // 繪制方塊所在區(qū)域

      var bgDiv = createElm("div","f");

      bgDiv.style.width = size*col+"px";

      bgDiv.style.height = size*row+"px";

      // 繪制預告所在區(qū)域

      var bgDiv = createElm("div","e");

      bgDiv.style.left = size*col+"px";

      bgDiv.style.width = size*announcement+"px";

      bgDiv.style.height = size*row+"px";

      // 清空積分

      this.score = 0;

     }

     this.check = function(x,y,shape)

     {

      // 檢查邊界越界

      var flag = false;

      var leftmost=col;

      var rightmost=0;

      var undermost=0;

      for(var i=0;i<8;i+=2)

      {

       // 記錄最左邊水平坐標

       if(shape[i]<leftmost)

        leftmost = shape[i];

       // 記錄最右邊水平坐標

       if(shape[i]>rightmost)

        rightmost = shape[i];

       // 記錄最下邊垂直坐標

       if(shape[i+1]>undermost)

        undermost = shape[i+1];

       // 判斷是否碰撞

       if(this[(shape[i+1]- -y)*100- -(shape[i]- -x)])

        flag = true;

      }

      // 判斷是否到達極限高度

      for(var m=0;m<3;m++)

       for(var n=0;n<col;n++)

        if(this[m*100+n])

         flag = true;

      if((rightmost- -x+1)>col || (leftmost- -x)<0 || (undermost- -y+1)>row || flag)

       return false;

      return true;

     }

     // 用灰色方塊替換紅色方塊,并在容器中記錄灰色方塊的位置

     this.fixShape = function(x,y,shape)

     {

      var t = new Tetris("d",x,y,shape);

      for(var i=0;i<8;i+=2)

       this[(shape[i+1]- -y)*100- -(shape[i]- -x)] = t.divs[i/2];

     }

     // 遍歷整個容器,判斷是否可以消除

     this.findFull = function()

     {

      var s = 0;

      for(var m=0;m<row;m++)

      {

       var count = 0;

       for(var n=0;n<col;n++)

        if(this[m*100+n])

         count++;

       if(count==col)

       {

        s++;

        this.removeLine(m);

       }

      }

      this.score -= -this.calScore(s);

     }

     this.calScore = function(s)

     {

      if(s!=0)

       return s- -this.calScore(s-1)

      else

       return 0;

     }

     // 消除指定一行方塊

     this.removeLine = function(row)

     {

      // 移除一行方塊

      for(var n=0;n<col;n++)

       document.body.removeChild(this[row*100+n]);

      // 把所消除行上面所有的方塊下移一行

      for(var i=row;i>0;i--)

      {

       for(var j=0;j<col;j++)

       {

        this[i*100- -j] = this[(i-1)*100- -j]

        if(this[i*100- -j])

         this[i*100- -j].style.top = i*size + "px";

       }

      }

     }

    }

    function init()

    {

     container = new Container();

     container.init();

     tetris = new Tetris();

     tetris.container = container;

     document.onkeydown = function(e)

     {

      if(isOver) return;

      var e = window.event?window.event:e;

      switch(e.keyCode)

      {

       case 38: //up

        tetris.rotate();

        break;

       case 40: //down

        tetris.vMove(1);

        break;

       case 37: //left

        tetris.hMove(-1);

        break;

       case 39: //right

        tetris.hMove(1);

        break;

      }

     }

     setInterval("if(!isOver) tetris.vMove(1)",500);

    }

    </script>

    </head>

    <body onload="init()">

    </body>

    </html>

    希望本文所述對大家JavaScript程序設計有所幫助。

    更多信息請查看網(wǎng)絡編程
    易賢網(wǎng)手機網(wǎng)站地址:JavaScript實現(xiàn)簡潔的俄羅斯方塊完整實例

    2026上岸·考公考編培訓報班

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網(wǎng)