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="tag">title>
4<class="tag">meta name="description" content="经典扫雷游戏,左键挖雷右键插旗。免费在线玩。">
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.info{display:flex;gap:30px;margin:12px class="number">0;font-size:14px;color:class=class="string">"keyword">class=class="string">"comment">#class="number">888}
11.info .num{font-weight:class="number">700;color:class=class="string">"keyword">class=class="string">"comment">#FF6B35}
12.board{display:grid;gap:2px;background:class=class="string">"keyword">class=class="string">"comment">#class="number">222;border:1px solid #class="number">222;border-radius:8px;padding:4px;user-select:none}
13.cell{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:class="number">700;cursor:pointer;border-radius:3px;background:class=class="string">"keyword">class=class="string">"comment">#2a2a2a;transition:background .15s}
14.cell:hover{background:class=class="string">"keyword">class=class="string">"comment">#class="number">333}
15.cell.open{background:class=class="string">"keyword">class=class="string">"comment">#class="number">161616;cursor:default}
16.cell.flag{background:class=class="string">"keyword">class=class="string">"comment">#1a1a2e;color:#facc15}
17.cell.mine{background:class=class="string">"keyword">class=class="string">"comment">#2a1a1a;color:#ef4444}
18.cell.n1{color:class=class="string">"keyword">class=class="string">"comment">#60a5fa}.cell.n2{color:#4ade80}.cell.n3{color:#ef4444}.cell.n4{color:#a78bfa}.cell.n5{color:#f472b6}.cell.n6{color:#34d399}.cell.n7{color:#fbbf24}.cell.n8{color:#class="number">888}
19.controls{margin-top:16px;display:flex;gap:10px}
20.btn{padding:8px 24px;border:none;border-radius:8px;font-size:14px;font-weight:class="number">600;cursor:pointer}
21.btn-class=class="string">"keyword">new{background:class=class="string">"keyword">class=class="string">"comment">#FF6B35;color:#fff}
22.btn-diff{background:transparent;border:1px solid class=class="string">"keyword">class=class="string">"comment">#class="number">333;color:#ccc;padding:8px 12px}
23.btn-diff.active{border-color:class=class="string">"keyword">class=class="string">"comment">#FF6B35;color:#FF6B35}
24</class="tag">style></class="tag">head><class="tag">body>
25<class="tag">h1><class="tag">span class=class="string">"keyword">class="a">💣</class="tag">span> 扫雷</class="tag">h1>
26<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="tag">p>
27<class="tag">div class=class="string">"keyword">class="info"><class="tag">span>🚩 <class="tag">span class=class="string">"keyword">class="num" id="flagCount">class="number">0</class="tag">span></class="tag">span><class="tag">span>⏱ <class="tag">span class=class="string">"keyword">class="num" id="timer">class="number">0</class="tag">span></class="tag">span></class="tag">div>
28<class="tag">div class=class="string">"keyword">class="board" id="board"></class="tag">div>
29<class="tag">div class=class="string">"keyword">class="controls">
30<class="tag">button class=class="string">"keyword">class="btn btn-class=class="string">"keyword">new" onclick="startGame()">🔄 新游戏</class="tag">button>
31<class="tag">button class=class="string">"keyword">class="btn btn-diff active" onclick="setDiff(class="number">0)">初级</class="tag">button>
32<class="tag">button class=class="string">"keyword">class="btn btn-diff" onclick="setDiff(class="number">1)">中级</class="tag">button>
33<class="tag">button class=class="string">"keyword">class="btn btn-diff" onclick="setDiff(class="number">2)">高级</class="tag">button>
34</class="tag">div>
35<class="tag">script src="/tools/share.js"></class="tag">script><class="tag">script src="/assets/pet-cat.js"></class="tag">script>
36<class="tag">script>
37class=class="string">"keyword">var ROWS=class="number">9,COLS=class="number">9,MINES=class="number">10,diff=class="number">0;
38class=class="string">"keyword">var board=[],revealed=[],flagged=[],gameOver=false,first=true,timeInt=null,seconds=class="number">0;
39class=class="string">"keyword">function setDiff(d){diff=d;
40 class=class="string">"keyword">var btns=document.querySelectorAll(class="string">'.btn-diff');
41 btns.forEach(class=class="string">"keyword">function(b,i){b.className=class="string">'btn btn-diff'+(i===d?class="string">' active':class="string">'')});
42 class=class="string">"keyword">if(d===class="number">0){ROWS=class="number">9;COLS=class="number">9;MINES=class="number">10}
43 class=class="string">"keyword">else class=class="string">"keyword">if(d===class="number">1){ROWS=class="number">12;COLS=class="number">12;MINES=class="number">25}
44 class=class="string">"keyword">else{ROWS=class="number">16;COLS=class="number">16;MINES=class="number">50}
45 startGame();}
46class=class="string">"keyword">function startGame(){
47 clearInterval(timeInt);seconds=class="number">0;first=true;gameOver=false;
48 document.class="func">getElementById(class="string">'timer').textContent=class="string">'class="number">0';
49 board=class="func">Array(ROWS).fill().map(class=class="string">"keyword">function(){class=class="string">"keyword">return class="func">Array(COLS).fill(class="number">0)});
50 revealed=class="func">Array(ROWS).fill().map(class=class="string">"keyword">function(){class=class="string">"keyword">return class="func">Array(COLS).fill(false)});
51 flagged=class="func">Array(ROWS).fill().map(class=class="string">"keyword">function(){class=class="string">"keyword">return class="func">Array(COLS).fill(false)});
52 render();updateFlags();}
53class=class="string">"keyword">function placeMines(sr,sc){
54 class=class="string">"keyword">var placed=class="number">0;
55 class=class="string">"keyword">while(placed<class="tag">MINES){
56 class=class="string">"keyword">var r=Math.floor(Math.random()*ROWS),c=Math.floor(Math.random()*COLS);
57 class=class="string">"keyword">if(board[r][c]===-class="number">1||(Math.abs(r-sr)<=class="number">1&&Math.abs(c-sc)<=class="number">1))class=class="string">"keyword">continue;
58 board[r][c]=-class="number">1;placed++;}
59 class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="tag">ROWS;i++)class=class="string">"keyword">for(class=class="string">"keyword">var j=class="number">0;j<class="tag">COLS;j++)
60 class=class="string">"keyword">if(board[i][j]!==-class="number">1){
61 class=class="string">"keyword">var c=class="number">0;
62 class=class="string">"keyword">for(class=class="string">"keyword">var di=-class="number">1;di<=class="number">1;di++)class=class="string">"keyword">for(class=class="string">"keyword">var dj=-class="number">1;dj<=class="number">1;dj++){
63 class=class="string">"keyword">var ni=i+di,nj=j+dj;
64 class=class="string">"keyword">if(ni>=class="number">0&&ni<class="tag">ROWS&&nj>=class="number">0&&nj<class="tag">COLS&&board[ni][nj]===-class="number">1)c++;}
65 board[i][j]=c;}
66}
67class=class="string">"keyword">function reveal(r,c){
68 class=class="string">"keyword">if(r<class="number">0||r>=ROWS||c<class="number">0||c>=COLS||revealed[r][c]||flagged[r][c])class=class="string">"keyword">return;
69 revealed[r][c]=true;
70 class=class="string">"keyword">if(board[r][c]===-class="number">1){gameOver=true;revealAll();render();class=class="string">"keyword">return;}
71 class=class="string">"keyword">if(board[r][c]===class="number">0)
72 class=class="string">"keyword">for(class=class="string">"keyword">var di=-class="number">1;di<=class="number">1;di++)class=class="string">"keyword">for(class=class="string">"keyword">var dj=-class="number">1;dj<=class="number">1;dj++)reveal(r+di,c+dj);
73 render();}
74class=class="string">"keyword">function revealAll(){class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="tag">ROWS;i++)class=class="string">"keyword">for(class=class="string">"keyword">var j=class="number">0;j<class="tag">COLS;j++)
75 class=class="string">"keyword">if(board[i][j]===-class="number">1)revealed[i][j]=true;}
76class=class="string">"keyword">function checkWin(){
77 class=class="string">"keyword">var r=class="number">0;class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="tag">ROWS;i++)class=class="string">"keyword">for(class=class="string">"keyword">var j=class="number">0;j<class="tag">COLS;j++)
78 class=class="string">"keyword">if(revealed[i][j]||board[i][j]===-class="number">1)r++;
79 class=class="string">"keyword">if(r===ROWS*COLS){clearInterval(timeInt);class="func">setTimeout(class=class="string">"keyword">function(){class="func">alert(class="string">'🎉 你赢了!')},class="number">100);}}
80class=class="string">"keyword">function updateFlags(){
81 class=class="string">"keyword">var c=class="number">0;class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="tag">ROWS;i++)class=class="string">"keyword">for(class=class="string">"keyword">var j=class="number">0;j<class="tag">COLS;j++)class=class="string">"keyword">if(flagged[i][j])c++;
82 document.class="func">getElementById(class="string">'flagCount').textContent=c;}
83class=class="string">"keyword">function render(){
84 class=class="string">"keyword">var b=document.class="func">getElementById(class="string">'board');
85 b.style.gridTemplateColumns=class="string">'repeat('+COLS+class="string">',32px)';
86 b.innerHTML=class="string">'';
87 class=class="string">"keyword">for(class=class="string">"keyword">var i=class="number">0;i<class="tag">ROWS;i++)class=class="string">"keyword">for(class=class="string">"keyword">var j=class="number">0;j<class="tag">COLS;j++){
88 class=class="string">"keyword">var d=document.createElement(class="string">'div');d.className=class="string">'cell';
89 class=class="string">"keyword">if(revealed[i][j]){
90 d.classList.add(class="string">'open');
91 class=class="string">"keyword">if(board[i][j]===-class="number">1){d.textContent=class="string">'💣';d.classList.add(class="string">'mine');}
92 class=class="string">"keyword">else class=class="string">"keyword">if(board[i][j]>class="number">0){d.textContent=board[i][j];d.classList.add(class="string">'n'+board[i][j]);}
93 }class=class="string">"keyword">else class=class="string">"keyword">if(flagged[i][j]){d.textContent=class="string">'🚩';d.classList.add(class="string">'flag');}
94 d.class="func">addEventListener(class="string">'click',class=class="string">"keyword">function(r,c){class=class="string">"keyword">return class=class="string">"keyword">function(){
95 class=class="string">"keyword">if(gameOver||revealed[r][c])class=class="string">"keyword">return;
96 class=class="string">"keyword">if(first){placeMines(r,c);first=false;timeInt=class="func">setInterval(class=class="string">"keyword">function(){seconds++;document.class="func">getElementById(class="string">'timer').textContent=seconds;},class="number">1000);}
97 class=class="string">"keyword">if(flagged[r][c])class=class="string">"keyword">return;
98 reveal(r,c);checkWin();
99 }}(i,j));
100 d.class="func">addEventListener(class="string">'contextmenu',class=class="string">"keyword">function(r,c){class=class="string">"keyword">return class=class="string">"keyword">function(e){
101 e.preventDefault();class=class="string">"keyword">if(gameOver||revealed[r][c])class=class="string">"keyword">return;
102 flagged[r][c]=!flagged[r][c];updateFlags();render();
103 }}(i,j));
104 d.class="func">addEventListener(class="string">'touchstart',class=class="string">"keyword">function(r,c){class=class="string">"keyword">return class=class="string">"keyword">function(e){
105 class=class="string">"keyword">var t=class="func">setTimeout(class=class="string">"keyword">function(){e.preventDefault();
106 class=class="string">"keyword">if(gameOver||revealed[r][c])class=class="string">"keyword">return;
107 flagged[r][c]=!flagged[r][c];updateFlags();render();},class="number">500);
108 d._touchTimer=t;
109 }}(i,j));
110 d.class="func">addEventListener(class="string">'touchend',class=class="string">"keyword">function(){class=class="string">"keyword">return class=class="string">"keyword">function(e){
111 clearTimeout(d._touchTimer);
112 }}(i,j));
113 b.appendChild(d);}
114 class=class="string">"keyword">if(gameOver){class=class="string">"keyword">var cells=document.querySelectorAll(class="string">'.cell:not(.open)');
115 cells.forEach(class=class="string">"keyword">function(c){c.style.opacity=class="string">'class="number">0.5'});}
116}
117startGame();
118</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-minesweeper.php" style="color:#FF6B35;text-decoration:none;">📖 查看源码</class="tag">a> · 编程小白,AI生成,若体验不佳请多包涵 🙏</class="tag">div>
119</class="tag">body></class="tag">html>
120
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
扫雷 - η空间
💣 扫雷
💣 左键挖开 · 右键插旗 · 数字=周围雷数 · 挖完所有非雷格子即赢
🚩 0⏱ 0
📖 查看源码 · 编程小白,AI生成,若体验不佳请多包涵 🙏