2017-10-10 58 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