2016-04-25 10 views
0

Ich habe ein Poker-Spiel, wo 2 bis 5 Spieler das Spiel vor dem Start-Taste gedrückt werden.Sie sind zu einem Spieler Arrays-Array als Objekte mit Benutzer-ID und Benutzernamen hinzugefügt.müssen durch ein Array von dynamischer Größe durchlaufen php

Ich brauche meine current mit dem Spieler-Objekt füllen dann auf einer Schaltfläche klicken (Anruf/heben/fold) bewegt sich auf den nächsten in der Reihe Illusion des Spiels zu geben Sitz bewegen

Wenn der Start zu setzen Wenn Sie auf click klicken, wird der aktuelle Benutzer auf das erste Element im Array gesetzt, das funktioniert.

$thisPokergame->State['CurrentUser'] = RESET($thisPokergame->State['Players']); 

dann im, diesen Versuch

if($thisPokergame->State['CurrentUser'] == end($thisPokergame->State['Players'])) 
    { 
     $thisPokergame->State['CurrentUser'] = reset($thisPokergame->State['Players']); 
    } 
    else{ 
     $thisPokergame->State['CurrentUser'] = next($thisPokergame->State['Players']);; 
    } 

der, wenn Werke von mir beispiel wenn sie der letzte Spieler im Array es aktuelle Benutzer auf den ersten gesetzt und damit auch die Aussage in dem anderes.

Wenn ich sie zusammenstelle, bekomme ich currentuser als falsch und ich kann den Grund nicht sehen. Jeder hat eine Lösung oder einen besseren Weg, es zu tun?

+0

Warum verwenden Sie keine Variable, um die aktuelle Spielerposition zu verfolgen? Sie beginnen mit '$ activePosition = 0' für player1 und verwenden dann' $ currentUser = $ thisPokergame-> State ['Players] [$ activePosition]; 'Wenn Sie den Spieler wechseln, erhöhen Sie den Zähler' $ counter = ++ $ counter/5; 'wenn Sie 5 Spieler haben. Oder ist die Position in Ihrem "Staat" wichtig? – olibiaz

Antwort

1

Sie haben dieses Problem, weil die Funktionen, die Sie verwenden, den internen Array-Zeiger verschieben.

Sie werden immer false im else Teil Ihrer bedingten bekommen, denn wenn man end($thisPokergame->State['Players']) im if Zustand verwenden, können Sie das interne Array Zeiger auf das das letzte Element bewegt haben. Dann in der else, wenn Sie next($thisPokergame->State['Players']) tun, erhalten Sie false, weil es keine Elemente mehr gibt.

Ohne sicher zu wissen, was in CurrentUser oder Players ist ich nicht sicher bin, wie dies stattdessen behandelt werden könnte, aber ich denke, das funktionieren könnte:

$player = array_shift($thisPokergame->State['Players']); 
$thisPokergame->State['Players'][] = $player; 
$thisPokergame->State['CurrentUser'] = reset($thisPokergame->State['Players']); 

Im Grunde nur den ersten Spieler in der Liste dreht von Spieler an das Ende der Liste und stellen Sie dann den aktuellen Benutzer auf den neuen ersten Spieler in der Liste.

+0

Ja, das macht Sinn. Gibt es einen alternativen Weg, es zu tun? –

+0

@stephenreilly Ich habe gerade die Antwort mit etwas aktualisiert, von dem ich denke, dass es funktionieren könnte. Es ist jedoch an meinem Ende nicht getestet. Nur meine Theorie. –

+0

ok danke, wo ist das? –

Verwandte Themen