zoukankan      html  css  js  c++  java
  • 俄罗斯方块的代码(园子里找的)研究一下

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    </head>
    <script language=javascript> 
    //Author:Yice
    //
    2007-11-30
    //
    version:1.03
    var iMapX=20,iMapY=10;
    var iModelWidthLength =25;
    var arrMapCore;
    var arrMapCoreDraw;
    var arrAllModel = new Array(
    '
    0000111100000000',
    '
    0100010001000100',
    '
    0000111100000000',
    '
    0100010001000100',
    '
    0000011001100000',
    '
    0000011001100000',
    '
    0000011001100000',
    '
    0000011001100000',
    '
    0100111000000000',
    '
    0100011001000000',
    '
    0000111001000000',
    '
    0100110001000000',
    '
    0100010001100000',
    '
    0000111010000000',
    '
    0110001000100000',
    '
    0010111000000000',
    '
    0010001001100000',
    '
    1000111000000000',
    '
    0110010001000000',
    '
    1110001000000000',
    '
    0100011000100000',
    '
    0110110000000000',
    '
    0100011000100000',
    '
    0110110000000000',
    '
    0010011001000000',
    '
    1100011000000000',
    '
    0010011001000000',
    '
    1100011000000000');

    var aCurPoint = { x:0, y:3 };

    var iCurrentModel =0;
    var iPointAction =0;
    var iActionKey =39;

    var iNextPointAction =0;
    var iNextModel =0;

    var iScore =0;
    var objTime = null;
    var bIsGameOver = false;

    function InitMapCore()
    {
        arrMapCore 
    = new Array(iMapX);
        
    for (var x=0;x<arrMapCore.length;x++)
        {
            arrMapCore[x] 
    = new Array(iMapY);
            
    for(var y=0;y<arrMapCore[x].length;y++
                arrMapCore[x][y] 
    = 0;
        }
    }

    function CopaDateToDrawArray(arrFrom,arrTo)
    {
        arrTo 
    = new Array(arrFrom.length);
        
    for (var x=0;x<arrFrom.length;x++)
        {
            arrTo[x] 
    = new Array(arrFrom[x].length);
            
    for(var y=0;y<arrFrom[x].length;y++
                arrTo[x][y] 
    = arrFrom[x][y];
        }
        
    return arrTo;
    }

    function FormatModel(strModel)
    {
        
    var arrModel = new Array(4);
        
    for (var x = 0; x < 4; x++
        {
            arrModel[x] 
    = new Array(4);
            
    for (var y = 0; y < 4; y++) {
                arrModel[x][y] 
    = strModel.charAt(x*4+y)
            }
        }
        
    return arrModel;
    }

    function CheckCanMove(arrMapTemp,arrModel,aMoveToPoint)
    {
        
    if((aMoveToPoint.y == -4 || aMoveToPoint.y == arrMapTemp[0].length +3)
            
    || aMoveToPoint.x == arrMapTemp.length +3)
            
    return false;
            
        
    for (var x = aMoveToPoint.x; x < aMoveToPoint.x +4; x++
        {
            
    for (var y = aMoveToPoint.y; y < aMoveToPoint.y +4; y++)
            {
                
    if (x < 0 || y< 0 || x >= arrMapTemp.length || y>=arrMapTemp[0].length)
                {
                    
    if(arrModel[x - aMoveToPoint.x][y-aMoveToPoint.y] ==1)
                        
    return false;
                }
    else
                {            
                    
    if ((arrMapTemp[x][y] == 1&& arrModel[x - aMoveToPoint.x][y-aMoveToPoint.y] ==1)
                    {
                        
    return false;
                    }
                }            
            }
        }    
        
    return true;
    }

    function MoveTO(arrMapTemp,arrModel,aMoveToPoint)
    {            
        
    for (var x = aMoveToPoint.x; x < aMoveToPoint.x +4; x++
        {
            
    for (var y = aMoveToPoint.y; y < aMoveToPoint.y +4; y++)
            {
                
    if ((x < 0 || y< 0|| (x == arrMapTemp.length  +4 || y == arrMapTemp[0].length +4) )
                {
                    
    continue;
                }
                
                
    if(arrModel[x - aMoveToPoint.x][y-aMoveToPoint.y] ==1)        
                    arrMapTemp[x][y] 
    = arrModel[x - aMoveToPoint.x][y-aMoveToPoint.y];            
            }
        }
        
    return arrMapTemp;
    }

    function CleanLine(arrMapTemp)
    {
        
    var bCanClean = true;
        
    var iCleanLineCount =0;
        
    for(var x=0;x<arrMapTemp.length;x++)
        {
            bCanClean 
    = true;
            
    for(var y=0;y<arrMapTemp[x].length;y++)
            {
                
    if(arrMapTemp[x][y] == 0)
                {
                    bCanClean 
    = false;
                    
    break;
                }    
            }
            
    if(bCanClean)            
            {
                iCleanLineCount
    ++;
                
    for (var z=x;z>0;z--)
                    arrMapTemp[z] 
    = arrMapTemp[z-1];
                
    for (var i=0;i< arrMapTemp[0].length ;i++)
                    arrMapTemp[
    0][i] = 0;
                bCleaned 
    = true;
            }
        }
        CountScore(iCleanLineCount);
        
    if(bCanClean)            
            DrawScore();
        
    return arrMapTemp;
    }

    function CountScore(iLine)
    {
       
    switch (iLine)    {                
            
    case 1 :iScore += 10;    break;
            
    case 2 :iScore += 30;    break;
            
    case 3 :iScore += 50;      break;
            
    case 4 :iScore += 100;    break;        
        }          
    }

    function DrawScore()
    {
        
    var obj= GetControl("dScore");
            obj.innerHTML
    = iScore;
                    
            obj.style[
    "width"= (4* iModelWidthLength+2)+"px";
    }

    function ColMove(aMoveToPoint,arrModel)
    {
      
    var arrMapCoreDraw = CopaDateToDrawArray(arrMapCore,arrMapCoreDraw);
      
    if(CheckCanMove(arrMapCore,arrModel,aMoveToPoint))
      {
          arrMapCoreDraw 
    = MoveTO(arrMapCoreDraw,arrModel,aMoveToPoint);        
          aCurPoint 
    = aMoveToPoint;
      }
    else
      {
        arrMapCoreDraw 
    = MoveTO(arrMapCoreDraw,arrModel,aCurPoint);
      }
      DrowScreen(arrMapCoreDraw,
    "dMapInformation");
    }

    function GameOver()
    {
        
    if(objTime != null)
             clearTimeout(objTime)
        bIsGameOver 
    = true
    }


    function RowMove(aMoveToPoint,arrModel)
    {
        
      
    var arrMapCoreDraw = CopaDateToDrawArray(arrMapCore,arrMapCoreDraw);
      
    if(CheckCanMove(arrMapCoreDraw,arrModel,aMoveToPoint))
      {
          arrMapCoreDraw 
    = MoveTO(arrMapCoreDraw,arrModel,aMoveToPoint);
        arrMapCoreDraw
    =CleanLine(arrMapCoreDraw);    
        DrowScreen(arrMapCoreDraw,
    "dMapInformation");
        aCurPoint 
    = aMoveToPoint;
        
    return false;
      }
    else
      {      
        arrMapCore 
    = MoveTO(arrMapCore,arrModel,{ x:aMoveToPoint.x-1, y:aMoveToPoint.y });
        arrMapCore
    =CleanLine(arrMapCore);
        DrowScreen(arrMapCore,
    "dMapInformation");
        aCurPoint 
    = { x:0, y:3 };
        CreateModel();
        
    if(IsGameOver())
        {
            GameOver();        
        }    
        
    return true;
      }
    }

    function IsGameOver()

      
    var arrMapCoreDraw = CopaDateToDrawArray(arrMapCore,arrMapCoreDraw);
      
    var aMoveToPoint = { x:aCurPoint.x, y:aCurPoint.y};
      
    var strModel=arrAllModel[iCurrentModel*4+iPointAction];
      
    var arrModel = FormatModel(strModel);
         
      
    if(CheckCanMove(arrMapCoreDraw,arrModel,aMoveToPoint))
      {      
        
    return false;
      }
    else
      {
        
    return true;
      }      
    }

    function CreateModel()
    {    
        iCurrentModel 
    = iNextModel;
        iPointAction 
    = iNextPointAction;
        
        iNextModel  
    = Math.round(Math.random() * 6);
        iNextPointAction 
    =Math.round(Math.random() * 3);
        
         
    var strModel=arrAllModel[iNextModel*4+iNextPointAction];
         
    var arrModel = FormatModel(strModel);
         
         DrowScreen(arrModel,
    "dNextModel");
    }

    function DrowScreen(arrMap,mapID)
    {
         
    var obj= GetControl(mapID);
         
    if(arrMap != null)
         {
             
    var strMapSrc = '';
            
    var strMapSrcAll ='';
            
    for (var x=0;x<arrMap.length;x++)
            {
                strMapSrc 
    ="";
                
    for(var y=0;y<arrMap[x].length;y++
                {
                    
    if(arrMap[x][y] ==1)
                    {                    
                        strMapSrc 
    += "<div style='color:#FFF9F8; border-1px; border-color:#FFFFF0; border-style:solid;background-color:#000CC0;left:"+(y* iModelWidthLength)+"px; top:"+(x* iModelWidthLength)+"px; "+iModelWidthLength+"px; height:"+iModelWidthLength+"px; padding:0px; position:absolute;'></div>";
                    }
    else
                    {                    
                        strMapSrc 
    += "<div style='color:#FFF9F8; border-1px; border-color:#FFFFF0; border-style:solid;background-color:#FFF8F0;left:"+(y* iModelWidthLength)+"px; top:"+(x* iModelWidthLength)+"px; "+iModelWidthLength+"px; height:"+iModelWidthLength+"px; padding:0px; position:absolute;'></div>";
                    }                                                                
                }
                strMapSrcAll 
    = strMapSrcAll +strMapSrc + "<Br>";
            }
            obj.innerHTML
    = strMapSrcAll;
            
            obj.style[
    "width"= (arrMap[0].length* iModelWidthLength+2)+"px";
            obj.style[
    "height"= (arrMap.length* iModelWidthLength+2)+"px";
         }
    }


    if(typeof GetControl=="#ff0000") GetControl=function (id)
    {
        
    return document.getElementById(id);
    };

    function ModelChange(aMoveToPoint)
    {
        
    var iPointActionBak = iPointAction;
        iPointAction
    =iPointAction+1;
        
    if(iPointAction>3)
             iPointAction 
    =0;
        strModel
    =arrAllModel[iCurrentModel*4+iPointAction];    
        arrModel 
    = FormatModel(strModel);
        
        
    var arrMapCoreDraw = CopaDateToDrawArray(arrMapCore,arrMapCoreDraw);
        
    if(CheckCanMove(arrMapCore,arrModel,aMoveToPoint))
        {
            ColMove(aMoveToPoint,arrModel);
        }
    else
        {
            iPointAction
    =iPointActionBak;
        } 
    }

    function OnMessageProcess()
    {          
         
    var strModel=arrAllModel[iCurrentModel*4+iPointAction];
         
    var arrModel = FormatModel(strModel);
            
         
    var arrResult =null;
         
             
    switch (iActionKey)    {                
            
    case 39 :    ColMove({ x:aCurPoint.x, y:aCurPoint.y+1 },arrModel);    break;
            
    case 37 :    ColMove({ x:aCurPoint.x, y:aCurPoint.y-1 },arrModel);    break;
            
    case 38 :   ModelChange({ x:aCurPoint.x, y:aCurPoint.y});           break;
            
    case 40 :    RowMove({ x:aCurPoint.x+1, y:aCurPoint.y },arrModel);    break;        
        }     
         iActionKey
    =0;


    function OnTimer() { 
         
    if(objTime != null)
             clearTimeout(objTime)
         iActionKey
    =40
         objTime 
    = setTimeout(OnTimer,1000);
         
    if(!bIsGameOver)
            OnMessageProcess();
    }

    function KeyEvent(e)
    {
         
    try
               iActionKey 
    = (document.all) ? window.event.keyCode: e.which;
         } 
         
    catch(a){ 
               iActionKey
    =KeyEvent.arguments[0].keyCode; 
         }   
         OnMessageProcess(); 
    }

    document.onkeydown
    =KeyEvent; 
    document.onkeypress
    =KeyEvent; 

    function Init()
    {
        bIsGameOver 
    = false;    
        iCurrentModel 
    =0;
        iPointAction 
    =0;
        iActionKey 
    =39;

        iNextPointAction 
    =0;
        iNextModel 
    =0;

        iScore 
    =0;
        objTime 
    = null;
    }


    function Start()
    {
        Init();
        InitMapCore();
        CreateModel();
        DrawScore();
        OnMessageProcess();
        OnTimer(); 
        iActionKey
    =38;
    }
    </script>
    <body>
    <div id="dAction" style="padding:0px; position:absolute; z-index:2;border-1px; border-color:#0C0100; border-style:solid;left:5px;top:10px;height:40px;100px">
    <input type="button" value='Start' onclick='javascript:Start();'>
    </div>

    <div id="dScore" style="padding:0px; position:absolute; z-index:2;border-1px; border-color:#0C0100; border-style:solid;left:5px;top:50px; height:20px;100px"></div>
    <div id="dNextModel" style="padding:0px; position:absolute; z-index:2;border-1px; border-color:#0C0100; border-style:solid;left:5px;top:170px;100px;height:100px;"></div>
    <div id="dMapInformation" style="padding:0px; position:absolute; z-index:2;border-1px; border-color:#0C0100; border-style:solid;left:105px;top:10px;252px;height:502px;"></div>
    </body>
    </html>
    if(typeof GetControl=="#ff0000") GetControl=function (id)
    {
    return document.getElementById(id);
    };
    这个脚本中的undefined 被CuteEditor改成"#ff0000",实际是"undefined"。
  • 相关阅读:
    分享几个Android很强势的的开源框架
    终于,我还是下决心学Java后台了
    金9银10,分享几个重要的Android面试题
    Android组件化demo实现以及遇坑分享
    谷歌被爆秘密研发新系统 欲5年内取代Android
    高级面试题总结—线程池还能这么玩?
    安卓易学,爬坑不易—腾讯老司机的RecyclerView局部刷新爬坑之路
    国庆第三天2014年10月3日10:21:39,Nutz,WebCollector,jsoup
    《程序员的思维修炼》摘抄start:2014年9月27日19:27:07
    09.27日记(2014年9月27日10:33:50),那些网站
  • 原文地址:https://www.cnblogs.com/lingr/p/1239153.html
Copyright © 2011-2022 走看看