2017-10-10 76 views
-2

我制作的“tic tac toe”游戏也被称为“naughts and crosses”。井字游戏JavaScript游戏 - 测试匹配模式的用户数量?

每9个平方有很多:

1 2 3 
4 5 6 
7 8 9 

因为每个球员都有去他们选择加入到国家的数量。因此,如果用户1选择了广场1和2,和user2选择了广场4和5则状态物体看起来是这样的:

const state = selected: { 
    user1: [1,2], 
    user2: [4,5] 
} 

后各走各的,我需要检查状态,看是否无论用户拥有3一排。以下是所有可能的获奖号码:

const winingNumbers = [ 
    [1,2,3], // top row 
    [4,5,6], // middle row 
    [7,8,9], // bottom row 
    [1,4,7], // first column 
    [2,5,8], // second column 
    [3,6,9], // last column 
    [1,5,9], // last column 
    [3,6,9], // diagonal 1 
    [3,5,7] // diagonal 2 
];  

如何检查状态以查看是否有用户有行?在这个例子中USER1有一个匹配:

const state = selected: { 
    user1: [6,3,2,1], 
    user2: [9,4,5] 
} 

在这个例子中用户2有一个匹配:

const state = selected: { 
    user1: [1,9,2,8], 
    user2: [5,4,3,6] 
} 

注意这些数字可以是任何顺序和其他数字不匹配可能是在部分国家也。我使用Bable,所以我可以使用ES6语法。

+3

这个问题与[这个问题]有什么不同?(https://stackoverflow.com/questions/46648619/see-if-an-array-contains-all-the-number-from-other-nested-arrays-with- JavaScript的)? –

+0

@NinaScholz看起来我以前的问题并不清楚,也没有人确切地理解需求。这就是为什么我提出了一个新的问题更详细地解释问题。 – Evans

+0

@Evans,那么你不应该再问一个新问题,而是在你的第一个问题中添加信息,并向那些回答的人提供评论。通过接受答案,你表明你对此感到满意,所以现在看起来有点矛盾。在接受答案的地方,人们不会很快提供新的答案,因为看起来问题已经解决了。 – trincot

回答

0

您可以遍历中奖号码数组中的每个数组中的每个数字,然后遍历用户状态中的每个数字,并检查用户的状态是否包含3个数字。像这样:

let winning = false; 
winningNumbers.forEach((winningArray) => { 
    let hasWinningNumbers = true; 
    winningArray.forEach((number) => { 
     if(user.indexOf(number) == -1) 
      hasWinningNumbers = false; 
    }); 

    if(hasWinningNumbers) { 
     winning = true; 
    } 
}); 
+0

我得到一个编译错误。我不认为这个休息是有效的。 – Evans

+0

你说得对,我会解决它。 –

0

做到这一点,使用array.indexOf(元件)> = 0,以检查是否一个元件是在一个阵列:

例如

const winningNumbers = [ 
 
    [1,2,3], // top row 
 
    [4,5,6], // middle row 
 
    [7,8,9], // bottom row 
 
    [1,4,7], // first column 
 
    [2,5,8], // second column 
 
    [3,6,9], // last column 
 
    [1,5,9], // last column 
 
    [3,6,9], // diagonal 1 
 
    [3,5,7] // diagonal 2 
 
]; 
 

 
// user one 
 
const user1 = [3, 5, 7, 8]; 
 

 
function checkIfWin(user) { 
 
    let won = false; 
 
    winningNumbers.forEach(row => { 
 
    if ( user.indexOf(row[0]) > -1 
 
     && user.indexOf(row[1]) > -1 
 
     && user.indexOf(row[2]) > -1) { 
 
     won = true; // for testing, in the real thing do "return true" 
 
    } 
 
    }); 
 
    return won; 
 
} 
 

 
console.log(checkIfWin(user1));

+0

这总是返回true,即使user1只有2个数字,所以cannont可能连续有3个。 – Evans