Thema: Delphi Problem mit Programm

Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem mit Programm

  Alt 12. Jan 2007, 14:31
Fertig.

Mein Konzept: Es gibt zwei Klassen. Eine verwaltet einen Spieler und die zweite verwaltet die Spielerliste:

Spieler:
Delphi-Quellcode:
  TPlayer = class(TObject)
  private
    FName: String;
    FPunkte: Integer;
    FHasWon: Boolean;
    procedure SetName(Name: String);
    function GetName: String;
    procedure SetPunkte(Punkte: Integer);
    function GetPunkte: Integer;
    function GetHasWon: Boolean;
  public
    property Name: String read GetName write SetName;
    property Punkte: Integer read GetPunkte write SetPunkte;
    property HasWon: Boolean read GetHasWon;
  end;
Spielerliste:
Delphi-Quellcode:
  TPlayerCollection = class(TList)
  private
    function Get(Index: Integer): TPlayer;
  public
    procedure Add(Item: TPlayer);
    function Next(CurrentPlayer: Integer): TPlayer;
    function IndexOf(Item: TPlayer): Integer;
    procedure Free;
    property Items[Index: Integer]: TPlayer read Get;
  end;
Hat man das erstmal, ist die Programmierung kein Problem mehr und reduziert sich auf diese paar Zeilen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  SpielerListe := TPlayerCollection.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  SpielerListe.Free;
end;

procedure TForm1.btnNamenClick(Sender: TObject);
var
  i: Integer;
  Spieler: TPlayer;
  NewItem: TListItem;
begin
  for i := 0 to SpinEdit1.Value - 1 do
  begin
    Spieler := TPlayer.Create;
    Spieler.Name := InputBox('Spielername ' + IntToStr(i+1), 'Name des Spilers', IntToStr(i+1));
    Spieler.Punkte := 201;
    SpielerListe.Add(Spieler);
  end;

  for i := 0 to SpielerListe.Count - 1 do
  begin
    NewItem := ListView1.Items.Add;
    NewItem.Caption := Spielerliste.Items[i].Name;
    NewItem.SubItems.Add(IntToStr(Spielerliste.Items[i].Punkte));
  end;
end;

procedure TForm1.btnStartClick(Sender: TObject);
begin
  CurrentPlayerIdx := 0;
  CurrentPlayer := SpielerListe.Items[CurrentPlayerIdx];
  lblCurrentPlayer.Caption := Format('Spieler: %s', [CurrentPlayer.Name]);
end;

procedure TForm1.btnOKClick(Sender: TObject);
begin
  CurrentPlayer.Punkte := CurrentPlayer.Punkte - sedtFirst.Value - sedtSecond.Value - sedtThird.Value;
  if CurrentPlayer.HasWon then
    ShowMessage(Format('Spieler %s hat gewonnen.', [CurrentPlayer.Name]));
  Listview1.Items[CurrentPlayerIdx].SubItems[0] := IntToStr(CurrentPlayer.Punkte);
  CurrentPlayer := SpielerListe.Next(CurrentPlayerIdx);
  CurrentPlayerIdx := SpielerListe.IndexOf(CurrentPlayer);
  lblCurrentPlayer.Caption := Format('Spieler: %s', [CurrentPlayer.Name]);
end;
Projekt im Anhang.

Nachtrag:
Jetzt könnte man sich noch eine Klasse TGame ausdenken von der man sich weitere Klassen für die verschiedenen Spiele ableitet, die sich dann um die Spielregeln kümmern.
Angehängte Dateien
Dateityp: zip luckiedart_288.zip (237,5 KB, 19x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat