返回
用 JS 征服井字棋:决战胜利与终局
前端
2024-01-18 20:50:59
井字棋的胜利与终局(JS 实现——下)##
在上一篇中,我们创建了井字棋游戏的框架,包括创建棋盘、添加点击事件监听器和交替玩家回合。现在,让我们继续完善游戏,实现判断胜利、平局和显示获胜信息的功能。
封装判断胜利函数
为了确定获胜者,我们需要封装一个函数来检查棋盘上的符号是否形成获胜组合。获胜组合包括:
- 水平行中三个相同符号
- 垂直行中三个相同符号
- 对角线中三个相同符号
我们可以使用嵌套循环来遍历棋盘并检查每个可能组合。以下代码演示了如何封装该函数:
function checkWinner() {
// 检查水平行
for (let i = 0; i < 3; i++) {
if (board[i][0] && board[i][0] === board[i][1] && board[i][1] === board[i][2]) {
return board[i][0];
}
}
// 检查垂直行
for (let i = 0; i < 3; i++) {
if (board[0][i] && board[0][i] === board[1][i] && board[1][i] === board[2][i]) {
return board[0][i];
}
}
// 检查对角线
if (board[0][0] && board[0][0] === board[1][1] && board[1][1] === board[2][2]) {
return board[0][0];
}
if (board[0][2] && board[0][2] === board[1][1] && board[1][1] === board[2][0]) {
return board[0][2];
}
return null;
}
判断平局
当棋盘上所有方格都被填满,但没有玩家获胜时,则游戏平局。我们可以通过检查棋盘上是否有空方格来判断平局。以下代码演示了如何封装该函数:
function checkTie() {
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (!board[i][j]) {
return false;
}
}
}
return true;
}
展示获胜信息
当有玩家获胜或游戏平局时,我们需要向用户展示获胜或平局的信息。我们可以使用以下代码向用户显示信息:
function displayResult(winner) {
if (winner) {
alert(`恭喜 ${winner} 获胜!`);
} else {
alert("平局!");
}
}
重新开始游戏
当游戏结束时,我们希望用户能够重新开始游戏。我们可以使用以下代码重置游戏:
function resetGame() {
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
board[i][j] = null;
}
}
currentPlayer = "X";
displayBoard();
}
整合所有功能
现在,我们将所有功能整合到我们的游戏中。当玩家点击方格时,我们将检查获胜情况,判断平局情况,并显示获胜或平局信息。如果游戏结束,我们将提供重置游戏的选项。
// 获取棋盘元素
const boardElement = document.getElementById("board");
// 创建棋盘
const board = [
[null, null, null],
[null, null, null],
[null, null, null],
];
// 当前玩家
let currentPlayer = "X";
// 添加点击事件监听器
boardElement.addEventListener("click", (e) => {
// 获取点击方格的坐标
const row = e.target.dataset.row;
const col = e.target.dataset.col;
// 检查方格是否已被点击
if (board[row][col]) {
return;
}
// 玩家在方格上落子
board[row][col] = currentPlayer;
// 检查获胜情况
const winner = checkWinner();
// 检查平局情况
const tie = checkTie();
// 根据结果显示获胜或平局信息
if (winner) {
displayResult(winner);
return;
} else if (tie) {
displayResult();
return;
}
// 交替玩家回合
currentPlayer = currentPlayer === "X" ? "O" : "X";
// 显示棋盘
displayBoard();
});
// 显示棋盘
function displayBoard() {
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
const cell = document.getElementById(`cell-${i}-${j}`);
cell.textContent = board[i][j] || "";
}
}
}
// 重置游戏
const resetButton = document.getElementById("reset");
resetButton.addEventListener("click", resetGame);
通过以上代码,我们完成了一个功能完善的井字棋游戏,包括判断胜利、平局和显示获胜信息的功能。现在,玩家可以享受这个经典游戏,并通过不断改进代码来提升游戏体验。
备注:
本代码演示了井字棋游戏的核心逻辑,但未包含所有必要的样式和布局。开发者可以根据自己的需要添加样式和布局,以创建更美观和用户友好的游戏界面。