设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 3309|回复: 5
收起左侧

[HTML/HTA/CSS] 分享一个某老外用HTA实现的俄罗斯方块源码

[复制链接]
发表于 2017-10-4 13:43:29 | 显示全部楼层 |阅读模式
123123123.png
新建一个.txt空白文档 粘贴以下源码并重命名为.hta即可运行:


  1. <HTML>
  2. <HEAD>

  3. <title>Tetris</title>
  4. <script>window.resizeTo(410,450)</script>
  5. <style>
  6. <!--
  7. .MB
  8. {
  9.     BACKGROUND-COLOR: firebrick;
  10.     CURSOR: default;
  11.     HEIGHT: 22px;
  12.     WIDTH: 22px
  13. }
  14. .SB
  15. {
  16.     BACKGROUND-COLOR: slategray;
  17.     CURSOR: default;
  18.     HEIGHT: 22px;
  19.     WIDTH: 22px
  20. }
  21. .BK
  22. {
  23.     BACKGROUND-COLOR: white;
  24.     CURSOR: default;
  25.     HEIGHT: 22px;
  26.     WIDTH: 22px
  27. }
  28. .GT
  29. {
  30.     BORDER-BOTTOM: deepskyblue thin solid;
  31.     BORDER-LEFT: deepskyblue thin solid;
  32.     BORDER-RIGHT: deepskyblue thin solid;
  33.     BORDER-TOP: deepskyblue thin solid;
  34.     CURSOR: default
  35. }
  36. -->
  37. </style>
  38. <script>
  39. <!--
  40. var BX=new Array(4);
  41. var BY=new Array(4);
  42. var PX=new Array(4);
  43. var PY=new Array(4);
  44. var mTimer
  45. var firstView
  46. var gameState = 0;

  47. function beginGame()
  48. {
  49.     gameState=0;
  50.     speed=1;
  51.     outTime=1100-speed*100;
  52.     score=0;
  53.     if(gameState!=0)return;
  54.     firstView=true;
  55.     for(j=0;j<16;j++)
  56.         for(i=0;i<10;i++)
  57.             setClass(i,j,"BK");
  58.     randBar();
  59.     gameState=1;
  60.     Play.disabled=true;
  61.     window.clearInterval(mTimer);
  62.     mTimer=window.setInterval("moveBar()",outTime);
  63. }

  64. function keyControl()
  65. {
  66.     if(gameState!=1)return;
  67.     switch(event.keyCode){
  68.         case 37:{    //left
  69.             for(i=0;i<4;i++)if(BX[i]==0)return;
  70.             for(i=0;i<4;i++)if(getClass(BX[i]-1,BY[i])=="SB")return;
  71.             for(i=0;i<4;i++)setClass(BX[i],BY[i],"BK");
  72.             for(i=0;i<4;i++)BX[i]=BX[i]-1;
  73.             for(i=0;i<4;i++)setClass(BX[i],BY[i],"MB");
  74.             break;}
  75.         case 38:{    //up
  76.             var preMBarX=new Array(4);
  77.             var preMBarY=new Array(4);
  78.             var cx=Math.round((BX[0]+BX[1]+BX[2]+BX[3])/4);
  79.             var cy=Math.round((BY[0]+BY[1]+BY[2]+BY[3])/4);
  80.             for(i=0;i<4;i++){
  81.                 preMBarX[i]=Math.round(cx-cy+BY[i]);
  82.                 preMBarY[i]=Math.round(cx+cy-BX[i]);
  83.                 if(preMBarX[i]<0 || preMBarX[i]>9 || preMBarY[i]<0 || preMBarY[i]>15)return;
  84.                 if(getClass(preMBarX[i],preMBarY[i])=="SB")return;
  85.             }
  86.             for(i=0;i<4;i++)setClass(BX[i],BY[i],"BK");
  87.             for(i=0;i<4;i++){
  88.                 BX[i]=preMBarX[i];
  89.                 BY[i]=preMBarY[i];
  90.             }
  91.             for(i=0;i<4;i++)setClass(BX[i],BY[i],"MB");
  92.             break;}
  93.         case 39:{    //right
  94.             for(i=0;i<4;i++)if(BX[i]==9)return;
  95.             for(i=0;i<4;i++)if(getClass(BX[i]+1,BY[i])=="SB")return;
  96.             for(i=0;i<4;i++)setClass(BX[i],BY[i],"BK");
  97.             for(i=0;i<4;i++)BX[i]=BX[i]+1;
  98.             for(i=0;i<4;i++)setClass(BX[i],BY[i],"MB");
  99.             break;}
  100.         case 40:{    //down
  101.             moveBar();
  102.             break;}
  103.     }
  104. }

  105. function delLine()
  106. {
  107.     for(i=0;i<4;i++)setClass(BX[i],BY[i],"SB");
  108.     for(j=0;j<16;j++){
  109.         dLine=true;
  110.         for(i=0;i<10;i++){
  111.             if(getClass(i,j)!="SB"){
  112.                 dLine=false;
  113.                 break;
  114.             }
  115.         }
  116.         if(dLine){
  117.             score=score+100;
  118.             for(k=j;k>0;k--)
  119.                 for(l=0;l<10;l++)
  120.                     setClass(l,k,getClass(l,k-1));
  121.             for(l=0;l<10;l++)setClass(l,0,"BK");
  122.         }
  123.     }
  124.     randBar();
  125.     speed=Math.floor(score/3000)+1;
  126.     outTime=1100-speed*100;
  127.     scoreBar.innerHTML="Score : " + score;
  128.     speedBar.innerHTML="Speed : " + speed;
  129.     window.clearInterval(mTimer);
  130.     mTimer=window.setInterval("moveBar()",outTime);
  131. }

  132. function getClass(x,y){return GameBar.children[y].children[x].className;}
  133. function setClass(x,y,cName){GameBar.children[y].children[x].className=cName;}

  134. function moveBar()
  135. {
  136.     if(gameState!=1)return;
  137.     dropLine=true;
  138.     for(i=0;i<4;i++)if(BY[i]==15)dropLine=false;
  139.     if(dropLine)for(i=0;i<4;i++)if(getClass(BX[i],BY[i]+1)=="SB")dropLine=false;
  140.     if(!dropLine){
  141.         window.clearInterval(mTimer);
  142.         delLine();
  143.         return;
  144.     }
  145.     for(i=0;i<4;i++)setClass(BX[i],BY[i],"BK");
  146.     for(i=0;i<4;i++)BY[i]=BY[i]+1;
  147.     for(i=0;i<4;i++)setClass(BX[i],BY[i],"MB");
  148. }

  149. function pauseGame()
  150. {
  151.     if(gameState==0)return;
  152.     if(event.srcElement.value=="Pause"){
  153.         gameState=2;
  154.         event.srcElement.value="Continue";
  155.         window.clearInterval(mTimer);
  156.     }
  157.     else{
  158.         gameState=1;
  159.         event.srcElement.value="Pause";
  160.         mTimer=window.setInterval("moveBar()",outTime);
  161.     }
  162. }

  163. function fMnu(){return false;}
  164. document.oncontextmenu=fMnu;

  165. function preview()
  166. {
  167.     if(previewWnd.style.display!="none")
  168.         previewWnd.style.display="none";
  169.     else
  170.         previewWnd.style.display="block";
  171. }

  172. function replayGame()
  173. {
  174.     if(gameState!=1)return;
  175.     if(!confirm("Really want to re-start the game?"))return;
  176.     gameState=0;
  177.     window.clearInterval(mTimer);
  178.     beginGame();
  179. }
  180. function randBar()
  181. {
  182.     randNum=Math.floor(Math.random()*20)+1;
  183.     if(!firstView)
  184.         for(i=0;i<4;i++){
  185.             BX[i]=PX[i];
  186.             BY[i]=PY[i];
  187.         }
  188.     switch(randNum){
  189.         case 1:{
  190.             PX[0]=4;
  191.             PY[0]=0;
  192.             PX[1]=4;
  193.             PY[1]=1;
  194.             PX[2]=5;
  195.             PY[2]=1;
  196.             PX[3]=6;
  197.             PY[3]=1;
  198.             break;}
  199.         case 2:{
  200.             PX[0]=4;
  201.             PY[0]=0;
  202.             PX[1]=5;
  203.             PY[1]=0;
  204.             PX[2]=4;
  205.             PY[2]=1;
  206.             PX[3]=4;
  207.             PY[3]=2;
  208.             break;}
  209.         case 3:{
  210.             PX[0]=4;
  211.             PY[0]=0;
  212.             PX[1]=5;
  213.             PY[1]=0;
  214.             PX[2]=6;
  215.             PY[2]=0;
  216.             PX[3]=6;
  217.             PY[3]=1;
  218.             break;}
  219.         case 4:{
  220.             PX[0]=5;
  221.             PY[0]=0;
  222.             PX[1]=5;
  223.             PY[1]=1;
  224.             PX[2]=5;
  225.             PY[2]=2;
  226.             PX[3]=4;
  227.             PY[3]=2;
  228.             break;}
  229.         case 5:{
  230.             PX[0]=6;
  231.             PY[0]=0;
  232.             PX[1]=6;
  233.             PY[1]=1;
  234.             PX[2]=4;
  235.             PY[2]=1;
  236.             PX[3]=5;
  237.             PY[3]=1;
  238.             break;}
  239.         case 6:{
  240.             PX[0]=4;
  241.             PY[0]=0;
  242.             PX[1]=4;
  243.             PY[1]=1;
  244.             PX[2]=4;
  245.             PY[2]=2;
  246.             PX[3]=5;
  247.             PY[3]=2;
  248.             break;}
  249.         case 7:{
  250.             PX[0]=4;
  251.             PY[0]=0;
  252.             PX[1]=4;
  253.             PY[1]=1;
  254.             PX[2]=5;
  255.             PY[2]=0;
  256.             PX[3]=6;
  257.             PY[3]=0;
  258.             break;}
  259.         case 8:{
  260.             PX[0]=4;
  261.             PY[0]=0;
  262.             PX[1]=5;
  263.             PY[1]=0;
  264.             PX[2]=5;
  265.             PY[2]=1;
  266.             PX[3]=5;
  267.             PY[3]=2;
  268.             break;}
  269.         case 9:{
  270.             PX[0]=4;
  271.             PY[0]=0;
  272.             PX[1]=5;
  273.             PY[1]=0;
  274.             PX[2]=5;
  275.             PY[2]=1;
  276.             PX[3]=6;
  277.             PY[3]=1;
  278.             break;}
  279.         case 10:{
  280.             PX[0]=5;
  281.             PY[0]=0;
  282.             PX[1]=5;
  283.             PY[1]=1;
  284.             PX[2]=4;
  285.             PY[2]=1;
  286.             PX[3]=4;
  287.             PY[3]=2;
  288.             break;}
  289.         case 11:{
  290.             PX[0]=4;
  291.             PY[0]=1;
  292.             PX[1]=5;
  293.             PY[1]=1;
  294.             PX[2]=5;
  295.             PY[2]=0;
  296.             PX[3]=6;
  297.             PY[3]=0;
  298.             break;}
  299.         case 12:{
  300.             PX[0]=4;
  301.             PY[0]=0;
  302.             PX[1]=4;
  303.             PY[1]=1;
  304.             PX[2]=5;
  305.             PY[2]=1;
  306.             PX[3]=5;
  307.             PY[3]=2;
  308.             break;}
  309.         case 13:{
  310.             PX[0]=4;
  311.             PY[0]=0;
  312.             PX[1]=5;
  313.             PY[1]=0;
  314.             PX[2]=6;
  315.             PY[2]=0;
  316.             PX[3]=5;
  317.             PY[3]=1;
  318.             break;}
  319.         case 14:{
  320.             PX[0]=4;
  321.             PY[0]=0;
  322.             PX[1]=4;
  323.             PY[1]=1;
  324.             PX[2]=4;
  325.             PY[2]=2;
  326.             PX[3]=5;
  327.             PY[3]=1;
  328.             break;}
  329.         case 15:{
  330.             PX[0]=5;
  331.             PY[0]=0;
  332.             PX[1]=5;
  333.             PY[1]=1;
  334.             PX[2]=4;
  335.             PY[2]=1;
  336.             PX[3]=6;
  337.             PY[3]=1;
  338.             break;}
  339.         case 16:{
  340.             PX[0]=5;
  341.             PY[0]=0;
  342.             PX[1]=5;
  343.             PY[1]=1;
  344.             PX[2]=5;
  345.             PY[2]=2;
  346.             PX[3]=4;
  347.             PY[3]=1;
  348.             break;}
  349.         case 17:{
  350.             PX[0]=4;
  351.             PY[0]=0;
  352.             PX[1]=5;
  353.             PY[1]=0;
  354.             PX[2]=4;
  355.             PY[2]=1;
  356.             PX[3]=5;
  357.             PY[3]=1;
  358.             break;}
  359.         case 18:{
  360.             PX[0]=4;
  361.             PY[0]=0;
  362.             PX[1]=5;
  363.             PY[1]=0;
  364.             PX[2]=4;
  365.             PY[2]=1;
  366.             PX[3]=5;
  367.             PY[3]=1;
  368.             break;}
  369.         case 19:{
  370.             PX[0]=3;
  371.             PY[0]=0;
  372.             PX[1]=4;
  373.             PY[1]=0;
  374.             PX[2]=5;
  375.             PY[2]=0;
  376.             PX[3]=6;
  377.             PY[3]=0;
  378.             break;}
  379.         case 20:{
  380.             PX[0]=5;
  381.             PY[0]=0;
  382.             PX[1]=5;
  383.             PY[1]=1;
  384.             PX[2]=5;
  385.             PY[2]=2;
  386.             PX[3]=5;
  387.             PY[3]=3;
  388.             break;}
  389.     }
  390.     if(firstView){
  391.         firstView=false;
  392.         randBar();
  393.         return;
  394.     }
  395.     for(i=0;i<4;i++){
  396.         for(j=0;j<4;j++){
  397.             previewBar.children[j].children[i].className="BK";
  398.         }
  399.     }
  400.     for(i=0;i<4;i++)previewBar.children[PY[i]].children[PX[i]-3].className="MB";
  401.     for(i=0;i<4;i++){
  402.         if(getClass(BX[i],BY[i])!="BK"){
  403.             alert("Game Over!");
  404.             window.clearInterval(mTimer);
  405.             Play.disabled=false;
  406.             gameState=0;
  407.             return;
  408.         }
  409.     }
  410.     for(i=0;i<4;i++)setClass(BX[i],BY[i],"MB");
  411. }
  412. // -->
  413. </script>
  414. </HEAD>

  415. <BODY bgcolor="#EAF0F8" topmargin="10" leftmargin="10" rightmargin="10" bottommargin="0" scroll=no>
  416. <table border="0" width="100%" cellspacing="0" cellpadding="0" height="100%"><tr><td width="100%" height="100%" align="center">
  417. <table cellspacing=2 cellpadding=0 class=gt border=0 bordercolor="#EAF0F8" bgcolor="#EAF0F8">
  418. <tr>
  419. <td valign="top">
  420.         <table cellspacing=0 cellpadding=0 class=gt border=1 bordercolor="#EAF0F8" style="">
  421.         <Tbody id=GameBar>
  422.         <tr><td nowrap class=BK> </td><td nowrap class=BK> </td><td nowrap class=BK> </td><td nowrap class=BK> </td><td nowrap class=BK> </td><td nowrap class=BK>
  423.         </td><td nowrap class=BK> </td><td nowrap class=BK> </td><td nowrap class=BK> </td><td nowrap 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>
  424.         </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>
  425.         </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>
  426.         </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>
  427.         </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>
  428.         </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>
  429.         </tbody>
  430.         </table>
  431. </td>
  432. <td valign="top" align="center" style="padding: 10 10 0 10" bgcolor="#466285">
  433.         <table cellspacing=0 cellpadding=0 border=0>
  434.     <tr><td><font size=5 color=red face=consolas>Tetris</font></td></tr>
  435.         </table>
  436.         <table id="previewWnd" cellspacing=0 cellpadding=0 class=gt border=1 bordercolor="#EAF0F8" bgcolor="#EAF0F8" style="margin-top:15">
  437.         <Tbody id="previewBar">
  438.         <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>
  439.         </tbody>
  440.         </table>
  441.         <table cellspacing=3 cellpadding=0 border=0 style="margin-top:15">
  442.             <tr><td><input type=button id="Play" style="font-family:Tahoma; font-size:9pt; width:100px" value="Play"></td></tr>
  443.             <tr><td><input type=button id="Pause" style="font-family:Tahoma; font-size:9pt; width:100px" value="Pause"></td></tr>
  444.             <tr><td><input type=button id="Preview" style="font-family:Tahoma; font-size:9pt; width:100px" value="Preview"></td></tr>
  445.             <tr><td><input type=button id="Replay" style="font-family:Tahoma; font-size:9pt; width:100px" value="Replay"></td></tr>
  446.         </table>
  447.         <table cellspacing=3 cellpadding=0 border=0 style="font-family:Tahoma; font-size:9pt; font-weight: bold; margin-top:10">
  448.             <tr><td id=scoreBar style="color:#FFFFFF">Score : 0</td></tr>
  449.             <tr><td id=speedBar style="color:#FFFFFF">Speed : 1</td></tr>
  450.         </table>
  451. </td>
  452. </tr>
  453. </table>
  454. </td></tr></table>
  455. </BODY>
  456. </HTML>
  457. <script>
  458. function unSel()
  459. {
  460.     document.execCommand("Unselect");
  461.     window.setTimeout("unSel()",100);
  462. }
  463. unSel();


  464. </script>

复制代码



发表于 2017-10-4 16:54:30 | 显示全部楼层
就连汉化也懒得动弹。
发表于 2017-10-4 18:43:29 | 显示全部楼层
看不懂的路过水1帖子。
发表于 2017-10-4 22:15:16 | 显示全部楼层
我也看不动,e文渣渣。
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-3-28 16:05 , Processed in 0.472027 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表