将数字与JavaScript进行比较

将数字与JavaScript进行比较,javascript,tic-tac-toe,Javascript,Tic Tac Toe,如何循环一组数字,并将它们与多组数字进行比较。我正在尝试为一个Tic Tac Toe项目编程游戏逻辑。当玩家点击一个方块时,被点击的方块数存储在p1take或p2take中。我试图通过这些数组循环,并将数字与获胜所需的方块数字进行比较。只有第一个if语句有效,我认为它不是平方数的bc,而是因为数组中有3个数。以下是我目前掌握的代码: const turnTaken = { X: [], O: [] } var whosTurn = 'X'; let p1Taken = tur

如何循环一组数字,并将它们与多组数字进行比较。我正在尝试为一个Tic Tac Toe项目编程游戏逻辑。当玩家点击一个方块时,被点击的方块数存储在p1take或p2take中。我试图通过这些数组循环,并将数字与获胜所需的方块数字进行比较。只有第一个if语句有效,我认为它不是平方数的bc,而是因为数组中有3个数。以下是我目前掌握的代码:

const turnTaken = {
    X: [],
    O: []
}

var whosTurn = 'X';

let p1Taken = turnTaken.X; 
let p2Taken = turnTaken.O; 

const gameGrid = document.getElementsByClassName("grid");
const message = document.getElementById("message");

for(i=0, l=gameGrid.length; i < l; i++){ 
    const boardNum = gameGrid[i].getAttribute("value");

    gameGrid[i].addEventListener('click', function(e) { 

        if(whosTurn == 'X') {
            message.innerHTML = "O's Turn";
            player1Turn(e);
        } else {
            message.innerHTML = "X's Turn";
            player2Turn(e);
        }
    });         
}


function player1Turn(e){
    const clickedValue = e.target.getAttribute("value");
    const clicked = e.target;

    const xIcon = document.createElement("IMG");
    const srcX = "img/x-icon.png";
    xIcon.setAttribute("src", srcX);

    clicked.appendChild(xIcon);
    p1Taken.push(clickedValue);
    whosTurn = 'O';  

    player1CheckWin(p1Taken);

}

function player2Turn(e){    
    const clickedValue = e.target.getAttribute("value");
    const clicked = e.target;

    const oIcon = document.createElement("IMG");
    const srcO = "img/o-icon.png";
    oIcon.setAttribute("src", srcO);

    clicked.appendChild(oIcon);
    p2Taken.push(clickedValue);
    whosTurn = 'X';

    player2CheckWin(p2Taken);

}


function player1CheckWin(p1Taken){

    for(var i=0; i < p1Taken.length; i++) {

        if(p1Taken.length > 2) {

            if(p1Taken[i] == 1 || p1Taken[i] == 2 || p1Taken[i] == 3) { 
    console.log("first");
                    message.innerHTML = "X Won!";
            } else if(p1Taken[i] == 4 || p1Taken[i] == 5 || p1Taken[i] == 6) {
                    console.log("second");

                    message.innerHTML = "X Won!";
            } else if(p1Taken[i] == 7 || p1Taken[i] == 8 || p1Taken[i] == 9) {
                    console.log("third");

                    message.innerHTML = "X Won!";
            } else if(p1Taken[i] == 1 || p1Taken[i] == 4 || p1Taken[i] == 7) {
                    message.innerHTML = "X Won!";
            } else if(p1Taken[i] == 2 || p1Taken[i] == 5 || p1Taken[i] == 8) {
                    message.innerHTML = "X Won!";
            } else if(p1Taken[i] == 3 || p1Taken[i] == 6 || p1Taken[i] == 9) {
                    message.innerHTML = "X Won!";
            } else if(p1Taken[i] == 1 || p1Taken[i] == 5 || p1Taken[i] == 9){
                    message.innerHTML = "X Won!";
            } else if(p1Taken[i] == 3 || p1Taken[i] == 5 || p1Taken[i] == 7) {
                message.innerHTML = "X Won!";
            } else {
                break;
            }
        } else {
            break;
        }
    }
}

