Thema: Delphi ClientDataBase Frage

Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: ClientDataBase Frage

  Alt 2. Dez 2014, 13:46
Gut, die Datenbank, kann man als Speicher benutzen, aber für das Spiel selber sollte man sich mindestens eine Klasse bauen, mit der man dann einfach arbeiten kann.

Zum Beispiel
Delphi-Quellcode:
type
  TEntity = class
  private
    FName: string;
    FLivePoints: Integer;
    FStrength: Integer;
  public
    constructor Create( const AName: string; ALivePoints, AStrength: Integer );
    procedure Attack( AEntity: TEntity );
    function IsAlive: Boolean;
    property Name: string read FName;
    property LivePoints: Integer read FLivePoints;
    property Strength: Integer read FStrength;
  end;

  { TEntity }

procedure TEntity.Attack( AEntity: TEntity );
begin
  // Selber schlagen?
  if Self = AEntity
  then
    Exit;

  // Lebenspunkte und Stärke verändern sich im Kampf
  Self.FLivePoints := Self.FLivePoints - AEntity.FStrength div 2;
  Self.FStrength := Self.FStrength + AEntity.FStrength div 2;
  AEntity.FLivePoints := AEntity.FLivePoints - Self.FStrength;
end;

constructor TEntity.Create( const AName: string; ALivePoints, AStrength: Integer );
begin
  inherited Create;
  FName := AName;
  FLivePoints := ALivePoints;
  FStrength := AStrength;
end;

function TEntity.IsAlive: Boolean;
begin
  Result := FLivePoints > 0;
end;
Nun kann man zwei Kontrahenten erzeugen und gegenseitig einprügeln lassen
Delphi-Quellcode:
procedure Fight;
var
  L1, L2, LSieger : TEntity;
begin
  L1 := nil;
  L2 := nil;
  LSieger := nil;
  try

    // bereit machen

    L1 := TEntity.Create( 'Peter', 100, 5 );
    L2 := TEntity.Create( 'Wolf', 50, 10 );

    // prügeln bis zum Umfallen

    while L1.IsAlive and L2.IsAlive then
    begin
      case Random(2) of
        0 : L1.Attack( L2 );
        1 : L2.Attack( L1 );
      end;
    end;

    // Auswertung

    if L1.IsAlive then
      LSieger := L1
    else
      LSieger := L2;
    if Assigned( LSieger ) then
      WriteLn( LSieger.Name, ' hat gewonnen!' )
    else
      WriteLn( 'Das Match ging unentschieden aus!' );
  finally
    L1.Free;
    L2.Free;
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat