Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Spielkarten einbinden

  Alt 17. Dez 2010, 02:34
Hier mal mein Idee: lass erst mal die Integer da weg und nutze Enumerations! Zudem wurde ich dann eine EnumToString Funktion einbauen und passenden dann die BMP-Dateien benennen:

Delphi-Quellcode:
uses
  {...} TypeInfo {...};
type
  TKartenwert = (kwBube, kwDame, kwKoenig); // natürlich zu verfollständigen, so wie alles weitere
  TKartenfarbe = (kfEichel, kfLaub {...});

  TKarte = class(TObject)
  private
    FKartenwert: TKartenwert;
    FKartenfarbe: TKartenfarbe;
    FKartenmotiv: TBitmap;
    procedure LoadKartenmotiv();
  public
    constructor Create(AKartenwert: TKartenwert; AKartenfarbe: TKartenfarbe);
end;

function KartenwertToString(AKartenwert: TKartenwert): String;
function KartenfarbeToString(AKartenfarbe: TKartenfarbe): String;


implementation

procedure TKarte.LoadKartenmotiv();
var
  Filename : String;
begin
  Filename := KartenwertToString(FKartenwert) + '_' + KartenfarbeToString(FKartenfarbe) + '.bmp';
  if (not FileExists(Filename)) then
    raise Exception...
  if (Assigned(FBitmap)) then
    FreeAndNil(FBitmap);
  FBitmap := TBitmap.Create();
  FBitmap.LoadFromFile(Filename);
end;

constructor TKarte.Create(AKartenwert: TKartenwert; AKartenfarbe: TKartenfarbe);
begin
  inherited Create();

  FKartenwert := AKartenwert;
  FKartenfarbe := AKartenfarbe;
  
  LoadKartenmotiv();
end;

// hier wende ich einen kleinen Trick an, da ich faul bin :mrgreen:
// daher muss TypInfo in die uses Liste!

function KartenwertToString(AKartenwert: TKartenwert): String;
begin
  Result := Delete(GetEnumName(TypeInfo(TKartenwert), Integer(AKartenwert)), 1, 2)
end;

function KartenfarbeToString(AKartenfarbe: TKartenfarbe): String;
begin
  Result := Delete(GetEnumName(TypeInfo(TKartenfarbe), Integer(AKartenfarbe)), 1, 2)
end;
Wurde jetzt irgendwie mehr als ich schreiben wollte
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat