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)