抖音游戏在X和O之间切换

Tic tac toe game switching between X and O

本文关键字:之间 游戏      更新时间:2023-09-26

我正在制作一个Tic-Tac-Toe,但我有点拘泥于在十字圆之间切换(正如你在var列表和函数img中看到的那样)。我该如何让它发挥作用?

Javascript代码

varcode

var vak1 = document.getElementById("vak1");
var vak2 = document.getElementById("vak2");
var vak3 = document.getElementById("vak3");
var vak4 = document.getElementById("vak4");
var vak5 = document.getElementById("vak5");
var vak6 = document.getElementById("vak6");
var vak7 = document.getElementById("vak7");
var vak8 = document.getElementById("vak8");
var vak9 = document.getElementById("vak9");
var circle = "../img/circle.jpg";
var cross = "../img/cross.jpg";
var empty = "../img/empty.jpg";
var Player = document.getElementById("player");

第一个函数说轮到谁了。

function player() {
"use strict";
if (Player.innerHTML == 1) {
    Player.innerHTML = 2;
    window.alert("Speler 2 is aan de beurt");
} else {
    Player.innerHTML = 1;
    window.alert("Speler 1 is aan de beurt");
}
}

应该在x和o图像之间切换的函数。

function img(HTMLTableDataCellElement) {
"use strict";
if (document.getElementById(HTMLTableDataCellElement).className ===  "leeg") {
    document.getElementById(HTMLTableDataCellElement).src = cross;
    document.getElementById(HTMLTableDataCellElement).className = "kruis";
    player();
} else {
    document.getElementById(HTMLTableDataCellElement).src = circle;
    document.getElementById(HTMLTableDataCellElement).className = "rondje";
    player();
}
}

HTML代码:

<head>
    <title>Boter, Kaas en Eieren</title>
    <link rel="stylesheet" href="css/style.css" />
</head>
<body>
    <div id="mainContainer">
        <h1>Boter, Kaas &amp; Eieren</h1>
        <div id="speelveld">
            <table border="0">
                <tr>
                    <td><img class="leeg" id="vak1" alt="" title="" onclick="img(this.id);" src="img/empty.jpg" /></td>
                    <td><img class="leeg" id="vak2" alt="" title="" onclick="img(this.id);" src="img/empty.jpg" /></td>
                    <td><img class="leeg" id="vak3" alt="" title="" onclick="img(this.id);"  src="img/empty.jpg" /></td>
                </tr>
                <tr>
                    <td><img class="leeg" id="vak4" alt="" title="" onclick="img(this.id);" src="img/empty.jpg" /></td>
                    <td><img class="leeg" id="vak5" alt="" title="" onclick="img(this.id);" src="img/empty.jpg" /></td>
                    <td><img class="leeg" id="vak6" alt="" title="" onclick="img(this.id);" src="img/empty.jpg" /></td>
                </tr>
                <tr>
                    <td><img class="leeg" id="vak7" alt="" title="" onclick="img(this.id);" src="img/empty.jpg" /></td>
                    <td><img class="leeg" id="vak8" alt="" title="" onclick="img(this.id);" src="img/empty.jpg" /></td>
                    <td><img class="leeg" id="vak9" alt="" title="" onclick="img(this.id);" src="img/empty.jpg" /></td>
                </tr>
            </table>
        </div> <!-- EINDE SPEELVELD CONTAINER -->
        <div id="game-info">
            <h1>Aan beurt</h1>
            <table class="players-turn" border="0">
                <tr>
                    <td><img width="25" height="25" alt="" title="" src="img/cross.jpg" /></td>
                    <td>Speler</td>
                    <td id="player">1</td>
                </tr>
            </table> <!-- EINDE SPELER AAN ZET TABEL -->
            <h1>Scores</h1>
            <table class="rounds-info">
                <tr>
                    <td><img width="15" height="15" alt="" title="" src="img/cross.jpg" />&nbsp;Speler 1</td>
                    <td>0</td>
                </tr>
                <tr>
                    <td><img width="15" height="15" alt="" title="" src="img/circle.jpg" />&nbsp;Speler 2</td>
                    <td>0</td>
                </tr>
                <tr>
                    <td>Aantal rondes</td>
                    <td>0</td>
                </tr>
            </table> <!-- EINDE INFO TABEL -->
            <button class="game-button">Start spel</button>
        </div> <!-- EINDE GAME-INFO CONTAINER -->
    </div> <!-- EINDE MAINCONTAINER -->
    <script type="text/javascript" src="js/bke.js"></script>
