2017-03-05 49 views
0

所以我正在開發一個簡單的遊戲。邏輯流程是當兩個玩家連接到房間時,遊戲將初始化併發出3秒倒計時事件並伴隨一個按鈕。如果一個玩家點擊該按鈕,則該玩家將發出使他/她成爲遊戲主持人的事件。這個「if else」聲明在我的socket.io/Node.js環境中不起作用

該按鈕將顯示3秒鐘。如果沒有被點擊消失,服務器將隨機選擇主機。

無論按鈕是否被點擊,3秒鐘後所有的客戶端都會發出「就緒」事件。

這是我的代碼。

如果單擊該按鈕,「主機」活動將通過客戶端發出的,和我的服務器端代碼

client.on('host',function(){ 

    var player = room.getPlayer(client.id); 
    player.isHost=true; 


}); 

然後這裏是「準備」事件的服務器端。

client.on("ready", function() { 
    var player = room.getPlayer(client.id); 
    var table = room.getTable(player.tableID); 
    if (2>1) { 
     for (var i = 0; i < table.players.length; i++) { 

     if (table.players[i].isHost===true){ 

      console.log("you are the host") 
     } else { 
      console.log("we are going to randomly pick a host") 
      } 

     } 
    } 
}) 

現在,如果沒有玩家點擊按鈕的終端會顯示

我們將隨機挑選一臺主機

我們將隨機挑選一臺主機

我們要隨機挑選主機

我們要隨機挑選主機

否則它會像

我們將隨機挑選一臺主機

你是主機

我們將隨機挑選一臺主機

你是主機

在這個階段,只有2個客戶被允許進行遊戲,所以players.length是2.看起來if/else將與players.length同時執行?

+0

難道這可能是因爲您正在比較布爾值與'==='比較值和類型嗎? – user82395214

+0

'if/else'會運行'table.players.length'次 - 在你的情況下似乎是'4' –

+0

我看不到你需要運行一個循環,每個玩家都會得到它自己的「你是主機「消息 –

回答

0

我認爲首先要提的是if (2>1) { ...是完全不必要的。代碼將簡單地通過for循環,就好像它不在那裏一樣。

您的代碼除了if語句之外,說實話也沒關係。沒有什麼尖叫「我會導致更多的循環,然後是必要的」。在這一點上,我會建議張貼在項目任何有關:

  1. 多線程
  2. 插槽處理/連接這

外的插座,我相信更多的信息所致。

0

感謝您的幫助。是的for循環是沒有必要的,這是問題的原因。我的解決方案是將它從if-else語句中分離出來。

for (var i = 0; i < table.players.length; i++) { 
} 
//test if Host exit in the table 
if (table.ifHost===true){ 

     console.log("you are the host") 
    } else { 
     var randomNumber = Math.floor(Math.random() * table.playerLimit); 

     var Host=table.players[randomNumber] 
     } 

我發現了插座IO有趣的是,當兩個插槽觸發這個事件,如果主機不退出,第一個將執行其他(noHost),然後創建一個主機。第二個套接字將執行if條件,因爲主機是由前一個套接字創建的....