检查当前玩家是否在 JavaScript 中赢得了 Tic Tac Toe 游戏
Checking the if current player has won the game of Tic Tac Toe in JavaScript
我正在用 html CSS 和 JavaScript 制作一个简单的井字棋。没有实施计算机 AL 播放器。只有两个玩家轮流。我的 checkWinner 功能不起作用,我不知道如何确定获胜者。有人建议我创建二维数组来存储我在名为 winCombos 的变量中所做的获胜组合。我正在遍历所有这些并与单元格数组不同位置的 currentPlayer 进行比较,但它不起作用。可能我做的完全错了。有人能帮帮我吗。谢谢
var player1 = "X";
var player2 = "O";
var cells = Array.from(document.querySelectorAll(".cell"));
var currentPlayer = player1;
var winner = "";
var winCombos = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]];
function checkWinner(arr, curPlayer){
arr.forEach(function(subArr){
var counter = 0;
subArr.forEach(function(elem){
if(cells[elem] === curPlayer){
counter++;
if(counter == 2 ){
winner = curPlayer;
alert(winner);
}
}
});
});
}
function move(e){
if(e.target.className === "cell" && e.target.textContent === ""){
e.target.textContent = currentPlayer;
checkWinner(winCombos, currentPlayer);
currentPlayer = (currentPlayer === player1)?player2:player1;
}
}
document.querySelector(".board").addEventListener("click", move);
.container{
width: 400px;
height: 480px;
background: tomato;
margin: 50px auto;
text-align: center;
padding: 10px;
}
.board{
width: 90%;
margin: 20px auto;
}
.board .cell{
width: 118px;
height: 100px;
float: left;
text-align: center;
line-height: 80px;
font-size: 80px;
font-weight: bold;
border: 1px solid #fff;
color: #fff;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div class="container">
<div class="board">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
</div>
</body>
</html>
两件事:使用 innerHTML
获取 div 的内容,而不是包含整个 div 的字符串。还要检查是否实际上连续 3 个,而不仅仅是 2 个。(或者您可以将 counter++;
移到检查之后,并保留 counter == 2
)
if(cells[elem].innerHTML === curPlayer){
counter++;
if(counter == 3 ){
winner = curPlayer;
alert(winner);
}
}
var player1 = "X";
var player2 = "O";
var cells = Array.from(document.querySelectorAll(".cell"));
var currentPlayer = player1;
var winner = "";
var winCombos = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]];
function checkWinner(arr, curPlayer){
arr.forEach(function(subArr){
var counter = 0;
subArr.forEach(function(elem){
if(cells[elem].innerHTML === curPlayer){
counter++;
if(counter == 3 ){
winner = curPlayer;
alert(winner);
}
}
});
});
}
function move(e){
if(e.target.className === "cell" && e.target.textContent === ""){
e.target.textContent = currentPlayer;
checkWinner(winCombos, currentPlayer);
currentPlayer = (currentPlayer === player1)?player2:player1;
}
}
document.querySelector(".board").addEventListener("click", move);
.container{
width: 400px;
height: 480px;
background: tomato;
margin: 50px auto;
text-align: center;
padding: 10px;
}
.board{
width: 90%;
margin: 20px auto;
}
.board .cell{
width: 118px;
height: 100px;
float: left;
text-align: center;
line-height: 80px;
font-size: 80px;
font-weight: bold;
border: 1px solid #fff;
color: #fff;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div class="container">
<div class="board">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
</div>
</body>
</html>
我正在用 html CSS 和 JavaScript 制作一个简单的井字棋。没有实施计算机 AL 播放器。只有两个玩家轮流。我的 checkWinner 功能不起作用,我不知道如何确定获胜者。有人建议我创建二维数组来存储我在名为 winCombos 的变量中所做的获胜组合。我正在遍历所有这些并与单元格数组不同位置的 currentPlayer 进行比较,但它不起作用。可能我做的完全错了。有人能帮帮我吗。谢谢
var player1 = "X";
var player2 = "O";
var cells = Array.from(document.querySelectorAll(".cell"));
var currentPlayer = player1;
var winner = "";
var winCombos = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]];
function checkWinner(arr, curPlayer){
arr.forEach(function(subArr){
var counter = 0;
subArr.forEach(function(elem){
if(cells[elem] === curPlayer){
counter++;
if(counter == 2 ){
winner = curPlayer;
alert(winner);
}
}
});
});
}
function move(e){
if(e.target.className === "cell" && e.target.textContent === ""){
e.target.textContent = currentPlayer;
checkWinner(winCombos, currentPlayer);
currentPlayer = (currentPlayer === player1)?player2:player1;
}
}
document.querySelector(".board").addEventListener("click", move);
.container{
width: 400px;
height: 480px;
background: tomato;
margin: 50px auto;
text-align: center;
padding: 10px;
}
.board{
width: 90%;
margin: 20px auto;
}
.board .cell{
width: 118px;
height: 100px;
float: left;
text-align: center;
line-height: 80px;
font-size: 80px;
font-weight: bold;
border: 1px solid #fff;
color: #fff;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div class="container">
<div class="board">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
</div>
</body>
</html>
两件事:使用 innerHTML
获取 div 的内容,而不是包含整个 div 的字符串。还要检查是否实际上连续 3 个,而不仅仅是 2 个。(或者您可以将 counter++;
移到检查之后,并保留 counter == 2
)
if(cells[elem].innerHTML === curPlayer){
counter++;
if(counter == 3 ){
winner = curPlayer;
alert(winner);
}
}
var player1 = "X";
var player2 = "O";
var cells = Array.from(document.querySelectorAll(".cell"));
var currentPlayer = player1;
var winner = "";
var winCombos = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]];
function checkWinner(arr, curPlayer){
arr.forEach(function(subArr){
var counter = 0;
subArr.forEach(function(elem){
if(cells[elem].innerHTML === curPlayer){
counter++;
if(counter == 3 ){
winner = curPlayer;
alert(winner);
}
}
});
});
}
function move(e){
if(e.target.className === "cell" && e.target.textContent === ""){
e.target.textContent = currentPlayer;
checkWinner(winCombos, currentPlayer);
currentPlayer = (currentPlayer === player1)?player2:player1;
}
}
document.querySelector(".board").addEventListener("click", move);
.container{
width: 400px;
height: 480px;
background: tomato;
margin: 50px auto;
text-align: center;
padding: 10px;
}
.board{
width: 90%;
margin: 20px auto;
}
.board .cell{
width: 118px;
height: 100px;
float: left;
text-align: center;
line-height: 80px;
font-size: 80px;
font-weight: bold;
border: 1px solid #fff;
color: #fff;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div class="container">
<div class="board">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
</div>
</body>
</html>