我正在製作一個2人Tic-Tac-Toe項目,而且我遇到了一個問題,我的程序沒有改變播放器並沒有正確切換播放器。另外,我的程序在更新分數時也存在問題,我使用它來通過使用二進制邏輯,按位運算符和數組來確定勝利條件,以確定何時達到勝利條件。Tic-Tac-Toe遊戲不會切換玩家,更新分數或更換玩家
var player1name = "";
var player2name = "";
var firstPlayer = player1name;
var player1 = 0; //score for all games
var player2 = 0; //score for all games
var scoreX = 0; //player "X" score on current board
var scoreO = 0; //player "X" score on current board
var value = 0; //button binary value
var player = "X"; //current player's turn X or O
var winner = ""; //stores winner X or O
var winArray = [7, 56, 448, 73, 146, 292, 273, 84];
var clickedArray = [];
var clicksCount = 0;
var currentPlayer = ""; //get player's name
function start()
{
//alert("start");
player1name = prompt("Enter first player's name:", "");
player2name = prompt("Enter second player's name:", "");
currentPlayer = player1name;
document.getElementById("player").innerHTML = currentPlayer + " choose a square.";
}
function playerMoved(id, value)
{
changeText(id);
updateScore(value);
//check for winner
if (player === "X") {
check4winner(scoreX);
} else {
check4winner(scoreO);
}
//was there a winner?
if (winner !== "") {
//alert("winner:" + winner);
//logic to display winner
document.getElementById("winner").innerHTML = currentPlayer + " won!";
startNewGame();
} else {
changePlayer();
}
switchPlayer();
}
function changeText(id)
{
//alert("changeText: " + player);
//alert(id.innerHTML);
if (id.innerHTML === "") {
//storing id's of clicked div to reset later
clickedArray[clicksCount] = id;
clicksCount = clicksCount + 1;
if (player === "X") {
id.innerHTML = "X";
} else {
id.innerHTML = "O";
}
}
}
function switchPlayer()
{
//alert("switchPlayer");
//switch player prompt
if (currentPlayer === player1name) {
currentPlayer = player2name;
} else {
currentPlayer = player1name;
}
//re-display current player in h2
document.getElementById("player").innerHTML = currentPlayer + " choose a square.";
}
function updateScore(value)
{
//alert("updateScore");
//alert("Update Score for " + player);
if (player === "X") {
scoreX = scorex + value;
alert("scoreX: " + scoreX);
} else {
scoreO = scoreO + value;
alert("scoreO: " + scoreO);
}
alert("PlayerX Score: " + scoreX + " PlayerO Score: " + scoreO);
}
function check4winner(score)
{
//alert("Checking for winner" + score);
var i;
for (i = 0; i < winsArray.length; i++)
{
if ((winsArray[i] & score) === winsArray[i]) {
if (player === "X") {
winner = "X";
} else {
winner = "O";
}
alert(winner + "Won!");
i = 99; //break out of for loop
}
}
}
function changePlayer()
{
//alert("Changed Player: " + player);
if (player === "X") {
player = "O";
} else {
player = "X";
}
document.getElementById("player").innerHTML = currentPlayer + " choose a square.";
}
function startNewGame()
{
//alert("Start new game");
winner = "";
scoreO = 0;
scoreX = 0;
//reset all clicked squares
for (i = 0; i < clickedArray.length; i++)
{
clickedArray[i].innerHTML = "";
}
//change who goes first
if (firstPlayer === player1name) {
firstPlayer = player2name;
} else {
firstPlayer = player1name;
}
currentPlayer = firstPlayer;
document.getElementById("player").innerHTML = currentPlayer + " choose a square.";
//update scores
}
.Table {
display: table;
}
.Row {
display: table-row;
}
.Cell {
display: table-cell;
border: dashed black 2px;
padding: 0px 5px 0px 5px;
height: 50px;
width: 50px;
text-align: center;
vertical-align: middle;
background-color: #3B653D;
color: #FFFEFA;
font-size: xx-large;
}
<body onload="start()">
<div class="Table">
<div class="Title">
<h1>Tic-Tac-Toe</h1>
<h2 id="winner"></h2>
<h2 id="player"></h2>
<div class="Row">
<div class="Cell" onclick="playerMoved(this, 1)"></div>
<div class="Cell" onclick="playerMoved(this, 2)"></div>
<div class="Cell" onclick="playerMoved(this, 4)"></div>
</div>
<div class="Row">
<div class="Cell" onclick="playerMoved(this, 8)"></div>
<div class="Cell" onclick="playerMoved(this, 16)"></div>
<div class="Cell" onclick="playerMoved(this, 32)"></div>
</div>
<div class="Row">
<div class="Cell" onclick="playerMoved(this, 64)"></div>
<div class="Cell" onclick="playerMoved(this, 128)"></div>
<div class="Cell" onclick="playerMoved(this, 256)"></div>
</div>
</div>
</div>
</body>
你能否縮小問題所在,並且只是發表幾行代碼來展示具體問題? – RJM
我會的,但我是編程新手,我不確定我的問題在哪裏。抱歉! –
@BenK如果你能寫出你在這裏發佈的內容,我相信你也可以在代碼中編寫'console.log(variable_name);'來追蹤一些錯誤。你必須有一些想法或期望它應該看起來如何。 – jDo