2013-03-28 2 views
2

현재 웹 (HTML, CSS, Javascript)을 사용하여 기본 Tic Tac Toe 게임 (멀티 플레이어, AI 없음)을 작성 중입니다. 게임 로직은 분명히 자바 스크립트 안에 있습니다. 나는 질문이있다. 다음은 내 코드입니다.JavaScript Tic Tac Toe - 배열 내의 모든 가능한 조합 찾기

window.onload = function() { 
    console.log("Page has loaded"); 
} 
var ctx; 
var turn = 0; 
var winningCombo = [ 
    [1, 4, 7], 
    [2, 5, 8], 
    [3, 6, 9], 
    [1, 2, 3], 
    [4, 5, 6], 
    [7, 8, 9], 
    [1, 5, 9], 
    [3, 5, 7] 
]; 
var playedComboX = []; 
var playedComboO = []; 
var filledSquares = [0]; 
var filled = false; 
console.log(winningCombo.length); 
var checkWinnerX = function() { 
    for(var i = 0; i < winningCombo.length; i++) { 
     console.log('Its in the X check winner loop'); 
     if((winningCombo[i][0] == playedComboX[0]) && (winningCombo[i][1] == playedComboX[1]) && (winningCombo[i][2] == playedComboX[2])) { 
      alert("Congrats, you have won!"); 
      return true; 
     } 
     return false; 
    } 
} 
var checkWinnerO = function() { 
    for(var i = 0; i < winningCombo.length; i++) { 
     console.log('Its in the 0 check winner loop'); 
     if(winningCombo[i][0] == playedComboO[0] && winningCombo[i][1] == playedComboO[1] && winningCombo[i][2] == playedComboO[2]) { 
      console.log('It has passed the if statement for X'); 
      alert("Congrats, you have won!"); 
      return true; 
     } 
     return false; 
    } 
} 
var checkWinner = function() {} 
var draw = function (squareNumber) { 
    console.log('draw has been called'); 
    var squareID = "square" + squareNumber; 
    var squareClicked = document.getElementById(squareID); 
    ctx = squareClicked.getContext('2d'); 
    for(var i = 0; i < filledSquares.length; i++) { 
     if(filledSquares[i] == squareNumber) { 
      filled = true; 
     } else { 
      filled = false; 
     } 
    } 
    if(filled == true) { 
     alert("Invalid Move! Square is already occupied"); 
    } else { 
     filledSquares.push(squareNumber); 
     ctx.beginPath(); 
     if(turn % 2 == 0) { 
      //Drawing a 'X' 
      ctx.moveTo(20, 20); 
      ctx.lineTo(135, 135); 
      ctx.moveTo(135, 20); 
      ctx.lineTo(20, 135); 
      ctx.lineWidth = 6; 
      ctx.stroke(); 
      turn++; 
      playedComboX.push(squareNumber); 
      checkWinnerX(); 
     } else { 
      //Drawing a Circle 
      ctx.arc(75, 75, 65, 2 * Math.PI, false); 
      ctx.lineWidth = 6; 
      ctx.stroke(); 
      turn++; 
      playedComboO.push(squareNumber); 
      checkWinnerO(); 
     } 
    } 
} 

는 지금의 checkWinner 기능 만 winningCombo 배열에서 배열 요소와 정확히 일치 확인 (예 : 조합 3,1,2 대신 1,2,3 다음 등록하지 않을 경우). 어쨌든 각 요소의 3 가지 숫자의 가능한 모든 조합을 확인할 수 있습니까? 내 설명이 이해되기를 바래, 고마워.

추신 : 코드 중 하나라도 잘 쓰지 않는다면 용서해주세요. 게임을 쓰는 것은 처음입니다. 그러나 당신이 바라는만큼 중요합니다!

업데이트 2 :

var checkWinnerX = function() { 
    for(var i = 0; i < winningCombo.length; i++) { 
     console.log('Its in the X check winner loop'); 
     if((winningCombo[i][0] == sortedArrayX[0]) && (winningCombo[i][1] == sortedArrayX[1]) && (winningCombo[i][2] == sortedArrayX[2])) { 
      alert("Congrats, you have won!"); 
      return true; 
     } 
     return false; 
    } 
} 
+1

http://stackoverflow.com/questions/13577484/permutation-need-help-to-code – zerkms

+0

너무 쉽게 jsfiddle에 넣고 debug –

답변

0

정렬 winningCombo에 비해 전 경기 배열입니다.

playedComboO.sort(function (a, b) { 
    return a - b; 
}); 

나는 playedComboO.sort() (그리고 playedComboX.sort())도 작동 할 수 있다고 생각하지만, 기본 정렬 기능은 문자열이 아닌 숫자입니다.

+0

답장을 보내 주셔서 감사합니다. .sort() 함수를 살펴 보았지만 오름차순 또는 내림차순으로 정렬합니다. 3 가지 조합을 모두 확인하려면 어떻게해야합니까? 여기에 checkWinner 함수 중 하나에 추가 한 내용이 있습니다.이 함수는 sort 함수를 구현하는 방법을 잘 모르겠습니다. 그러나 그것은 작동하지 않습니다. –

+0

@JeetMehta 당신은'.sort'의 결과를 무언가에 저장할 필요가 있습니다. –

+0

좋아요. 그래서 위의 update 2에 나온 것입니다. 그냥 playsComboX의 정렬 된 버전을 만들어서 sortedArrayx에 저장했습니다. 작동하지 않습니다. 내가 너를 제대로 이해하지 못하면 사과한다. –

0

내가 그것을 할 수있는 더 좋은 방법이 생각 :

for(var i = 0; i < winningCombo.length; i++) { 
    if (playedComboO.indexOf(winningCombo[i][0]) >= 0) { 
     if (playedComboO.indexOf(winningCombo[i][1]) >= 0) { 
      if (playedComboO.indexOf(winningCombo[i][2]) >= 0) { 
       //blah blah blah you win whatever 
      alert("Congrats, you have won!"); 
     return true; 
      } 
     } 
    } 
}