2016-12-15 17 views
0

有沒有一種方法可以在宣佈獲勝者後在我的tic tac toe板上殺死/突破用戶輸入?我在嘗試使用isFull()函數中的break後發送了警告,但是它仍然會接受用戶在表中後續字詞的輸入。在某個點之後忽略用戶輸入

這裏是一個鏈接,告訴你它是運行: https://jsfiddle.net/n1kn1vLh/2/

function TicTacToe() { 
    this.board = [ 
    [0, 0, 0], 
    [0, 0, 0], 
    [0, 0, 0] 
    ]; 
    this.showhtml = toHTML; 
    this.player2 = "O"; 
    this.player1 = "X"; 
    this.turn = ""; 
} 

function toHTML() { 
    var player = ''; 
    var displayplayer = document.getElementById("displayMessage"); 
    var htmlStr = ''; 
    var gametable = document.getElementById("tictable"); 
    var cell = ''; 
    for (var i = 0; i < this.board.length; i++) { 
    htmlStr += '<tr>'; 
    for (var j = 0; j < this.board[i].length; j++) { 
     if (this.board[i][j] == 0) { 
     this.board[i][j] = cell; 
     htmlStr += ("<td data-i=\"" + i + "\" data-j=\"" + j + "\">" +  this.board[i][j] + "</td>"); 
     } 
     gametable.addEventListener("click", clickHandler, false); 
    } 
    htmlStr += '</tr>'; 
    } 
    gametable.innerHTML = htmlStr; 
    if (this.turn == this.player1 || this.turn == "") { 
    player += ("<p>It is " + this.player1 + "'s turn.</p>"); 
    displayplayer.innerHTML = player; 
    return this.turn = "X"; 
    } else { 
    player += ("<p>It is " + this.player2 + "'s turn.</p>"); 
    displayplayer.innerHTML = player; 
    return this.turn = "O"; 

    } 

    function clickHandler(event) 
    { 
    if (tic.turn == tic.player1) { 
     if (event.target.innerHTML == ''){ 
     event.target.innerHTML = tic.turn; 
     tic.board[event.target.dataset.i][event.target.dataset.j] = tic.turn; 
     tic.turn = tic.player2; 
     document.getElementById("displayMessage").innerHTML = "<p>It is " + tic.turn + "'s turn.</p>"; 
     isFull(); 
     return tic.turn; 
     } else { 
     alert('Invalid Move! Try again.'); 
     } 
    } else { 
     if (event.target.innerHTML == '') { 
     event.target.innerHTML = tic.turn; 
     tic.board[event.target.dataset.i][event.target.dataset.j] = tic.turn; 
     tic.turn = tic.player1; 
     document.getElementById("displayMessage").innerHTML = "<p>It is " + tic.turn + "'s turn.</p>"; 
     isFull(); 
     return tic.turn; 
     } else { 
     alert('Invalid Move! Try again.'); 
     } 
    } 

    } 

    function isFull() { 
    for (var i = 0; i < tic.board.length; i++) { 

     if(tic.board[i][0] == tic.board[i][1] && tic.board[i][0]==tic.board[i][2] && tic.board[i][0]!=0){ 
     alert(tic.board[i][0]+" Wins"); 
     return; 
     } 
    } 
    for (var i = 0; i < tic.board.length; i++) { 

     if(tic.board[0][i] == tic.board[1][i] && tic.board[0][i]==tic.board[2][i] && tic.board[0][i]!=0){ 
     alert(tic.board[0][i]+" Wins"); 
     return; 
     } 
    } 

    if(tic.board[0][0]==tic.board[1][1] && tic.board[0][0] == tic.board[2][2] && tic.board[0][0]!=0){ 
     alert(tic.board[0][0]+" Wins"); 
     return; 
    } 

    if(tic.board[0][2]==tic.board[1][1] && tic.board[0][2] == tic.board[2][0] && tic.board[2][0]!=0){ 
     alert(tic.board[1][1]+" Wins"); 
     return; 
    } 

    } 
} 


tic = new TicTacToe(); 
tic.showhtml(); 

回答

1

可以刪除事件監聽某人贏時:

function isFull() { 
    for (var i = 0; i < tic.board.length; i++) { 
     if(tic.board[i][0] == tic.board[i][1] && tic.board[i][0]==tic.board[i][2] && tic.board[i][0]!=0){ 
     alert(tic.board[i][0]+" Wins"); 
     document.getElementById("tictable").removeEventListener('click', clickHandler); 
     return; 
     } 
    } 

    for (var i = 0; i < tic.board.length; i++) { 
     if(tic.board[0][i] == tic.board[1][i] && tic.board[0][i]==tic.board[2][i] && tic.board[0][i]!=0){ 
     alert(tic.board[0][i]+" Wins"); 
     document.getElementById("tictable").removeEventListener('click', clickHandler); 
     return; 
     } 
    } 

    if(tic.board[0][0]==tic.board[1][1] && tic.board[0][0] == tic.board[2][2] && tic.board[0][0]!=0){ 
    alert(tic.board[0][0]+" Wins"); 
    document.getElementById("tictable").removeEventListener('click', clickHandler); 
    return; 
    } 

    if(tic.board[0][2]==tic.board[1][1] && tic.board[0][2] == tic.board[2][0] && tic.board[2][0]!=0){ 
    alert(tic.board[1][1]+" Wins"); 
    document.getElementById("tictable").removeEventListener('click', clickHandler); 
    return; 
    } 
} 
+0

哇感謝作品像一個魅力。我覺得我應該從一開始就意識到這一點。 –

+0

沒問題,我很樂意幫忙。 – salix

0

添加下面你isFull()

document.getElementById('user input').disabled = true;