Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Spielplan: "Spieler1 vs Spieler2", "Spieler3


Pansenen - So 28.08.05 13:52
Titel: Spielplan: "Spieler1 vs Spieler2", "Spieler3
Also mein Problem: ein Spiel kann man mit 2-6 Spielern spielen. Wenn die Anzahl der Spieler ausgewählt wurde soll nun ein Plan erstellt werden:
- immer nur ein Spieler gegen einen anderen Spieler
- jede Begegnung soll nur einmal vorkommen (is ja klar)
- es sollen alle Spieler relativ regelmäßig rankommen, d.h. nicht dass erst der erste Spieler nacheinander gegen 2-6 spielt, sondern meinetwegen als Bsp.:
erstens: 1 vs 2
zweitens: 3 vs 4
drittens: 5 vs 6
viertens: 1 vs 3
usw....
das soll aber auch meinetwegen bei nur 5 Spielern oder 3 klappen...
Thx in advance

Moderiert von user profile iconTino: Titel geändert.


Tino - So 28.08.05 13:59

Hallo!

Das einfachste wäre wohl ein zwei Dimiensionales Array zu erstellen und dort dann zu vermerken welche Spieler mit welchen Spielern schon gespielt hat und dann einfach per Zufall nach und nach die noch nicht zusammengespielten Spieler ermitteln.

Gruß
Tino


Pansenen - So 28.08.05 16:12

Wie meinst du das? Würdest du jetzt meinetwegen ein integer array[1..6,1..6] erstellen, und woran merkst du dann, welche schon gespielt haben? Das mit randomize würde ich mir auch vorstellen auf jeden Fall. Aber die Antwort ist doch recht allgemein, ich habe zwar eine allgemeine Vermutung, was du meinst, wäre aber dankbar wenn du das ein bisschen genauer ausführen würdest (vielleicht mit ein paar Zeilen Quelltext oder so)...
Cya + Thx


BenBE - So 28.08.05 16:25

Du kannst sowas machen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
TPartie = record
    Spieler1: Integer;
    Spieler2: Integer;
end;

Gespielt : Array [1..61..6of Boolean;

Procedure GetSpiel: TPartie;
begin
    Repeat
        Result.Spieler1 := 1 + Random(6);
        Result.Spieler2 := 1 + Random(6);
    Until not Gespielt[Result.Spieler1, Result.Spieler2] and (Result.Spieler1 <> Result.Spieler2);
    Gespielt[Result.Spieler1, Result.Spieler2] := True;
    Gespielt[Result.Spieler2, Result.Spieler1] := True;
end;


Die Zeilen 11 und 12 ermitteln zufällig ein Spiel.
Zeile 13 prüft, ob das besagte Spiel schonmal stattgefunden hat und außerdem, dass nicht ein Spieler gegen sich selbst spielt.
Zeile 14 und 15 sorgen nur dafür, dass kein Spiel erneut ausgeführt wird.

WICHTIG: Prüfen, dass mindestens ein Spiel ungespielt ist ;-)


Pansenen - So 28.08.05 16:57

Thx für die schnelle und gute Antwort
Thema erledigt