1<?php class=class="string">"keyword">header(class="string">'Content-Type: text/html; charset=utf-class="number">8'); ?>
2<!DOCTYPE html><class="tag">html lang="zh-CN"><class="tag">head><class="tag">meta charset="UTF-class="number">8"><class="tag">meta name="viewport" content="width=device-width,initial-scale=class="number">1.0">
3<class="tag">title>class="number">2048 - η空间</class="tag">title>
4<class="tag">meta name="description" content="经典class="number">2048游戏,用方向键合成数字。免费在线玩。">
5<class="tag">link rel="stylesheet" href="/tools/share.css"><class="tag">link rel="stylesheet" href="/assets/pet-cat.css">
6<class="tag">style>
7*{margin:class="number">0;padding:class="number">0;box-sizing:border-box}
8body{font-family:class="string">'Outfit',-apple-system,sans-serif;background:class=class="string">"keyword">class=class="string">"comment">#0C0C0C;color:#F7F5F0;min-height:100vh;display:flex;flex-direction:column;align-items:center}
9h1{margin-top:30px;font-size:24px}h1 .a{color:class=class="string">"keyword">class=class="string">"comment">#FF6B35}
10.score{margin:10px class="number">0;font-size:16px;color:class=class="string">"keyword">class=class="string">"comment">#class="number">888}.score .num{color:#FF6B35;font-weight:class="number">700}
11.grid{display:grid;grid-template-columns:repeat(class="number">4,1fr);gap:8px;background:class=class="string">"keyword">class=class="string">"comment">#class="number">161616;border:1px solid #class="number">222;border-radius:12px;padding:8px;width:320px;height:320px}
12.cell{display:flex;align-items:center;justify-content:center;font-weight:class="number">700;border-radius:8px;font-size:24px;transition:all .1s;background:class=class="string">"keyword">class=class="string">"comment">#0C0C0C;color:#ccc}
13.cell.t2{background:class=class="string">"keyword">class=class="string">"comment">#fce4ec;color:#c62828}.cell.t4{background:#f8bbd0;color:#ad1457}.cell.t8{background:#f48fb1;color:#fff}.cell.t16{background:#f06292;color:#fff}
14.cell.t32{background:class=class="string">"keyword">class=class="string">"comment">#ec407a;color:#fff}.cell.t64{background:#e91e63;color:#fff}.cell.t128{background:#ff6f00;color:#fff;font-size:20px}
15.cell.t256{background:class=class="string">"keyword">class=class="string">"comment">#ff8f00;color:#fff;font-size:20px}.cell.t512{background:#ffab00;color:#fff;font-size:20px}
16.cell.t1024{background:class=class="string">"keyword">class=class="string">"comment">#ffd600;color:#1a1a1a;font-size:16px}.cell.t2048{background:#FF6B35;color:#fff;font-size:16px}
17.controls{margin-top:20px;display:flex;gap:10px}
18.btn{padding:8px 24px;border:none;border-radius:8px;font-size:14px;font-weight:class="number">600;cursor:pointer}
19.btn-class=class="string">"keyword">new{background:class=class="string">"keyword">class=class="string">"comment">#FF6B35;color:#fff}.btn-class=class="string">"keyword">new:hover{background:#e85a2a}
20.hint{color:class=class="string">"keyword">class=class="string">"comment">#class="number">555;font-size:12px;margin-top:12px}
21.gameover{position:fixed;top:class="number">0;left:class="number">0;width:class="number">100%;height:class="number">100%;background:rgba(class="number">0,class="number">0,class="number">0,.class="number">7);display:none;align-items:center;justify-content:center;z-index:class="number">100}
22.gameover-box{background:class=class="string">"keyword">class=class="string">"comment">#class="number">161616;border:1px solid #FF6B35;border-radius:20px;padding:30px 40px;text-align:center}
23.gameover-box h2{font-size:28px;margin-bottom:12px}
24.gameover-box p{color:class=class="string">"keyword">class=class="string">"comment">#class="number">888;margin-bottom:16px}
25</class="tag">style></class="tag">head><class="tag">body>
26<class="tag">h1><class="tag">span class=class="string">"keyword">class="a">class="number">2</class="tag">span>class="number">048</class="tag">h1>
27<class="tag">p style="font-size:12px;color:class=class="string">"keyword">class=class="string">"comment">#class="number">555;margin-bottom:8px;text-align:center">🎯 方向键 ↑↓←→ 合并相同数字,合到class="number">2048就赢!手机可滑动。</class="tag">p>
28<class="tag">div class=class="string">"keyword">class="score">分数: <class="tag">span class=class="string">"keyword">class="num" id="score">class="number">0</class="tag">span></class="tag">div>
29<class="tag">div class=class="string">"keyword">class="grid" id="grid"></class="tag">div>
30<class="tag">div class=class="string">"keyword">class="controls"><class="tag">button class=class="string">"keyword">class="btn btn-class=class="string">"keyword">new" onclick="newGame()">🔄 新游戏</class="tag">button></class="tag">div>
31<class="tag">div class=class="string">"keyword">class="hint">方向键 ↑ ↓ ← → 或 滑动</class="tag">div>
32<class="tag">div class=class="string">"keyword">class="gameover" id="gameover"><class="tag">div class=class="string">"keyword">class="gameover-box"><class="tag">h2>🎉 游戏结束!</class="tag">h2><class="tag">p id="finalScore">得分: class="number">0</class="tag">p><class="tag">button class=class="string">"keyword">class="btn btn-class=class="string">"keyword">new" onclick="newGame()">再来一局</class="tag">button></class="tag">div></class="tag">div>
33<class="tag">script src="/tools/share.js"></class="tag">script><class="tag">script src="/assets/pet-cat.js"></class="tag">script>
34<class="tag">script>
35class=class="string">"keyword">var board=[],score=class="number">0;
36class=class="string">"keyword">function newGame(){board=[[class="number">0,class="number">0,class="number">0,class="number">0],[class="number">0,class="number">0,class="number">0,class="number">0],[class="number">0,class="number">0,class="number">0,class="number">0],[class="number">0,class="number">0,class="number">0,class="number">0]];score=class="number">0;
37 document.class="func">getElementById(class="string">'score').textContent=class="string">'class="number">0';document.class="func">getElementById(class="string">'gameover').style.display=class="string">'none';
38 addTile();addTile();render();}
39class=class="string">"keyword">function addTile(){class=class="string">"keyword">var e=[];class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="number">4;i++)class=class="string">"keyword">for(class=class="string">"keyword">var j=class="number">0;j<class="number">4;j++)class=class="string">"keyword">if(!board[i][j])e.push({i,j});
40 class=class="string">"keyword">if(!e.length)class=class="string">"keyword">return;class=class="string">"keyword">var c=e[Math.floor(Math.random()*e.length)];
41 board[c.i][c.j]=Math.random()<.class="number">9?class="number">2:class="number">4;render();}
42class=class="string">"keyword">function render(){
43 class=class="string">"keyword">var g=document.class="func">getElementById(class="string">'grid');g.innerHTML=class="string">'';
44 class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="number">4;i++)class=class="string">"keyword">for(class=class="string">"keyword">var j=class="number">0;j<class="number">4;j++){
45 class=class="string">"keyword">var d=document.createElement(class="string">'div');d.className=class="string">'cell';
46 class=class="string">"keyword">var v=board[i][j];class=class="string">"keyword">if(v){d.textContent=v;d.classList.add(class="string">'t'+Math.min(v,class="number">2048));}
47 g.appendChild(d);}
48 document.class="func">getElementById(class="string">'score').textContent=score;
49}
50class=class="string">"keyword">function slide(row){class=class="string">"keyword">var r=row.filter(class=class="string">"keyword">function(v){class=class="string">"keyword">return v});class=class="string">"keyword">var s=[];class=class="string">"keyword">var i=class="number">0;
51 class=class="string">"keyword">while(i<class="tag">r.length){
52 class=class="string">"keyword">if(i+class="number">1<class="tag">r.length&&r[i]===r[i+class="number">1]){s.push(r[i]*class="number">2);score+=r[i]*class="number">2;i+=class="number">2;}
53 class=class="string">"keyword">else{s.push(r[i]);i++;}}
54 class=class="string">"keyword">while(s.length<class="number">4)s.push(class="number">0);class=class="string">"keyword">return s;}
55class=class="string">"keyword">function moveLeft(){class=class="string">"keyword">var c=false;class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="number">4;i++){class=class="string">"keyword">var n=slide(board[i]);
56 class=class="string">"keyword">for(class=class="string">"keyword">var j=class="number">0;j<class="number">4;j++)class=class="string">"keyword">if(board[i][j]!==n[j])c=true;board[i]=n;}class=class="string">"keyword">return c;}
57class=class="string">"keyword">function rotate(){class=class="string">"keyword">var n=[[class="number">0,class="number">0,class="number">0,class="number">0],[class="number">0,class="number">0,class="number">0,class="number">0],[class="number">0,class="number">0,class="number">0,class="number">0],[class="number">0,class="number">0,class="number">0,class="number">0]];
58 class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="number">4;i++)class=class="string">"keyword">for(class=class="string">"keyword">var j=class="number">0;j<class="number">4;j++)n[j][class="number">3-i]=board[i][j];board=n;}
59class=class="string">"keyword">function move(d){
60 class=class="string">"keyword">for(class=class="string">"keyword">var r=class="number">0;r<class="tag">d;r++)rotate();class=class="string">"keyword">var c=moveLeft();
61 class=class="string">"keyword">for(class=class="string">"keyword">var r=class="number">0;r<(class="number">4-d)%class="number">4;r++)rotate();
62 class=class="string">"keyword">if(c){addTile();class=class="string">"keyword">if(checkGameOver()){document.class="func">getElementById(class="string">'finalScore').textContent=class="string">'得分: '+score;document.class="func">getElementById(class="string">'gameover').style.display=class="string">'flex';}}
63 render();}
64class=class="string">"keyword">function checkGameOver(){class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="number">4;i++)class=class="string">"keyword">for(class=class="string">"keyword">var j=class="number">0;j<class="number">4;j++){
65 class=class="string">"keyword">if(!board[i][j])class=class="string">"keyword">return false;
66 class=class="string">"keyword">if(j<class="number">3&&board[i][j]===board[i][j+class="number">1])class=class="string">"keyword">return false;
67 class=class="string">"keyword">if(i<class="number">3&&board[i][j]===board[i+class="number">1][j])class=class="string">"keyword">return false;}
68 class=class="string">"keyword">return true;}
69document.class="func">addEventListener(class="string">'keydown',class=class="string">"keyword">function(e){
70 class=class="string">"keyword">if(e.key===class="string">'ArrowLeft')move(class="number">0);class=class="string">"keyword">if(e.key===class="string">'ArrowUp')move(class="number">1);
71 class=class="string">"keyword">if(e.key===class="string">'ArrowRight')move(class="number">2);class=class="string">"keyword">if(e.key===class="string">'ArrowDown')move(class="number">3);});
72class=class="string">"keyword">var touchX=class="number">0;document.class="func">addEventListener(class="string">'touchstart',class=class="string">"keyword">function(e){touchX=e.touches[class="number">0].clientX;touchY=e.touches[class="number">0].clientY;});
73document.class="func">addEventListener(class="string">'touchend',class=class="string">"keyword">function(e){
74 class=class="string">"keyword">var dx=e.changedTouches[class="number">0].clientX-touchX,dy=e.changedTouches[class="number">0].clientY-touchY;
75 class=class="string">"keyword">if(Math.abs(dx)>Math.abs(dy))move(dx>class="number">0?class="number">2:class="number">0);class=class="string">"keyword">else move(dy>class="number">0?class="number">3:class="number">1);});
76newGame();
77</class="tag">script><class="tag">div style="text-align:center;padding-top:10px;font-size:12px;color:class=class="string">"keyword">class=class="string">"comment">#class="number">555"><class="tag">a href="source-viewer.php?file=game-class="number">2048.php" style="color:#FF6B35;text-decoration:none;">📖 查看源码</class="tag">a> · 编程小白,AI生成,若体验不佳请多包涵 🙏</class="tag">div>
78</class="tag">body></class="tag">html>
79
Warning: Cannot modify header information - headers already sent by (output started at /www/wwwroot/273059_cn/tools/source-viewer.php:69) in /www/wwwroot/273059_cn/tools/source-viewer.php on line 72
Warning: Cannot modify header information - headers already sent by (output started at /www/wwwroot/273059_cn/tools/source-viewer.php:69) in /www/wwwroot/273059_cn/tools/source-viewer.php on line 73
2048 - η空间
2048
🎯 方向键 ↑↓←→ 合并相同数字,合到2048就赢!手机可滑动。
分数: 0
方向键 ↑ ↓ ← → 或 滑动
🎉 游戏结束!
得分: 0
📖 查看源码 · 编程小白,AI生成,若体验不佳请多包涵 🙏