</body>

您需要在img()函数中检查玩家的转向。这应该有效:

function img(HTMLTableDataCellElement) {
"use strict";
  if(Player.innerHTML == 1) {
    document.getElementById(HTMLTableDataCellElement).src = cross;
    document.getElementById(HTMLTableDataCellElement).className = "kruis";
    player();
} else {
    document.getElementById(HTMLTableDataCellElement).src = circle;
    document.getElementById(HTMLTableDataCellElement).className = "rondje";
    player();
}
}

你可以在这个JS Fiddle中看到它的工作:https://jsfiddle.net/j5nmmvdt/1/

一个更完整的解决方案是将当前播放器存储为变量,而不是<td id="player">元素中的HTML。您还可以优化img()函数,以便在kruis-en-rondje之间切换,而无需重复相同的代码。这样的东西会起作用:

function img(HTMLTableDataCellElement) {
    "use strict";
    if(HTMLTableDataCellElement.className ==  "leeg") {
        HTMLTableDataCellElement.src = playerData[currentPlayer-1].src;
        HTMLTableDataCellElement.className = playerData[currentPlayer-1].className;
        player();
    }
}
var playerData = [
  {
    src: "cross",
    className: "kruis"},
  {
    src: "circle",
    className: "rondje"}
];
var vak1 = document.getElementById("vak1");
var vak2 = document.getElementById("vak2");
var vak3 = document.getElementById("vak3");
var vak4 = document.getElementById("vak4");
var vak5 = document.getElementById("vak5");
var vak6 = document.getElementById("vak6");
var vak7 = document.getElementById("vak7");
var vak8 = document.getElementById("vak8");
var vak9 = document.getElementById("vak9");
var circle = "../img/circle.jpg";
var cross = "../img/cross.jpg";
var empty = "../img/empty.jpg";
var currentPlayer = 1;

function player() {
    "use strict";
    currentPlayer = (currentPlayer == 2) ? currentPlayer = 1 : currentPlayer = 2;
    document.getElementById("player").innerHTML = currentPlayer;
    window.alert("Speler "+currentPlayer+" is aan de beurt");
}

您还希望通过只传递this(对象引用)而不是图像id(字符串)来清理HTML和JS。像这样:<img class="leeg" id="vak2" alt="" title="" onclick="img(this);" src="img/empty.jpg" />

我已经更新了JS fiddle,所以你可以在这里看到它是如何工作的:https://jsfiddle.net/j5nmmvdt/3/Hoop dat het helpt u!

如果没有演示,很难说,但问题似乎是,实际上,根据玩家的不同,图像之间没有切换。清理一点后,你的代码看起来像这样:

function img(cell_id) {
    "use strict";
    var selCell = document.getElementById(cell_id);
    if (selCell.className ===  "leeg") {
        selCell.src = cross;
        selCell.className = "kruis";
        player();
    } else {
        selCell.src = circle;
        selCell.className = "rondje";
        player();
    }
}

据我所见,它的作用是:

  1. 检查单元格是否为空
  2. 如果是,请放置一个十字架
  3. 如果没有,则放置一个圆圈

您需要的是:

  1. 检查单元格是否为空
  2. 如果没有,什么也不做
  3. 如果是:
    • 如果轮到1号球员,传中
    • 如果轮到玩家2,放置圆圈

所以,像这样的东西:

function img(cell_id) {
    "use strict";
    var selCell = document.getElementById(cell_id);
    if (selCell.className ===  "leeg") {
        if (Player.innerHTML == 1) {
            selCell.src = cross;
            selCell.className = "kruis";
        } else {
            selCell.src = circle;
            selCell.className = "rondje";
        }
        player();
    }
}

附言:我用"cell_id"替换了"HTMLTableDataCellElement",因为您没有将HTMLTableDataCellElement对象传递给函数。事实上,您只传递了一个id,因此调用传递的变量HTMLTableDataCellElement是令人困惑的。