2017-08-30 17 views
0

私は、3種類のロックビート2つのロックなどの "値"を使用して、より複雑な、ロックペーパーはさみシステムの種類を持つゲームに取り組んでいますプレイヤーは1回転で使用したい岩石の量を選択できます。このゲームでは2人以上のプレイヤーを扱うことができますが、2人のプレイヤーも対応できます。私はこのコードを使用して、値のみであることを行うことができました:NodeJS - ロックペーパーはさみのようなソート - プレーヤーの動的数

 array.push({ "player": player, "score": parseInt(cardInformation.value), "Seat": i, element: cardInformation.element}); 

     array.sort(function (a, b) { 
      return b.score - a.score; 
     }); 

     var rank = 1; 
     var lastWinner = -1; 
     for (var i = 0; i < array.length; i++) { 
      if (i > 0 && array[i].score < array[i - 1].score) { 
       rank++; 
      } 
      array[i].rank = rank; 
      array[i].winStatus = loss; 
      if(rank == 1) { 
       if(lastWinner != -1) { 
        array[lastWinner].winStatus = tie; 
        array[i].winStatus = tie; 
       } else 
        array[i].winStatus = win; 
       lastWinner = i; 
      } 
     } 

私は岩紙はさみのようなシステムのためにすべての上に見てきたが、私は見つけることができるすべては2人の選手のためだったと私はどのようにわかりませんよそれをもっと作る。時間があれば私を助けてください。

+0

次のようなものがあるかどう**もう少し時限ターンを記述する必要があります**および他のゲームロジック(プレイヤーまたは類似のものの合計数を検出するように.. 。)それはリアルタイムで、すべて同時に**毎秒**秒ですか? P – EMX

+0

@EMXお返事ありがとうございます!ゲームはダイナミックで、多くのユーザーを処理できますが、2を処理することもできます.2は最小です。タイムドターンはありませんが、プレイしているプレイヤーの数を取得するには、配列を長さにするだけです。それはリアルタイムで、彼らはすべて同時に選ぶ。 – JadBalout

+0

あなたは 'socket.io'も使っていると思いますよね? – EMX

答えて

0

希望はこのことができます:

const TURN_INTERVAL = 10//seconds 
const GAME_STATE = { 
    status:1, // 1:player action is allowed/0:player action is frozen 
    turnData:{ // temp storage for playerIDs grouped by value chosen 
    1:[], //paper 
    2:[], //scissors 
    3:[] //rock 
    }, 
    versus:{ //what kills what 
    1:3, 
    2:1, 
    3:2 
    } 
} 

function GlobalTurn(){ 
    console.log('[Round]','started') 
    GAME_STATE.status = 0; // players must wait for turn end response 
    for(var i=1; i<4;i++){ // notify each group of how many they killed 
    var thisGroupKills = GAME_STATE.versus[i]; //which is the weak group against this one 
    var totalKilled = GAME_STATE.turnData[thisGroupKills].length //how much this group has killed 
    console.log('group',i,'killed a total of',totalKilled) //send to clients instead 
    /* Here you can iterate over each playerID if you need to : 
    for(var j=0; j<GAME_STATE.turnData[i].length){ 
    console.log('player',GAME_STATE.turnData[i],'killed a total of',totalKilled) 
    } 
    */ 
    } 
    EndTurn() 
} 

function EndTurn(){ 
    console.log('Next round will start in',TURN_INTERVAL,'seconds') 
    GAME_STATE.turnData = {1:[],2:[],3:[]} //reset for next round 
    GAME_STATE.status = 1; // players can send actions (their pick) 
    setTimeout(GlobalTurn,TURN_INTERVAL*1000); //prepare next round calculator 
} 
関連する問題