console
var row = 10;
var col = 10;
var maxCount = 10;
var isFirstOpen = true;
var grid = init_grid();
var count = document.getElementById('count');
count.innerHTML = maxCount;
var time = document.getElementById('time');
var timer = setInterval(function() {
let seconds = (parseFloat(time.innerHTML) + 0.1).toFixed(1);
time.innerHTML = seconds;
},
100)
function init_grid() {
let gridHtml = '';
for (let i = 0; i < row; i++) {
gridHtml += '<tr>'
for (let j = 0; j < col; j++) {
gridHtml += '<td><span class="blocks" onmousedown="block_click(' + i + ',' + j + ',event)"></span></td>';
}
gridHtml += '<tr>'
}
document.getElementById('grid').innerHTML = gridHtml;
let blocks = document.getElementsByClassName('blocks');
let grid = new Array();
for (let i = 0; i < blocks.length; i++) {
if (i % col === 0) {
grid.push(new Array());
}
blocks[i].count = 0;
grid[parseInt(i / col)].push(blocks[i]);
}
return grid;
}
function block_click(_i, _j, e) {
if (grid[_i][_j].isOpen) {
return;
}
if (e.button === 0) {
if (isFirstOpen) {
isFirstOpen = false;
let count = 0;
while (count < maxCount) {
let ri = Math.floor(Math.random() * row);
let rj = Math.floor(Math.random() * col);
if (! (ri === _i && rj === _j) && !grid[ri][rj].isMine) {
grid[ri][rj].isMine = true;
count++;
for (let i = ri - 1; i < ri + 2; i++) {
for (let j = rj - 1; j < rj + 2; j++) {
if (i > -1 && j > -1 && i < row && j < col) {
grid[i][j].count++;
}
}
}
}
}
}
block_open(_i, _j);
function block_open(_i, _j) {
let block = grid[_i][_j];
op(block);
function op(block) {
block.isOpen = true;
block.style.background = '#ccc';
block.style.cursor = 'default';
}
if (block.isMine) {
block.innerHTML = '雷';
for (let i = 0; i < row; i++) {
for (let j = 0; j < col; j++) {
block = grid[i][j];
if (!block.isOpen && block.isMine) {
op(block);
block.innerHTML = '雷';
}
}
}
clearInterval(timer);
alert("游戏结束");
} else if (block.count === 0) {
for (let i = _i - 1; i < _i + 2; i++) {
for (let j = _j - 1; j < _j + 2; j++) {
if (i > -1 && j > -1 && i < row && j < col && !grid[i][j].isOpen && !grid[i][j].ismine) {
block_open(i, j);
}
}
}
} else {
block.innerHTML = block.count;
}
}
}
else if (e.button === 2) {
let block = grid[_i][_j];
if (block.innerHTML !== '▲') {
block.innerHTML = '▲';
} else {
block.innerHTML = '';
}
}
let isWin = true;
count.innerHTML = maxCount;
for (let i = 0; i < row; i++) {
for (let j = 0; j < col; j++) {
let block = grid[i][j];
if (block.innerHTML === '▲') {
count.innerHTML = parseInt(count.innerHTML) - 1;
}
if (!block.isMine && !block.isOpen) {
isWin = false;
}
}
}
if (isWin) {
clearInterval(timer);
alert("游戏胜利");
}
}
<title>
扫雷
</title>
<body ondragstart='return false' oncontextmenu='self.event.returnValue=false'>
<div id='bar'>
<span class='bar'>
剩余雷数:
<label id='count'>
0
</label>
</span>
<span class='bar'>
计时:
<label id='time'>
0
</label>
s
</span>
</div>
<table id='grid'>
</table>
</body>
#bar {
text-align: center;
margin-bottom: 20px;
}
.bar {
height: 25px;
width: 150px;
line-height: 25px;
display: inline-block;
border: solid 1px #000;
margin-left: 20px;
margin-right: 20px;
}
#grid {
margin: auto;
}
.blocks {
width: 30px;
height: 30px;
line-height: 30px;
display: block;
text-align: center;
border: solid 1px #000;
user-select: none;
cursor: pointer;
}
.blocks:hover {
background: #0af;
}