庞鹏翔吧 关注:1贴子:23
  • 11回复贴,共1

JavaScript写的俄罗斯方块

只看楼主收藏回复

近日发现JavaScript的强大,在网上转悠了一下,挡下此代码,JavaScript写的游戏,很有前景!
 
<HTML>
<HEAD>
<title>俄罗斯方块</title>
<style>
<!--
BODY
{
}
.MB
{
    BACKGROUND-COLOR: firebrick;
    CURSOR: default;
    HEIGHT: 22px;
    WIDTH: 22px
}
.SB
{
    BACKGROUND-COLOR: slategray;
    CURSOR: default;
    HEIGHT: 22px;
    WIDTH: 22px
}
.BK
{
    BACKGROUND-COLOR: white;
    CURSOR: default;
    HEIGHT: 22px;
    WIDTH: 22px
}
.GT
{
    BORDER-BOTTOM: deepskyblue thin solid;
    BORDER-LEFT: deepskyblue thin solid;
    BORDER-RIGHT: deepskyblue thin solid;
    BORDER-TOP: deepskyblue thin solid;
    CURSOR: default
}
-->
</style>
<script>
<!--
var BX=new Array(4);
var BY=new Array(4);
var PX=new Array(4);
var PY=new Array(4);
var mTimer
var firstView
function beginGame()
{
    gameState=0;
    speed=1;
    outTime=1100-speed*100;
    score=0;
    if(gameState!=0)return;
    firstView=true;
    for(j=0;j<16;j++)
        for(i=0;i<10;i++)
            setClass(i,j,"BK");
    randBar();
    gameState=1;
    Play.disabled=true;
    window.clearInterval(mTimer);
    mTimer=window.setInterval("moveBar()",outTime);
}
function keyControl()
{
    if(gameState!=1)return;
    switch(event.keyCode){
        case 37:{    //left
            for(i=0;i<4;i++)if(BX[i]==0)return;
            for(i=0;i<4;i++)if(getClass(BX[i]-1,BY[i])=="SB")return;
            for(i=0;i<4;i++)setClass(BX[i],BY[i],"BK");
            for(i=0;i<4;i++)BX[i]=BX[i]-1;



IP属地:广东1楼2009-11-26 08:53回复
                for(i=0;i<4;i++)setClass(BX[i],BY[i],"MB");
                break;}
            case 38:{    //up
                var preMBarX=new Array(4);
                var preMBarY=new Array(4);
                var cx=Math.round((BX[0]+BX[1]+BX[2]+BX[3])/4);
                var cy=Math.round((BY[0]+BY[1]+BY[2]+BY[3])/4);
                for(i=0;i<4;i++){
                    preMBarX[i]=Math.round(cx-cy+BY[i]);
                    preMBarY[i]=Math.round(cx+cy-BX[i]);
                    if(preMBarX[i]<0 || preMBarX[i]>9 || preMBarY[i]<0 || preMBarY[i]>15)return;
                    if(getClass(preMBarX[i],preMBarY[i])=="SB")return;
                }
                for(i=0;i<4;i++)setClass(BX[i],BY[i],"BK");
                for(i=0;i<4;i++){
                    BX[i]=preMBarX[i];
                    BY[i]=preMBarY[i];
                }
                for(i=0;i<4;i++)setClass(BX[i],BY[i],"MB");
                break;}
            case 39:{    //right
                for(i=0;i<4;i++)if(BX[i]==9)return;
                for(i=0;i<4;i++)if(getClass(BX[i]+1,BY[i])=="SB")return;
                for(i=0;i<4;i++)setClass(BX[i],BY[i],"BK");
                for(i=0;i<4;i++)BX[i]=BX[i]+1;
                for(i=0;i<4;i++)setClass(BX[i],BY[i],"MB");
    


    IP属地:广东2楼2009-11-26 08:53
    回复
                  break;}
              case 40:{    //down
                  moveBar();
                  break;}
          }
      }
      function delLine()
      {
          for(i=0;i<4;i++)setClass(BX[i],BY[i],"SB");
          for(j=0;j<16;j++){
              dLine=true;
              for(i=0;i<9;i++){
                  if(getClass(i,j)!="SB"){
                      dLine=false;
                      break;
                  }
              }
              if(dLine){
                  score=score+100;
                  for(k=j;k>0;k--)
                      for(l=0;l<10;l++)
                          setClass(l,k,getClass(l,k-1));
                  for(l=0;l<10;l++)setClass(l,0,"BK");
              }
          }
          randBar();
          speed=Math.floor(score/3000)+1;
          outTime=1100-speed*100;
          scoreBar.innerHTML="Score : " + score;
          speedBar.innerHTML="Speed : " + speed;
          window.clearInterval(mTimer);
          mTimer=window.setInterval("moveBar()",outTime);
      }
      function getClass(x,y){return GameBar.children[y].children[x].className;}
      function setClass(x,y,cName){GameBar.children[y].children[x].className=cName;}
      function moveBar()
      {
          if(gameState!=1)return;
          dropLine=true;
          for(i=0;i<4;i++)if(BY[i]==15)dropLine=false;
          if(dropLine)for(i=0;i<4;i++)if(getClass(BX[i],BY[i]+1)=="SB")dropLine=false;
          if(!dropLine){
              window.clearInterval(mTimer);
              delLine();
      


      IP属地:广东3楼2009-11-26 08:53
      回复
                return;
            }
            for(i=0;i<4;i++)setClass(BX[i],BY[i],"BK");
            for(i=0;i<4;i++)BY[i]=BY[i]+1;
            for(i=0;i<4;i++)setClass(BX[i],BY[i],"MB");
        }
        function pauseGame()
        {
            if(gameState==0)return;
            if(event.srcElement.value=="Pause"){
                gameState=2;
                event.srcElement.value="Continue";
                window.clearInterval(mTimer);
            }
            else{
                gameState=1;
                event.srcElement.value="Pause";
                mTimer=window.setInterval("moveBar()",outTime);
            }
        }
        function fMnu(){return false;}
        document.oncontextmenu=fMnu;
        function preview()
        {
            if(previewBar.style.display!="none")
                previewBar.style.display="none";
            else
                previewBar.style.display="block";
        }
        function replayGame()
        {
            if(gameState!=1)return;
            if(!confirm("真的要重新开始?"))return;
            gameState=0;
            window.clearInterval(mTimer);
            beginGame();
        }
        function randBar()
        {
            randNum=Math.floor(Math.random()*20)+1;
            if(!firstView)
                for(i=0;i<4;i++){
                    BX[i]=PX[i];
                    BY[i]=PY[i];
                }
            switch(randNum){
                case 1:{
                    PX[0]=4;
                    PY[0]=0;
                    PX[1]=4;
                    PY[1]=1;
                    PX[2]=5;
                    PY[2]=1;
                    PX[3]=6;
                    PY[3]=1;
        


        IP属地:广东4楼2009-11-26 08:53
        回复
                      break;}
                  case 2:{
                      PX[0]=4;
                      PY[0]=0;
                      PX[1]=5;
                      PY[1]=0;
                      PX[2]=4;
                      PY[2]=1;
                      PX[3]=4;
                      PY[3]=2;
                      break;}
                  case 3:{
                      PX[0]=4;
                      PY[0]=0;
                      PX[1]=5;
                      PY[1]=0;
                      PX[2]=6;
                      PY[2]=0;
                      PX[3]=6;
                      PY[3]=1;
                      break;}
                  case 4:{
                      PX[0]=5;
                      PY[0]=0;
                      PX[1]=5;
                      PY[1]=1;
                      PX[2]=5;
                      PY[2]=2;
                      PX[3]=4;
                      PY[3]=2;
                      break;}
                  case 5:{
                      PX[0]=6;
                      PY[0]=0;
                      PX[1]=6;
                      PY[1]=1;
                      PX[2]=4;
                      PY[2]=1;
          


          IP属地:广东5楼2009-11-26 08:53
          回复
                        PX[3]=5;
                        PY[3]=1;
                        break;}
                    case 6:{
                        PX[0]=4;
                        PY[0]=0;
                        PX[1]=4;
                        PY[1]=1;
                        PX[2]=4;
                        PY[2]=2;
                        PX[3]=5;
                        PY[3]=2;
                        break;}
                    case 7:{
                        PX[0]=4;
                        PY[0]=0;
                        PX[1]=4;
                        PY[1]=1;
                        PX[2]=5;
                        PY[2]=0;
                        PX[3]=6;
                        PY[3]=0;
                        break;}
                    case 8:{
                        PX[0]=4;
                        PY[0]=0;
                        PX[1]=5;
                        PY[1]=0;
                        PX[2]=5;
                        PY[2]=1;
                        PX[3]=5;
                        PY[3]=2;
                        break;}
                    case 9:{
                        PX[0]=4;
                        PY[0]=0;
                        PX[1]=5;
                        PY[1]=0;
            


            IP属地:广东6楼2009-11-26 08:53
            回复
                          PX[2]=5;
                          PY[2]=1;
                          PX[3]=6;
                          PY[3]=1;
                          break;}
                      case 10:{
                          PX[0]=5;
                          PY[0]=0;
                          PX[1]=5;
                          PY[1]=1;
                          PX[2]=4;
                          PY[2]=1;
                          PX[3]=4;
                          PY[3]=2;
                          break;}
                      case 11:{
                          PX[0]=4;
                          PY[0]=1;
                          PX[1]=5;
                          PY[1]=1;
                          PX[2]=5;
                          PY[2]=0;
                          PX[3]=6;
                          PY[3]=0;
                          break;}
                      case 12:{
                          PX[0]=4;
                          PY[0]=0;
                          PX[1]=4;
                          PY[1]=1;
                          PX[2]=5;
                          PY[2]=1;
                          PX[3]=5;
                          PY[3]=2;
                          break;}
                      case 13:{
                          PX[0]=4;
                          PY[0]=0;
              


              IP属地:广东7楼2009-11-26 08:53
              回复
                            PX[1]=5;
                            PY[1]=0;
                            PX[2]=6;
                            PY[2]=0;
                            PX[3]=5;
                            PY[3]=1;
                            break;}
                        case 14:{
                            PX[0]=4;
                            PY[0]=0;
                            PX[1]=4;
                            PY[1]=1;
                            PX[2]=4;
                            PY[2]=2;
                            PX[3]=5;
                            PY[3]=1;
                            break;}
                        case 15:{
                            PX[0]=5;
                            PY[0]=0;
                            PX[1]=5;
                            PY[1]=1;
                            PX[2]=4;
                            PY[2]=1;
                            PX[3]=6;
                            PY[3]=1;
                            break;}
                        case 16:{
                            PX[0]=5;
                            PY[0]=0;
                            PX[1]=5;
                            PY[1]=1;
                            PX[2]=5;
                            PY[2]=2;
                            PX[3]=4;
                            PY[3]=1;
                            break;}
                


                IP属地:广东8楼2009-11-26 08:53
                回复
                          case 17:{
                              PX[0]=4;
                              PY[0]=0;
                              PX[1]=5;
                              PY[1]=0;
                              PX[2]=4;
                              PY[2]=1;
                              PX[3]=5;
                              PY[3]=1;
                              break;}
                          case 18:{
                              PX[0]=4;
                              PY[0]=0;
                              PX[1]=5;
                              PY[1]=0;
                              PX[2]=4;
                              PY[2]=1;
                              PX[3]=5;
                              PY[3]=1;
                              break;}
                          case 19:{
                              PX[0]=3;
                              PY[0]=0;
                              PX[1]=4;
                              PY[1]=0;
                              PX[2]=5;
                              PY[2]=0;
                              PX[3]=6;
                              PY[3]=0;
                              break;}
                          case 20:{
                              PX[0]=5;
                              PY[0]=0;
                              PX[1]=5;
                              PY[1]=1;
                              PX[2]=5;
                              PY[2]=2;
                              PX[3]=5;
                  


                  IP属地:广东9楼2009-11-26 08:53
                  回复
                                PY[3]=3;
                                break;}
                        }
                        if(firstView){
                            firstView=false;
                            randBar();
                            return;
                        }
                        for(i=0;i<4;i++){
                            for(j=0;j<4;j++){
                                previewBar.children[j].children[i].className="BK";
                            }
                        }
                        for(i=0;i<4;i++)previewBar.children[PY[i]].children[PX[i]-3].className="MB";
                        for(i=0;i<4;i++){
                            if(getClass(BX[i],BY[i])!="BK"){
                                alert("Game Over!");
                                window.clearInterval(mTimer);
                                Play.disabled=false;
                                gameState=0;
                                return;
                            }
                        }
                        for(i=0;i<4;i++)setClass(BX[i],BY[i],"MB");
                    }
                    // -->
                    </script>
                    </HEAD>
                    <BODY bgcolor=Black onkeydown="return keyControl();">
                    <center>
                    <P><b><font color=red>俄罗斯方块</font></b></P>
                    <table cellspacing=0 cellpadding=0 class=gt border=1 bordercolor="LightYellow " style="position:absolute;left:220px;top:53px;">
                    <Tbody id=GameBar>
                    <tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> 
                    </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK>
                    </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> 
                    


                    IP属地:广东10楼2009-11-26 08:53
                    回复
                      </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> 
                      </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> 
                      </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> 
                      


                      IP属地:广东11楼2009-11-26 08:53
                      回复
                        </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr>
                        </tbody>
                        </table>
                        </center>
                        <table style="position:absolute;top=100px;left:50px">
                            <tr><td id=scoreBar style="color:white">Score : 0</td></tr>
                            <tr><td id=speedBar style="color:white">Speed : 1</td></tr>
                        </table>
                        <table cellspacing=0 cellpadding=0 class=gt border=1 bordercolor="LightYellow " style="position:absolute;left:570px;top:53px;">
                        <Tbody id=previewBar>
                        <tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr><tr><td class=BK> </td><td class=BK> </td><td class=BK> </td><td class=BK> </td></tr>
                        </tbody>
                        </table>
                        <table style="position:absolute;left:570px;top:180px;">
                            <tr><td><input type=button id="Play" style="width:100px" value="Play" onclick="return beginGame();"></td></tr>
                            <tr><td><input type=button id="Pause" style="width:100px" value="Pause" onclick="return pauseGame();"></td></tr>
                            <tr><td><input type=button id="Preview" style="width:100px" value="Preview" onclick="preview();"></td></tr>
                            <tr><td><input type=button id="Replay" style="width:100px" value="Replay" onclick="replayGame();"></td></tr>
                            <tr><td><input type=button id="Quit" style="width:100px" value="Quit" onclick="window.close();"></td></tr>
                        </table>
                        </BODY>
                        </HTML>
                        <script>
                        function unSel()
                        {
                            document.execCommand("Unselect");
                            window.setTimeout("unSel()",10);
                        }
                        unSel();
                        window.onunload=rel;
                        function rel()
                        {
                            location.reload();
                            return false;
                        }
                        </script> 
                        


                        IP属地:广东12楼2009-11-26 08:53
                        回复