function player2CheckWin(p2Taken){

    for(var j=0; j < p2Taken.length; j++) {

        if(p2Taken.length > 2) {

            if(p2Taken[j] == 1 || p2Taken[j] == 2 || p2Taken[j] == 3) {
                    message.innerHTML = "O Won!";
            } else if(p2Taken[j] == 4 || p2Taken[j] == 5 || p2Taken[j] == 6) {
                    message.innerHTML = "O Won!";
            } else if(p2Taken[j] == 7 || p2Taken[j] == 8 || p2Taken[j] == 9) {
                    message.innerHTML = "O Won!";
            } else if(p2Taken[j] == 1 || p2Taken[j] == 4 || p2Taken[j] == 7) {
                    message.innerHTML = "O Won!";
            } else if(p2Taken[j] == 2 || p2Taken[j] == 5 || p2Taken[j] == 8) {
                    message.innerHTML = "O Won!";
            } else if(p2Taken[j] == 3 || p2Taken[j] == 6 || p2Taken[j] == 9) {
                    message.innerHTML = "O Won!";
            } else if(p2Taken[j] == 1 || p2Taken[j] == 5 || p2Taken[j] == 9){
                    message.innerHTML = "O Won!";
            } else if(p2Taken[j] == 3 || p2Taken[j] == 5 || p2Taken[j] == 7) {
                message.innerHTML = "O Won!";
            } else {
                break;
            }
        } else {
            break;
        }
    }   
}
const turntake={
X:[],
O:[]
}
var whosurn='X';
设p1take=turntake.X;
设p2take=turntake.O;
const gameGrid=document.getElementsByClassName(“网格”);
const message=document.getElementById(“消息”);
对于(i=0,l=gameGrid.length;i2){
如果(p1take[i]==1 | | p1take[i]==2 | | p1take[i]==3){
控制台日志(“第一”);
message.innerHTML=“X赢得!”;
}如果(p1take[i]==4 | | p1take[i]==5 | | p1take[i]==6){
控制台日志(“第二”);
message.innerHTML=“X赢得!”;
}else if(p1take[i]==7 | | p1take[i]==8 | | p1take[i]==9){
控制台日志(“第三”);
message.innerHTML=“X赢得!”;
}else if(p1take[i]==1 | | p1take[i]==4 | | p1take[i]==7){
message.innerHTML=“X赢得!”;
}else if(p1take[i]==2 | | p1take[i]==5 | | p1take[i]==8){
message.innerHTML=“X赢得!”;
}else if(p1take[i]==3 | | p1take[i]==6 | | p1take[i]==9){
message.innerHTML=“X赢得!”;
}else if(p1take[i]==1 | | p1take[i]==5 | | p1take[i]==9){
message.innerHTML=“X赢得!”;
}else if(p1take[i]==3 | | p1take[i]==5 | | p1take[i]==7){
message.innerHTML=“X赢得!”;
}否则{
打破
}
}否则{
打破
}
}
}
功能播放器2Checkwin(第2页){
对于(var j=0;j
您需要更正比较逻辑

改变这个

p1take[i]==1&&2&&3

p1take[i]==1&&p1take[i]==2&&p1take[i]==3

其他人也是如此

&&
运算符希望对表达式进行比较,在本例中,您给出的第一个表达式为
p1take[i]==1
,这是正确的,但给出的第二个和第三个表达式为“2”和“3”,它们是真实值

关于逻辑部分,上面的代码仍然不能给出正确的结果,因为您希望相同的东西
p1take[i]
同时等于多个值

因此,只是一个提示,
p1take
将其保留为take tile no的数组&使用条件为

p1take.包括(1)和&p1take.包括(2)和&p1take.包括(3)


我只选择一个谓词:

p1Taken[i] == 1 && 2 && 3
这是
true
iff以下所有条件均为true:

  • p1take[i]
    类似于
    1
    (在必要的铸造之后)
  • 2
    true
    (必要的铸造后)
  • 3
    true
    (必要的铸造后)
  • 所以我知道数字
    2
    3
    是真实的,因此转换为布尔值都是
    true
    。如果要将[i]与3个数字进行比较,则需要进行3次比较:

    p1Taken[i] == 1 || p1Taken[i] == 2 || p1Taken[i] == 3
    
    如果数字始终为整数,则可以使用范围:

    p1Taken[i] >= 1 && p1Taken[i] <= 3
    
    你想说什么