<码农进阶> 仿2048小游戏

来源:互联网 发布:手游大数据 编辑:程序博客网 时间:2024/05/21 09:11
    运行前请先下载jquery.js 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>2048game</title>    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">    <meta http-equiv="description" content="this is my page">    <meta http-equiv="content-type" content="text/html; charset=UTF-8">        <!--<link rel="stylesheet" type="text/css" href="./styles.css">--><style type="text/css">*{padding:0;margin:0;}body{font-size:12px;text-align:center;}#game{margin:100px auto;}#gamecenter{float:left;width:400px;height:400px;background:#eee;margin:0 40px 0 400px;}#bg{margin:8px 0 0 8px;}#gamecenter ul{width:400px;height:80px;list-style-type:none;}#gamecenter ul li{width:74px;height:74px;float:left;text-align:center;line-height:74px;background:#fff;border:1px solid #ccc;margin:10px;font-size:16px;font-weight:bold;}#control{float:left;width:300px;height:180px;margin-top:60px;}#control tr{height:58px;}#control tr td{font-size:16px;font-weight:bold;}#control tr td.c{width:58px;height:58px;border:1px solid #ccc;text-align:center;background:#eee;}#btndiv{height:40px;border-bottom:1px solid #f60;}#btndiv ul{list-style-type:none;}#btndiv ul li {width:60px;height:25px;margin:0 10px;border:1px solid #666;line-height:25px;}</style>  </head>    <body>      <div>   <h1>2048小游戏</h1>      </div>         <div id="game"> <div id="gamecenter"> <div id="bg"> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul>  <ul> <li>5</li> <li>6</li> <li>7</li> <li>8</li> </ul>  <ul> <li>9</li> <li>10</li> <li>11</li> <li>12</li> </ul>  <ul> <li>13</li> <li>14</li> <li>15</li> <li>16</li> </ul>  </div>  </div>        <div id="control">   <div id="btndiv">   <ul>   <li id="start">start</li>   </ul>      </div>   <table>   <tr>   <td></td>   <td  class="c up">↑</td>   <td></td>   </tr>      <tr>   <td  class="c lf">←</td>   <td></td>   <td  class="c rt">→</td>   </tr>      <tr>   <td></td>   <td class="c dn">↓</td>   <td></td>   </tr>         </table>      </div>   </div>        </body>  <script type="text/javascript" src="resource/js/utils/jquery-1.8.3.js"></script>  <script type="text/javascript">  $(function(){    var numArray = null;  var winFlag = 64; // 获胜标识  var cols = 4;      // 列  var rows = 4;       // 行    var firstTimeCreateNum = 2;    // 对应数字背景色和字体颜色  var colorArray =  [  {"num":0 ,"bgcolor":"#fff" , "ftcolor":"#fff" }, {"num":2 ,"bgcolor":"#f7e09f" , "ftcolor":"#666" }, {"num":4 ,"bgcolor":"#f4b5d3" , "ftcolor":"#666" },  {"num":8 ,"bgcolor":"#c9f6bf" , "ftcolor":"#666" }, {"num":16 ,"bgcolor":"#aed6fb" , "ftcolor":"#666" }, {"num":32 ,"bgcolor":"#fbaebe" , "ftcolor":"#666" },  {"num":64 ,"bgcolor":"#e1fbae" , "ftcolor":"#666" }, {"num":128 ,"bgcolor":"#b2aefb" , "ftcolor":"#666" },  {"num":256 ,"bgcolor":"#d362a5" , "ftcolor":"#666" },  {"num":512 ,"bgcolor":"#dcdd6b" , "ftcolor":"#666" }, {"num":1024 ,"bgcolor":"#ee9e63" , "ftcolor":"#666" }, {"num":2048 ,"bgcolor":"#33c524" , "ftcolor":"#666" }        ];  $(document).keydown(function(event){ //判断当event.keyCode 为37时(即左方面键),执行函数to_left(); //判断当event.keyCode 为39时(即右方面键),执行函数to_right(); //alert(event.keyCode);if(event.keyCode == 13){ //do somethings; start();}if (event.keyCode == 37){ left();} if (event.keyCode == 38){ up();} if (event.keyCode == 39){ right();} if (event.keyCode == 40){ down();} });     function start(){  numArray = init(cols,rows);  numArray = appendRandomToArray(numArray,firstTimeCreateNum,'');    paint(numArray);}  function up(){numArray = calAndMeger('up',numArray);  numArray = appendRandomToArray(numArray,1,2);  paint(numArray);  isGameOver(numArray);}function down(){numArray = calAndMeger('down');  numArray = appendRandomToArray(numArray,1,2);  paint(numArray);  isGameOver(numArray);}function left(){numArray = calAndMeger('left');  numArray = appendRandomToArray(numArray,1,2);  paint(numArray);  isGameOver(numArray);}function right(){numArray = calAndMeger('right');  numArray = appendRandomToArray(numArray,1,2);  paint(numArray);  isGameOver(numArray);}    //  开始按钮  $("#start").click(function(){    numArray = init(cols,rows);  numArray = appendRandomToArray(numArray,firstTimeCreateNum,'');    paint(numArray);  });    // 向上操作  $(".up").click(function(){  numArray = calAndMeger('up',numArray);  numArray = appendRandomToArray(numArray,1,2);  paint(numArray);  isGameOver(numArray);      })  // 向左操作  $(".lf").click(function(){  numArray = calAndMeger('left');  numArray = appendRandomToArray(numArray,1,2);  paint(numArray);  isGameOver(numArray);  })    $(".rt").click(function(){  numArray = calAndMeger('right');  numArray = appendRandomToArray(numArray,1,2);  paint(numArray);  isGameOver(numArray);  })    $(".dn").click(function(){  //numArray = reSort('down');  numArray = calAndMeger('down');  numArray = appendRandomToArray(numArray,1,2);  paint(numArray);  isGameOver(numArray);  })    // 计算并合并  function calAndMeger(direction,array)  {  var tempArray = init(4,4);  if(direction=='up')  {    for(var i=0;i<numArray.length;i++)    {    var a = numArray[i];  var count = 0;    for(var j=0;j<a.length;j++)    {    var x = numArray[j][i];    if(x==0)    {    continue;    }    var t= j+1;    var flag = false;    while(t<a.length)    {    if(numArray[t][i]>0 && numArray[t][i]==x)    {    tempArray[count][i] = x+x;    // 将后面那个数字置为0    numArray[t][i]=0;    count++;    flag = true;    break;    }    t++;        }        if(!flag)    {    // 没发现相邻的两个相同的数字 中间为0跳过     tempArray[count][i] = x;    count++;    }            }        }    }    if(direction=='down')  {   for(var i=0;i<numArray.length;i++)    {    var a = numArray[i];    var count = a.length-1;    for(var j=a.length-1;j>=0;j--)    {    var x = numArray[j][i];    if(x==0)    {    continue;    }    var t = j-1;    var flag = false;    while(t>=0)    {    if(numArray[t][i]>0 && numArray[t][i]==x)    {    tempArray[count][i] = x+x;    numArray[t][i]=0;    count--;    flag = true;    break;        }    t--;        }         if(!flag)    {    tempArray[count][i] = x    count--;        }            }        }  }if(direction=='left'){for(var i=0;i<numArray.length;i++)    {    var a = numArray[i];    var count = 0;    for(var j=0;j<a.length;j++)    {        var x = a[j];    if(x==0)    {    continue;    }    var flag = false;    var t = j+1;    while(t<a.length)    {    if(a[t]>0 && a[t]==x)    {    tempArray[i][count] = x+x;    a[t]=0;    count++;    flag = true;    break;    }    t++;    }                if(!flag)    {    tempArray[i][count] = x;    count++;    }            }        }}if(direction=='right'){ for(var i=0;i<numArray.length;i++)    {    var a = numArray[i];    var count = a.length-1;    for(var j=a.length-1;j>=0;j--)    {    var x = a[j];        if(x==0)    {    continue;    }    var flag = false;    var t = j-1;    while(t>=0)    {    if(a[t]>0 && a[t]==x)    {    tempArray[i][count] = x+x;    a[t]=0;    count--;    flag = true;    break;    }    t--;        }                if(!flag)    {    tempArray[i][count] = x;    count--;    }            }        }}      return tempArray;    }        /**  //  重新组合 按某个方向  function reSort(direction)  {  var tempArray = init(4,4);  if(direction=='left')  {      for(var i=0;i<numArray.length;i++)    {    var a = numArray[i];    var count = 0;    for(var j=0;j<a.length;j++)    {    var x = a[j];        if(x>0)    {    tempArray[i][count] = x;    count++;    }            }        }    }    if(direction=="up")  {    for(var i=0;i<numArray.length;i++)    {    var a = numArray[i];    var count = 0;    for(var j=0;j<a.length;j++)    {    var x = numArray[j][i];        if(x>0)    {    tempArray[count][i] = x;    count++;    }            }        }  }      if(direction=="right")  {   for(var i=0;i<numArray.length;i++)    {    var a = numArray[i];    var count = a.length-1;    for(var j=a.length-1;j>=0;j--)    {    var x = a[j];        if(x>0)    {    tempArray[i][count] = x;    count--;    }            }        }      }    if(direction=="down")  {   for(var i=0;i<numArray.length;i++)    {    var a = numArray[i];    var count = a.length-1;    for(var j=a.length-1;j>=0;j--)    {    var x = numArray[j][i];        if(x>0)    {    tempArray[count][i] = x;    count--;    }            }        }      }    return tempArray;  }  **/      // 初始化 数组数据   function init(x ,y)  {  var a = new Array();      for (i = 0 ;i < x ; i++)  {        a[i] = new Array();        for (j = 0 ; j < y ; j ++)    {     a[i][j] = 0;    }    }       return a;  }        //  向数组中添加数据   // array 表示数组  num表示添加数据个数  num表示添加的数字  不传给随机数字2或4  function appendRandomToArray(array,count,num)  { var result = isCanInsert(array); if(result==0) { paint(array); alert("很遗憾,您失败了!您没有多余的格子可以放数字了!"); return false; }     for(var i=0;i<count;i++)     {       var x1 = getRandom(cols);      var y1 = getRandom(cols);     while(array[x1][y1]!=0)     {     x1 = getRandom(cols);          y1 = getRandom(cols);     }    if(num=='' || num==null || num=='undefined')    {     array[x1][y1] =  getRandom2or4();    }    else    {     array[x1][y1] =  num;    }            }  return array;  }    // 是否还能插入,不能插入,游戏game over  function isCanInsert(array)  {  var count = 0;  for(var i=0;i<array.length;i++)  {  var a = array[i];  for(var j=0;j<a.length;j++)  {  if(a[j]==0)  {   count++;  }  }  }    return count;  }            // 获取0-max之间随机数 不包含0和max  function getRandom(max)  {    return Math.floor(Math.random()* max);    }        //  获取随机的2或4  function getRandom2or4()  {  return Math.floor(Math.random()*2+1)*2;  }    // 游戏是否胜利  function isGameOver(array)  {  var flag = false;  for(var i=0;i<array.length;i++)  {  var a = array[i];  for(var j=0;j<a.length;j++)  {  if(a[j]==winFlag)  {  flag =true;  break;  }    }  }    if(flag)  {  alert("恭喜您,您胜利了!");  return false;  }  }      // 渲染画面  function paint(array)  {  for(var i=0;i<array.length;i++)  {  var a = array[i];    for(var j=0;j<a.length;j++)  {  var x =a[j];  for(var m=0;m<colorArray.length;m++)  {  if(x == colorArray[m].num)  {  if(x==0)  {  x="";  }    $("#gamecenter ul:eq("+i+") li:eq("+j+")").html(x);  $("#gamecenter ul:eq("+i+") li:eq("+j+")").css({"background":colorArray[m].bgcolor});  }  }      }    }    }              })      </script>      </html>

0 0
原创粉丝点击