AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Klasse mit Konstanten ?

Ein Thema von Neutral General · begonnen am 6. Sep 2005 · letzter Beitrag vom 9. Sep 2005
 
Robert_G
(Gast)

n/a Beiträge
 
#29

Re: Klasse mit Konstanten ?

  Alt 9. Sep 2005, 01:52
Zitat von alzaimar:
Was hier über Klassen steht ist imho absoluter Quark. Man kanns mit OOP auch zu weit treiben, finde ich.
Quark war, dass class methods vergessen wurden. Quark war, das MetaClasses vergessen wurden...
Quark sind Präfixe wie ru... *ulf*
Bei deinem Record müsste man ja ständig das Ding hin und herschaufeln und es allen Funktionen als Parameter übergeben... *bäh*

Wieviel Sinn es im Endeffekt hat kann ich nicht sagen. Ich wollte nur eine weitere Möglichkeit zeigen.
Mit den Schnipsel unten kannst du TRune.CreateInstance aufrufen und du bekommst zufällig eine Rune einer der registrierten Klassen.

Delphi-Quellcode:
uses
   Graphics;

type
   TFrequency = 1..100;

   TRune = class
   published
   protected
      class procedure Register;
      class procedure Unregister;
      class function getColor : TColor; virtual;
   public
      property Color : TColor read getColor;

      class function Frequency : TFrequency; virtual; abstract;
      constructor Create; virtual;
      class function CreateInstance : TRune;
   end;

   TRuneClass = class of TRune;

implementation
uses
   Contnrs;
var
   ClassList : TClassList;

constructor TRune.Create;
begin
end;

class function TRune.CreateInstance: TRune;
var
   RuneClass : TRuneClass;
begin
   // Finde eine Runenklasse, zufällig und anhand ihrer Häufigkeit....
   RuneClass := TRuneClass(ClassList[XXX]);
   Result := RuneClass.Create();
end;

class function TRune.getColor: TColor;
var
   Red, Green, Blue : Byte;
   Frequency : TFrequency;
begin
   Frequency := self.Frequency();

   if Frequency < 51 then
   begin
      Blue := 0;
      Green := 5 * Frequency;
      Red := 255 - Green;
   end
   else
   begin
      Red := 0;
      Blue := 5 * (Frequency - 50);
      Green := 255 - Blue;
   end;
   result := Red + Green shl 8 + Blue shl 16;
end;

class procedure TRune.Register;
begin
   if ClassList.IndexOf(Self) = -1 then
      ClassList.Add(Self)
   else
      raise TRuneClassAlreadyRegisteredException(self);
end;

class procedure TRune.Unregister;
begin
   ClassList.Remove(Self)
end;

initialization
   ClassList := TClassList.Create();
finalization
   ClassList.Free();
end.
Hier eine Beispiel rune:
Delphi-Quellcode:
uses
   uRune;

type
   TSampleRune = class(TRune)
   public
      class function Frequency: TFrequency; override;
   end;

implementation

{ TSampleRune }

class function TSampleRune.Frequency: TFrequency;
begin
   Result := 15;
end;

initialization
   TSampleRune.Register();
finalization
   TSampleRune.Unregister();
end.
Frequency muss kein statischer Wert sein. Bei bestimmten/allen Runen typen, kannst du es ja vom Spielgeschehen abhängig machen.
Aber in einer Instance method hat das ganz sicher _nix_ zu suchen, IMHO.
Verpasse der TRune noch Eigenschaften so dass du damit auch etwas anfangen kannst und gut ist...
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz