2014-05-13 80 views
0

我正在嘗試實現Tic Tac Toe遊戲的邏輯,我幾乎已經制作了一個邏輯,但是我在將數據推送到數組時被卡住了。這是我創建的一個小提琴。無法將數據推入陣列

http://jsfiddle.net/afzaal_ahmad_zeeshan/6bgjp/1/

讓我解釋一下整個事情給你!

我正在嘗試使用表中的9個td作爲可能獲勝的8個行。爲此,我根據它們在表格中的位置給出了一些tds類名。

的HTML是簡單

<div class="vicvacvoe"> 
    <table> 
     <tr> 
      <td class="line1 line4 line7"></td> 
      <td class="line1 line5"></td> 
      <td class="line1 line6 line8"></td> 
     </tr> 
     <tr> 
      <td class="line2 line4"></td> 
      <td class="line2 line5 line7 line8"></td> 
      <td class="line2 line6"></td> 
     </tr> 
     <tr> 
      <td class="line3 line4 line8"></td> 
      <td class="line3 line5"></td> 
      <td class="line3 line6 line7"></td> 
     </tr> 
    </table> 
</div> 

只是一個簡單的表9個TDS的CSS是不是相對於這個所以離開它,我猜。

jQuery對此也很簡單。但我無法將數據推送到陣列。

var vic = $('.vicvacvoe table tr td'); 
    var player = 1; 
    var tick = '✓'; 
    var cross = 'X'; 
    var user1 = []; 
    var user2 = []; 
    vic.click(function() { 
     var className = $(this).attr('class'); 
     if (className != 'dead') { 
      // A new board place to write on... 
      // Now do the processes here... 
      if (player == 1) { 
       // First player! 
       var cArray = className.split(' '); 
       for (i = 0; i < cArray.length; i++) { 
        for (j = 0; j < user1.length; j++) { 
         // check for each class 
         if (user1[j] != cArray[i]) { 
          user1.push(cArray[i]); 
         } 
        } 
       } 
      } else { 
       /* code for second player, the same */ 
      } 
      $(this).text('Works!'); 
      $(this).attr('class', 'dead'); 
     } 
    }); 

這是整個jQuery腳本。實際上,當我運行代碼時,它確實到達堆棧的末尾(到類屬性更改腳本),並鎖定td以進一步處理,並寫入Works!也在td中。但是我無法在該用戶的Array內獲得classNames。我想保存每個用戶的線路號碼,然後檢查他是否有3個點填充。我需要數組部分的幫助。

謝謝!

回答

0

你的問題就在這裏:

for (j = 0; j < user1.length; j++) { 

添加到user1陣列的唯一地方是在這個循環中。現在數組最初是空的,所以很明顯,這個循環永遠不會迭代,因爲user1.length總是0.

我認爲你的意圖與這一點的代碼是檢查值是否已經在數組中,在這種情況下,我建議使用$.inArray

+0

哦,我從來沒有與該登場了!嗯,或者不是這樣,只是使用'if(user1.lenght!= 0){'?你認爲什麼會更好? :) –

+0

如果你是我猜測,試圖檢查數組中的存在,我會使用'inarray'。 –

1

我更喜歡簡單,所以你可以使用indexOf檢查類是否已經是用戶的陣列中,像這樣:

if (player == 1) { 
    // First player! 
    var cArray = className.split(' '); 
    for (i = 0; i < cArray.length; i++) { 
      if(user1.indexOf(cArray[i]) == -1) { 
       user1.push(cArray[i]); 
      } else { 
       // css class is already in the array    
      } 
    } 
}