zoukankan      html  css  js  c++  java
  • javascript 2048游戏

      1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      2 <html xmlns="http://www.w3.org/1999/xhtml">
      3 <head>
      4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      5 <title>无标题文档</title>
      6 <style>
      7 header{display:block; margin:0 auto; 100%; text-align:center;}
      8 header h1{font-size:40px; font-family:Arial, Helvetica, sans-serif; font-weight:bold;}
      9 header #newgamebutton{display:block; margin:10px auto; 100px; padding:10px 10px; background-color:#8f7a66; font-family:Arial; color:white; border-radius:10px; text-decoration:none;}
     10 header #newgamebutton:hover{background-color:#9f8b77;}
     11 header p{font-family:Arial; font-size:25px; margin:10px auto;}
     12 
     13 #grid-container{460px; height:460px; padding:20px; margin:20px auto; background-color:#bbada0; border-radius:10px; position:relative;}
     14 .grid-cell{100px; height:100px; border-radius:6px; color:white;  background-color:#ccc0b3; position:absolute; font-family:Arial; font-weight:bold; font-size:60px; line-height:100px; text-align:center;}
     15 
     16 .gameover{display:block; margin:0 auto; 500px; text-align:center; vertical-align:middle; position:absolute;}
     17 
     18 .gameover p {
     19     font-family: Arial;
     20     font-size: 50px;
     21     color: white;
     22     margin: 20px auto;
     23 
     24     margin-top: 150px;
     25 }
     26 
     27 .gameover span {
     28     font-family: Arial;
     29     font-size: 50px;
     30     color: white;
     31     margin: 20px auto;
     32 }
     33 
     34 #restartgamebutton {
     35     display: block;
     36     margin: 20px auto;
     37 
     38      180px;
     39     padding: 10px 10px;
     40     background-color: #8f7a66;
     41 
     42     font-family: Arial;
     43     font-size: 30px;
     44     color: white;
     45 
     46     border-radius: 10px;
     47 
     48     text-decoration: none;
     49 }
     50 
     51 #restartgamebutton:hover {
     52     background-color: #9f8b77;
     53 }
     54 
     55 #showGameover{100px; padding:10px 10px; background-color:#8f7a66; font-family:Arial; color:white; border-radius:10px; text-decoration:none; font-size:36px; position:absolute;}
     56 
     57 </style>
     58 
     59 <script>
     60 
     61 window.onload = function (){
     62     //newgame();
     63     var showScore = document.getElementById('score');
     64     score = 0;
     65     init();
     66     generateOneNumber();
     67     generateOneNumber();
     68     
     69     window.onkeydown = function (e){
     70         var e = e || window.event;
     71         
     72         switch(e.keyCode){
     73             case 37:
     74                 if(canMoveLeft(board)){
     75                     moveLeft();
     76                     generateOneNumber();
     77                     isgameover();
     78                 }
     79                 break;
     80             case 38:
     81                 if(canMoveUp(board)){
     82                     moveUp();
     83                     generateOneNumber();
     84                     isgameover();
     85                 }
     86                 break;
     87             case 39:
     88                 if(canMoveRight(board)){
     89                     moveRight();
     90                     generateOneNumber();
     91                     isgameover();
     92                 }
     93                 break;
     94             case 40:
     95                 if(canMoveDown(board)){
     96                     moveDown();
     97                     generateOneNumber();
     98                     isgameover();
     99                 }
    100                 break;
    101             default :
    102                 break;
    103         }
    104     };
    105 };
    106 
    107 function generateOneNumber() {
    108     if(!nospace(board)){
    109         var randx = parseInt(Math.floor(Math.random() * 4));
    110         var randy = parseInt(Math.floor(Math.random() * 4));
    111         while (true) {
    112             if (board[randx][randy] == 0) {
    113                 break;
    114             }
    115             var randx = parseInt(Math.floor(Math.random() * 4));
    116             var randy = parseInt(Math.floor(Math.random() * 4));
    117         }
    118         var randNumber = Math.random() < 0.5 ? 2 : 4;
    119         board[randx][randy] = randNumber;
    120         var gridCell = document.getElementById('grid-cell-'+randx+'-'+randy);
    121         gridCell.innerHTML = randNumber;
    122         //
    123     }
    124     else {
    125         gameover();
    126     }
    127 }
    128 
    129 
    130 function newgame() {
    131     window.location.reload();
    132     
    133 }
    134 
    135 var board = new Array();
    136 function init(){
    137     for(var i=0;i<4;i++){
    138         board[i] = new Array();
    139         for(var j=0;j<4;j++){
    140             board[i][j] = 0;
    141             
    142             var gridCell = document.getElementById('grid-cell-'+i+'-'+j);
    143             gridCell.style.top = (20+i*120)+'px';
    144             gridCell.style.left = (20+j*120)+'px';
    145         }
    146     }
    147 }
    148 
    149 function getNumberBackgroundColor(number) {
    150     switch (number) {
    151         case 2:return "#eee4da";break;
    152         case 4:return "#ede0c8";break;
    153         case 8:return "#f2b179";break;
    154         case 16:return "#f59563";break;
    155         case 32:return "#f67c5f";break;
    156         case 64:return "#f65e3b";break;
    157         case 128:return "#edcf72";break;
    158         case 256:return "#edcc61";break;
    159         case 512:return "#9c0";break;
    160         case 1024:return "#33b5e5";break;
    161         case 2048:return "#09c";break;
    162         case 4096:return "#a6c";break;
    163         case 8192:return "#93c";break;
    164     }
    165 }
    166 
    167 function getNumberColor(number) {
    168     if (number <= 4) {
    169         return "#776e65"
    170     }
    171     return "white";
    172 }
    173 
    174 function nospace(board) {
    175     for (var i = 0; i < 4; i++) {
    176         for (var j = 0; j < 4; j++) {
    177             if (board[i][j] == 0) {
    178                 return false;
    179             }
    180         }
    181     }
    182     return true;
    183 }
    184 
    185 function canMoveLeft(board) {
    186     for (var i = 0; i < 4; i++) {
    187         for (var j = 1; j < 4; j++) {
    188             if (board[i][j] != 0) {
    189                 if (board[i][j - 1] == 0 || board[i][j - 1] == board[i][j]) {return true; }
    190             }
    191         }
    192     }
    193     return false;
    194 }
    195 
    196 function moveLeft() {
    197         for (var i = 0; i < 4; i++) {
    198             for (var j = 1; j < 4; j++) {
    199                 if (board[i][j] != 0) {
    200                     for (var k = j-1; k > -1; k--) {
    201                         if(board[i][k] == 0 || board[i][k] == board[i][j]){
    202                             board[i][k] = board[i][k] + board[i][j];
    203                             board[i][j] = 0;
    204                             var gridCell = document.getElementById('grid-cell-'+i+'-'+j);
    205                             gridCell.innerHTML = '';
    206                             var gridCellk = document.getElementById('grid-cell-'+i+'-'+k);
    207                             gridCellk.innerHTML = board[i][k];
    208                             gridCellk.style.backgroundColor = getNumberBackgroundColor(board[i][k]);
    209                             gridCell.style.backgroundColor = '#ccc0b3';
    210                             gridCellk.style.color = getNumberColor(board[i][k]);
    211                             gridCell.style.color = 'white';
    212                             score += board[i][k];
    213                             var showScore = document.getElementById('score');
    214                             showScore.innerHTML = score;
    215                             j = k;
    216                             //
    217                         }
    218                         else {
    219                             break;   //跳出 var k 的for循环
    220                         }
    221     
    222                     }
    223                 }
    224             }
    225         }
    226 }
    227 
    228 function canMoveUp(board) {
    229     for (var j = 0; j < 4; j++) {
    230         for (var i = 1; i < 4; i++) {
    231             if (board[i][j] != 0) {
    232                 if (board[i - 1][j] == 0 || board[i - 1][j] == board[i][j]) {return true; }
    233             }
    234         }
    235     }
    236     return false;
    237 }
    238 
    239 function moveUp() {
    240         for (var j = 0; j < 4; j++) {
    241             for (var i = 1; i < 4; i++) {
    242                 if (board[i][j] != 0) {
    243                     for (var k = i-1; k > -1; k--) {
    244                         if(board[k][j] == 0 || board[k][j] == board[i][j]){
    245                             board[k][j] = board[k][j] + board[i][j];
    246                             board[i][j] = 0;
    247                             var gridCell = document.getElementById('grid-cell-'+i+'-'+j);
    248                             gridCell.innerHTML = '';
    249                             var gridCellk = document.getElementById('grid-cell-'+k+'-'+j);
    250                             gridCellk.innerHTML = board[k][j];
    251                             gridCellk.style.backgroundColor = getNumberBackgroundColor(board[k][j]);
    252                             gridCell.style.backgroundColor = '#ccc0b3';
    253                             gridCellk.style.color = getNumberColor(board[i][k]);
    254                             gridCell.style.color = 'white';
    255                             score += board[k][j];
    256                             var showScore = document.getElementById('score');
    257                             showScore.innerHTML = score;
    258                             i = k;
    259                             //
    260                         }
    261                         else {
    262                             break;   //跳出 var k 的for循环
    263                         }
    264     
    265                     }
    266                 }
    267             }
    268         }
    269 }
    270 
    271 function canMoveRight(board) {
    272     for (var i = 0; i < 4; i++) {
    273         for (var j = 2; j > -1; j--) {
    274             if (board[i][j] != 0) {
    275                 if (board[i][j + 1] == 0 || board[i][j + 1] == board[i][j]) {return true; }
    276             }
    277         }
    278     }
    279     return false;
    280 }
    281 
    282 function moveRight() {
    283         for (var i = 0; i < 4; i++) {
    284             for (var j = 2; j > -1; j--) {
    285                 if (board[i][j] != 0) {
    286                     for (var k = j+1; k < 4; k++) {
    287                         if(board[i][k] == 0 || board[i][k] == board[i][j]){
    288                             board[i][k] = board[i][k] + board[i][j];
    289                             board[i][j] = 0;
    290                             var gridCell = document.getElementById('grid-cell-'+i+'-'+j);
    291                             gridCell.innerHTML = '';
    292                             var gridCellk = document.getElementById('grid-cell-'+i+'-'+k);
    293                             gridCellk.innerHTML = board[i][k];
    294                             gridCellk.style.backgroundColor = getNumberBackgroundColor(board[i][k]);
    295                             gridCell.style.backgroundColor = '#ccc0b3';
    296                             gridCellk.style.color = getNumberColor(board[i][k]);
    297                             gridCell.style.color = 'white';
    298                             score += board[i][k];
    299                             var showScore = document.getElementById('score');
    300                             showScore.innerHTML = score;
    301                             j = k;
    302                             //
    303                         }
    304                         else {
    305                             break;   //跳出 var k 的for循环
    306                         }
    307     
    308                     }
    309                 }
    310             }
    311         }
    312 }
    313 
    314 function canMoveDown(board) {
    315     for (var j = 0; j < 4; j++) {
    316         for (var i = 2; i > -1; i--) {
    317             if (board[i][j] != 0) {
    318                 if (board[i + 1][j] == 0 || board[i + 1][j] == board[i][j]) {return true; }
    319             }
    320         }
    321     }
    322     return false;
    323 }
    324 
    325 function moveDown() {
    326         for (var j = 0; j < 4; j++) {
    327             for (var i = 2; i > -1; i--) {
    328                 if (board[i][j] != 0) {
    329                     for (var k = i+1; k < 4; k++) {
    330                         if(board[k][j] == 0 || board[k][j] == board[i][j]){
    331                             board[k][j] = board[k][j] + board[i][j];
    332                             board[i][j] = 0;
    333                             var gridCell = document.getElementById('grid-cell-'+i+'-'+j);
    334                             gridCell.innerHTML = '';
    335                             var gridCellk = document.getElementById('grid-cell-'+k+'-'+j);
    336                             gridCellk.innerHTML = board[k][j];
    337                             gridCellk.style.backgroundColor = getNumberBackgroundColor(board[k][j]);
    338                             gridCell.style.backgroundColor = '#ccc0b3';
    339                             gridCellk.style.color = getNumberColor(board[i][k]);
    340                             gridCell.style.color = 'white';
    341                             score += board[k][j];
    342                             var showScore = document.getElementById('score');
    343                             showScore.innerHTML = score;
    344                             i = k;
    345                             //
    346                         }
    347                         else {
    348                             break;   //跳出 var k 的for循环
    349                         }
    350     
    351                     }
    352                 }
    353             }
    354         }
    355 }
    356 
    357 function isgameover() {
    358     if (nospace(board) && nomove(board)) {
    359         gameover();
    360     }
    361 }
    362 
    363 function nomove(board) {
    364     if (canMoveDown(board) || 
    365     canMoveLeft(board) || 
    366     canMoveRight(board) || 
    367     canMoveUp(board)) {
    368         return false;
    369     }
    370     return true;
    371 }
    372 
    373 function bounce(obj,top){
    374     clearInterval(obj.timer);
    375     var nSpeed = 0;
    376     var acceleration = 9;
    377     var Flag = 0;
    378     
    379     obj.timer = setInterval(function (){
    380         nSpeed += acceleration;
    381         nSpeed *= 0.93;
    382         
    383         if(obj.offsetTop + nSpeed >= top){
    384             obj.style.top = top + 'px';
    385             nSpeed *= -1;
    386         }else{
    387             if(Math.abs(nSpeed) < 4 && Math.abs(top-obj.offsetTop)<1){
    388                 clearInterval(obj.timer);
    389             }
    390             else{
    391                 obj.style.top = obj.offsetTop + nSpeed + 'px';
    392             }
    393         }
    394         
    395     },30);
    396 }
    397 
    398 function gameover() {
    399     //alert("gameover!");
    400     var gameover = document.createElement('div');
    401     gameover.id = 'showGameover';
    402     gameover.innerHTML = 'GAME OVER';
    403     var gridContainer = document.getElementById('grid-container');
    404     gridContainer.appendChild(gameover);
    405     var showGameover = document.getElementById('showGameover');
    406     showGameover.style.left = (gridContainer.offsetWidth - showGameover.offsetWidth ) / 2 + 'px';
    407     
    408     bounce(showGameover,200);
    409 }
    410 
    411 
    412 </script>
    413 
    414 </head>
    415 
    416 <body>
    417     <header>
    418         <!--<h1> 2048 </h1>-->
    419         <a href="javascript:newgame();" id="newgamebutton"> New Game </a>
    420         
    421         <p> score: <span id="score">0</span></p>
    422         
    423         <div id="grid-container">
    424             <div class="grid-cell" id="grid-cell-0-0"></div>
    425             <div class="grid-cell" id="grid-cell-0-1"></div>
    426             <div class="grid-cell" id="grid-cell-0-2"></div>
    427             <div class="grid-cell" id="grid-cell-0-3"></div>
    428             <div class="grid-cell" id="grid-cell-1-0"></div>
    429             <div class="grid-cell" id="grid-cell-1-1"></div>
    430             <div class="grid-cell" id="grid-cell-1-2"></div>
    431             <div class="grid-cell" id="grid-cell-1-3"></div>
    432             <div class="grid-cell" id="grid-cell-2-0"></div>
    433             <div class="grid-cell" id="grid-cell-2-1"></div>
    434             <div class="grid-cell" id="grid-cell-2-2"></div>
    435             <div class="grid-cell" id="grid-cell-2-3"></div>
    436             <div class="grid-cell" id="grid-cell-3-0"></div>
    437             <div class="grid-cell" id="grid-cell-3-1"></div>
    438             <div class="grid-cell" id="grid-cell-3-2"></div>
    439             <div class="grid-cell" id="grid-cell-3-3"></div>
    440         </div>
    441     </header>
    442 </body>
    443 </html>

     

  • 相关阅读:
    VB.net byval和byref
    IOS 常用宏定义(二)
    目录权限Linux存储实验四:NFS的安装与配置
    服务器负载均衡nginx+keepalived 高可用负载均衡
    博客文件第二部分 Linux Shell高级编程技巧——第一章 深入讨论
    查看进程第二部分 Linux Shell高级编程技巧——第二章 Shell工具
    响应命令使用Ubuntu架设ftp服务器
    进程内存Linux下top命令
    客户端服务器SSH原理和使用
    安装数据空间虚拟CentOS访问Windows下共享文件
  • 原文地址:https://www.cnblogs.com/zapple/p/5316757.html
Copyright © 2011-2022 走看看