Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem : Spieler-Paarungen für Turnierverwaltung... (https://www.delphipraxis.net/29411-problem-spieler-paarungen-fuer-turnierverwaltung.html)

Nightshade 8. Sep 2004 21:17


Problem : Spieler-Paarungen für Turnierverwaltung...
 
Hallo...

Ich hab ein kleines Denk-Problem :)

Ich will für einen Dart-Verein ein Programm Schreiben,
daß die Vereins-Rangliste verwaltet und ausrechnet.

Folgendes Problem :

Ich habe eine Bestimme Anzahl an Spielern (X), diese sollen
im Jeder-gegen-Jeden Modus gegeneinander spielen.
Nun möchte ich mit dem Programm ermitteln, wer gegen wen spielt.
Das hört sich einfacher an als es ist...

Beispiel :

7 Spieler :

So könnten in der ersten Runde

1 gegen 2 ,
3 gegen 4 ,
5 gegen 6 spielen,
und 7 setzt aus.

In der zweiten Runde

2 gegen 3 ,
4 gegen 5 ,
6 gegen 7 ,
und 1 setzt aus.

Und so weiter...

So und diese Blöcke möchte ich nun ermitteln.
Ich habe allersings keine Ahnung wie ...
Das einzige, was ich weiss, ist die Summe der Spiele die stattfinden :

Summe = (Spieler * (Spieler -1) ) / 2

Hat jemand da ne Idee, oder ein änliches Problem ?

fiasko 8. Sep 2004 22:04

Re: Problem : Spieler-Paarungen für Turnierverwaltung...
 
Hallo,

ich würde ein Objekt Spieler erstellen, das enthält u.a. eine Liste mit den bereits gespielten Gegnern.

Dann einfach für jede Runde eine Runden-Liste nehmen, alle Spieler reintuhen und dann immer einen nehmen und einen passenden dazu rausnhemen (und die Gegenspielerlisten der Spieler aktuallisieren). Ein passender Spieler ist einer gegen den noch nicht gespielt wurde (also einfach durchprobieren mit denen die noch in der Rundenliste enthalten sind). Wer als einziger übrig bleibt setzt aus (oder keinen gültigen Gegner hat).

Das einfach solange machen bis man für keinen mehr einen Gegner findet.

Das Modell ist sozusagen eine Urne wo die Spieler drinne sind, und man zieht einfach immer einen raus, macht eine Markierung gegen welchen Gegner er spielt oder legt ihn zurück wenn es keinen Gegner gibt. Wenn die Urne leer ist oder man keine Gegner findet schütet man wieder alles zusammen und es geht von vorn los.

Hoffe das war verständlich :-)

Bin mir jetzt nicht ganz sicher ob nicht auch mal 2 Leute in einer Runde übrigbleiben, die schon gegeneinander gespielt haben...

bttb930 8. Sep 2004 22:05

Re: Problem : Spieler-Paarungen für Turnierverwaltung...
 
Liste der Anhänge anzeigen (Anzahl: 1)
siehe anlage

Snoop007 8. Sep 2004 23:35

Re: Problem : Spieler-Paarungen für Turnierverwaltung...
 
ich würds so machen

Code:
  alle spieler erfassen
  reihenfolge beliebig ändern

  anzahl _spielder / 2
  (gibt in deinem fall einen ungeraden wert)
  diese in liste A und B speichern
  wenn ungerade
    solange
      nimm aus der liste der ungeraden einen spieler beliebigen raus und merke diesen
    dieser schon gelost wurde wiederhole dies
   (er kommt automatisch in die nächste runde; muss also wieder angefügt werden -> alle spieler erfassen )

Nightshade 10. Sep 2004 18:04

Re: Problem : Spieler-Paarungen für Turnierverwaltung...
 
So, um mal ein bisserl ins Detail zu gehen, zeige ich mal was ich schon habe.

Delphi-Quellcode:
type TBegegnungsState = ( bsPlayAble, bsPlaying, bsPlayed );

type TSpieler = record
  Name : string;
  Index : integer;
  HF : string;
  SG : string;
  HS : integer;
end;

type TBegegnung = class(TComponent)
  public
    Spieler1 : TSpieler;
    Spieler2 : TSpieler;
    erg1 : Integer;
    erg2 : Integer;
    State : TBegegnungsState;
    constructor Create(AOwner: TComponent); override;
    destructor destroy; override;
    procedure ShowErgDialog;
end;
Delphi-Quellcode:
  private
     Begegnungsliste : TObjectList;
In Begegnungsliste sind alle Begegnungen gespeichert, die stattfinden werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz