Hi optiplex,
och, so schwer ist das nicht. Man muss das nur berücksichtigen. Im Grunde heist das, dass ein neuer Spielplan nur erstellt werden darf, wenn die Anzahl der Spieler durch eine Zahl 2^x ohne Rest teilbar ist. Der eingebende Benutzer kann also nacheinander alle Spieler eingeben, am Schluß die fehlende Anzahl dann mit Freilosen auffüllen. Dazu habe ich der Spielerklasse die Eigenschaft PlayerType gegeben.
Delphi-Quellcode:
// Playertyp zur Identification eines Spielers oder Freiloses
TPlayerType = (pt_Person, // Spieler ist eine Person
pt_Looser // Spieler ist ein Freilos
);
{-----------------------------------------------------------------------------
Class: TPlayerClass
Author: OKI
Date: 06-Jun-2009
Describtion: Klasse eines einzelnen Spielers. Der Member PlayerList gibt die
übergeordnete Liste an, die den Spieler hält.
-----------------------------------------------------------------------------}
TPlayerClass = class(TObject)
private
FBirthday : TDateTime;
FFirstName : String;
FName : String;
FPlayCount : Integer; // Anzahl gespielter Spiele
FPlayerList : TPlayerList;
FPlayerType : TPlayerType;
FShowNameMode : TShowNameMode;
FPosition : Integer; // aktueller Platz im Spiel
Jeder angelegte Spieler kann dann in der Spielerverwaltung auch als Freilos definiert werden. Praktischer weise würde man dann natürlich einen Button Freilos hinzufügen implementieren. Damit würde das dann für den Bearbeiter unsichtbar ablaufen.
Zusätzlich kann man später im Programm den Benutzer unterstützen, indem man ihm bei der Anlage der Spieler anzeigt welches Spiel möglich ist und wieviele Spieler noch benötigt werden um ein Turnier komplett zu bekommen.
6 Spieler eingegeben -> 8. Spiel möglich -> noch zwei weitere Spieler/Freilose nötig
10 Spieler eingegeben -> 16. Spiel möglich -> noch 6 weitere Spieler/Freilose nötig
Das sehe ich also nicht als das Problem.
Entscheidend ist, das man sich eine Basis aufbaut, die dir die Chance gibt diese Besonderheiten zu berücksichtigen. Momentan ist es ja so, dass die Spielerliste in meinem Klassenmodell die Spieleliste davon informiert, dass sich bei ihr etwas geändert hat. Ist das die Anzahl der Spieler, so berechnet die Spielerliste automatisch die Anzahl der Spiele neu.
Delphi-Quellcode:
procedure TPlayList.ChangePlayerList;
begin
// Anzahl der Spiele aktualisieren
UpdatePlayCount;
end;
diese ist aktuell noch recht simpel. Das kommt daher, dass ich noch nicht alles verstanden hatte oder wuste. Mit der neuen Erkenntnis kann hier jetzt aber dementsprechend ergänzt werden. Die Methode UpdatePlayCount darf jetzt erst aufgerufen werden, wenn die Anzahl der Spieler eine Zahl = 2^x ist.
Nochmal kurz zum allgemeinen Verständnis. Mit Klassen kannst du dir "einfache" Modelle für Daten und Funktionen schaffen, die einer einheitlichen Struktur unterliegen. Ein Beispiel ist die Klasse TPlayerClass. Ergibt sich eine neue Eigenschaft (später eingefallen etc.) kann man sie einfach in der Basisklasse implementiern. Im eigentlichen Programm kümmert man sich nur noch um den Grafikteil und die Bedienung.
Gruß oki
Gruß oki