2014-11-03 63 views
-2

我在尋找解釋爲什麼這段代碼在Javascript的作品。需要說明的Javascript TicTacToe-遊戲

理念看起來如下:

   *  273     84 
      *  \    /
      *   1 | 2 | 4 = 7 
      *  -----+-----+----- 
      *   8 | 16 | 32 = 56 
      *  -----+-----+----- 
      *   64 | 128 | 256 = 448 
      *  ================= 
      *   73 146 292 

每當玩家將他的身影,現場的號碼添加到他的得分。 周圍的數字是勝利。

現在有這個檢查:

wins = [7, 56, 448, 73, 146, 292, 273, 84], 
win = function (score) { 
    var i; 
    for (i = 0; i < wins.length; i += 1) { 
     if ((wins[i] & score) === wins[i]) { 
      return true; 
     } 
    } 
    return false; 
}, 

我不現在明白:如果一個玩家在設置字段中圖(編號在田間地頭,爲了事項)1,16,4,2,那麼他的得分是23分。即使他沒有得分7,代碼如何知道他有3連勝? (這是最上面的那一行)因爲代碼只將得分與勝利進行比較,而23不是贏!

+0

你爲什麼想在PHP中做到這一點? PHP是服務器端語言。我可以看到PHP在這裏被使用的唯一方法是用於多人版本,但實際的界面將使用Javascript來構建。 – 2014-11-03 20:56:39

+0

我試圖製作一個多人遊戲版本(分數,玩家和誰轉向它是保存在一個MySQL數據庫) 我希望一切都在PHP上,因爲我不想在這個項目中使用ajax! – TheElbenreich 2014-11-03 21:01:50

+0

那麼你應該在你的問題中說清楚。最簡單的方法是使用Ajax,套接字(如果我誠實地使用套接字,看看Node.JS,它真的很酷),或者我敢說它...... IFrames。 – 2014-11-03 21:06:21

回答

0

它不是比較數字,而是比較哪些位被設置。行wins[i] & score === wins[i]意味着它比較勝利[i]和勝利[i]之間的任何公共比特。

下面是一個使用您的問題中的值的例子,1,16,4,2。

1 = 1 
2 = 10 
4 = 100 
7 = 111 
16 = 10000 

因此,如果你選擇了所有這些領域的是二進制10111,比較,爲7,被翻轉的常見位是111(7),所以它知道有一個勝利,因爲那些3全都設置好了。

+0

哦,謝謝!這更有意義!有沒有關鍵字或我可以查找如何在PHP中執行此操作的方法?我需要尋找什麼? – TheElbenreich 2014-11-03 20:57:36

+0

@TheElbenreich我的建議是,你打開一個不同的問題。 – 2014-11-03 21:00:34

+0

http://php.net/manual/en/language.operators.bitwise.php – Shriike 2014-11-03 21:28:14

1

該算法不僅僅是使用簡單的數學來確定勝利與否。它使用按位算術執行位掩碼來檢查勝利。

每個方塊有不同的位值(起始於板的右上角):

1 = 000000001 
2 = 000000010 
4 = 000000100 
... 
9 = 100000000 

然後添加在獲獎的廣場,以獲得最佳組合:

7 = 000000111 
56 = 000111000 
448 = 111000000 
... 

然後我們可以用你設定的例子1,16,4,2:

23 = 0000001111 

而且當我們用這個位明智和操作要檢查它有最佳組合:

000001111 (23) 
& 000000111 (7) 
    --------- 
    000000111 (7) 

你可以看到的結果是一樣的爲獲勝組合,這是你的算法檢查。