2017-08-30 2 views
0

Ich arbeite an einem Spiel, das eine Art Stein Papier Schere System hat, nur komplizierter, mit "Werten" wie 3 Rock Beats 2 Rock, wo man Der Spieler kann die Menge an Steinen wählen, die er in einem Zug verwenden möchte. Dieses Spiel kann/muss mit mehr als 2 Spielern umgehen, aber 2 Spieler sind auch möglich. Ich war nur in der Lage, die mit Werten zu tun, mit diesem Code:NodeJS - Sortieren wie Stein Papier Schere - Dynamische Anzahl der Spieler

 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; 
      } 
     } 

ich für ein System wie Rock Paper Scissors überall geschaut haben, aber alles, was ich war für 2 Spieler finden konnte, und ich bin nicht sicher, wie man mach es mehr. Bitte helfen Sie mir, wenn Sie Zeit haben.

+0

Sie ein bisschen mehr beschreiben, wenn es so etwas wie ** zeitlich abwechselnd ** und andere Spiellogik (wie Erfassung der Gesamtzahl der Spieler oder etwas ähnliches ist .. .) ist es in Echtzeit, alle zur gleichen Zeit, alle ** x ** Sekunden? wir brauchen mehr Info um dir zu helfen: P – EMX

+0

@EMX danke für deine Antwort! Das Spiel ist dynamisch, es kann viele Benutzer behandeln, aber es kann auch umgehen 2. 2 ist ein Minimum. Es gibt keine Rundenzeiten, aber um die Anzahl der Spieler zu erreichen, muss ich nur array.length. Es ist Echtzeit, alle wählen zur gleichen Zeit. – JadBalout

+0

Ich nehme an, Sie verwenden 'socket.io' auch, oder? – EMX

Antwort

0

this helps:

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 
} 
Verwandte Themen