前言
今天来还原童年记忆中的扫雷游戏,主要是让Trae用代码实现这个游戏的核心功能,你是否还记得初中上计算机课,偷偷背着老师玩扫雷游戏,今天就看看Trae怎么实现。
这个游戏的核心功能
先把这个核心逻辑发给Trae,看看他完成的是不是你想要的童年记忆
- 游戏开始时,玩家会看到一个由方格组成的网格,其中一些方格内藏有地雷。
- 玩家通过点击方格来揭开其内容,若点击到地雷,则游戏结束。
- 若点击的方格没有地雷,则会显示该方格周围相邻方格中地雷的数量。
- 玩家可以右键标记疑似藏有地雷的方格,防止误触。
- 玩家需要在不触碰地雷的前提下,揭开所有没有地雷的方格,才算通关。

这效果、这完成度已经不错了,看起来有些微信小游戏的味道了,右上角还很贴心的安排上音效按钮,如果不喜欢我们可以关闭音效,沉浸式的扫雷。
Trae代码解读
通过设定网格的行列数和地雷的总数,来初始化游戏的布局,生成一个二维数组来表示游戏面板,通过for循环来填充网格,随机放置地雷的位置。
ini
for (let i = 0; i < rows; i++) {
const row = [];
for (let j = 0; j < cols; j++) {
row.push({
isMine: false,
isRevealed: false,
isMarked: false,
neighborMines: 0
});
}
grid.push(row);
}
const minesToPlace = totalMines;
let minesPlaced = 0;
while (minesPlaced < minesToPlace) {
const row = Math.floor(Math.random() * rows);
const col = Math.floor(Math.random() * cols);
if (!grid[row][col].isMine) {
grid[row][col].isMine = true;
minesPlaced++;
}
}
通过遍历网格,计算每个非地雷方格周围相邻地雷的数量
ini
for (let i = 0; i < rows; i++) {
for (let j = 0; j < cols; j++) {
if (!grid[i][j].isMine) {
grid[i][j].neighborMines = countNeighborMines(i, j);
}
}
}
通过事件监听实现玩家点击揭开或标记方格的动作,并判断游戏是否胜利或失败
ini
board.addEventListener('click', (e) => {
const col = Math.floor((e.clientX - boardRect.left) / cellSize);
const row = Math.floor((e.clientY - boardRect.top) / cellSize);
revealCell(row, col);
checkGameStatus();
});
board.addEventListener('contextmenu', (e) => {
e.preventDefault();
const col = Math.floor((e.clientX - boardRect.left) / cellSize);
const row = Math.floor((e.clientY - boardRect.top) / cellSize);
toggleMarkCell(row, col);
});
最后是来自Trae自己对这款扫雷的总结,主要是游戏功能和设计,还有考虑到游戏体验,非常的人性化
Trae在生成时,考虑的情况,主要是地雷、数字提示、计时器、难度选择等因素
总结
1、这个游戏的核心功能,主要是靠玩家来标记,以及揭开,Trae非常人性化的支持双击快速揭开,来让高级玩家有好的游戏体验。
2、考虑到游戏玩家可能没玩过,Trae也是帮我们设计了三个游戏难度,不会让新手玩家没有体验感直接进入到地狱难度,可以一步步的体验到游戏的难度。

你是否也玩过在课堂上偷偷的这个游戏呢?啊哈哈哈,你有没有被老师抓到过?