2013-05-10 82 views
0

這是關於How do I create turns in a Tic Tac Toe game? 我想添加一個選項,一旦點擊一個框不應該被覆蓋。我使用了下面的代碼,並通過網上幾次瀏覽了它,但似乎無法找出答案。現在突然製作所有盒子X而不是X,然後是O然後是X.不幸的是,我正在開發一個基於Web的編輯器,它不支持Jquery,我也無法編輯HTML。在井字游泳站停止覆蓋

var turn = "X"; 

    function next() 
{ 
    turn = turn === "X" ? "O" : "X"; 
    } 

    function play() { 
    if (this.innerHTML === "") 
    { 
    this.innerHTML == turn; 
    next();} 
} 



    function click() 
    { 

    if (this.id == "cell1") 
    { 
     document.getElementById("cell1").innerHTML= turn; 
     play(); 
    } 

    else if (this.id == "cell2") 
    { 
     document.getElementById("cell2").innerHTML = turn; 
     play(); 
    } 

    else if (this.id == "cell3") 
    { 
     document.getElementById("cell3").innerHTML = turn; 
     play(); 
    } 

    else if (this.id == "cell4") 
    { 
     document.getElementById("cell4").innerHTML = turn; 
     play(); 
    } 

    else if (this.id == "cell5") 
    { 
     document.getElementById("cell5").innerHTML = turn; 
     play(); 
    } 

    else if (this.id == "cell6") 
    { 
     document.getElementById("cell6").innerHTML = turn; 
     play(); 
     } 

     else if (this.id == "cell7") 
     { 
     document.getElementById("cell7").innerHTML = turn; 
     play(); 
     } 

     else if (this.id == "cell8") 
     { 
     document.getElementById("cell8").innerHTML = turn; 
     play(); 
     } 

     else if (this.id == "cell9") 
     { 
     document.getElementById("cell9").innerHTML =turn; 
     play(); 
     } 

    } 

    document.getElementById("cell1").onclick = click; 
    document.getElementById("cell2").onclick = click; 
    document.getElementById("cell3").onclick = click; 
    document.getElementById("cell4").onclick = click; 
    document.getElementById("cell5").onclick = click; 
    document.getElementById("cell6").onclick = click; 
    document.getElementById("cell7").onclick = click; 
    document.getElementById("cell8").onclick = click; 
    document.getElementById("cell9").onclick = click; 

我知道我被告知不要重複代碼,但我對此很新穎。也許幾個月的練習會讓我充滿信心 - 現在我發現它更清晰。

P.S:在嘗試添加停止覆蓋單元格的功能之前,它工作正常。在此之前的代碼是:

var nextTurn = 'X'; 
    function changeTurn(){ 
    if(nextTurn == 'X'){ 
     nextTurn = 'O'; 
    } else { 
     nextTurn = 'X'; 
    }  
} 

了新的選擇,我已經改變nextTurn轉向和changeTurn下一個 - 與幫助,從較早前的職位其他用戶。

回答

1

我覺得你的意思爲this.innerHTML == turn;this.innerHTML = turn;

第一種形式的比較,而第二個是一個賦值

+0

在'play()'函數 – SomeShinyObject 2013-05-10 04:14:46

+0

嗨@Orangepill ..我已將語句更改爲賦值,但在運行代碼時它仍然給我X'es。你知道爲什麼嗎?由於代碼對我來說很有意義,所以我沒有任何想法,但是我無論如何都是新手,因此需要專家意見。謝謝! – user221510 2013-05-10 04:35:25

+0

我認爲@Garath與此掛鉤。如果之後仍然有問題,則可能需要嘗試將play函數中的if語句中的===更改爲a ==。我不知道如果一個空元素innerHTML屬性爲null或「」,但與雙等於它不會影響哪一個。 – Orangepill 2013-05-10 04:40:05

0

的問題是在功能上play,因爲你已經設置的innerHTML所以如果聲明絕不會真正。

0

您可能在單元格內有一些空白字符串返回false的比較結果。你的任務中也有兩倍的等值,這應該是一個等值。

更改播放功能是這樣的:

function play() { 
    if (!/[XO]/.test(this.innerHTML)) 
     { 
     this.innerHTML = turn; 
     next(); 
     } 
    } 

正如我在評論中提到,這裏是一個辦法,我會建議爲你的代碼很短的量做整個程序:

首先,在你的細胞,把這個事件處理程序:

onclick="playNew(this)" 

,並創建playNew功能是這樣的:

function playNew(cell) { 
if (!/[XO]/.test(cell.innerHTML)) 
cell.innerHTML = (self.turn = (self.turn == 'X' ? 'O' : 'X')); 
} 

這裏是一個完整的例子(你可能想改進我的HTML;我只是做了divs,並將它們顯示爲表格單元格,並在其中放置連字符以防止它們不可見,因爲如果我不在其中)。

<script> 

function playNew(cell) { 
if (!/[XO]/.test(cell.innerHTML)) 
cell.innerHTML = (self.turn = (self.turn == 'X' ? 'O' : 'X')); 
} 
</script> 

<style> 
.cell { width: 50px; height: 50px; border: solid; display: table-cell } 
</style> 


<div onclick="playNew(this)" class="cell">-</div> 
<div onclick="playNew(this)" class="cell">-</div> 
<div onclick="playNew(this)" class="cell">-</div><br /> 
<div onclick="playNew(this)" class="cell">-</div> 
<div onclick="playNew(this)" class="cell">-</div> 
<div onclick="playNew(this)" class="cell">-</div><br /> 
<div onclick="playNew(this)" class="cell">-</div> 
<div onclick="playNew(this)" class="cell">-</div> 
<div onclick="playNew(this)" class="cell">-</div><br /> 

而且,我的代碼僅僅是X和O的之間的切換,並沒有宣佈獲勝者或跟蹤細胞的位置,或者比賽結束,等我假設你的單元,每個單元有不同的ID,並且您有單獨的邏輯來確定遊戲何時結束以及X或O是否獲勝。

+0

嗨,約瑟夫感謝您的幫助。我改變了上面的播放功能,但現在,所有的單元格都會變成'O',第一個單元格仍然是'X',但點擊它後,它也變成'O' - 你認爲可能有另一個單元格代碼問題?我也嘗試改變其他人提到的innerHTML語句,但這只是給了我X。 – user221510 2013-05-10 04:29:07

+0

當然,我實際上可以提出一個能夠以緊湊的方式完成整個事情的功能。讓我加我的答案。 – 2013-05-10 04:43:36

+0

是的,你是對的默認情況下,每個單元格內都有一個「 - 」。 – user221510 2013-05-10 04:43:40