AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Klasse mit Konstanten ?

Ein Thema von Neutral General · begonnen am 6. Sep 2005 · letzter Beitrag vom 9. Sep 2005
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#31

Re: Klasse mit Konstanten ?

  Alt 8. Sep 2005, 21:20
Du kannst doch auch einer Variable bei der Definition einen Wert zuweisen:
Delphi-Quellcode:
tclass=class
  var
  rarity:integer=400;
  color:tcolor=clgray;
end;
oder doch nicht... Jetzt hab ich es gerade getestet...

aber ein Konstanten-Array ginge:

Delphi-Quellcode:
type

trune=class
  rarity:integer;
  color:tcolor;
end;

const
  runen=array[1..300] of trune =
  (rarity=1;color=clblack,
   rarity=2;color=clred,
   rarity=1390;color=$ABCDEF,
   ...
   );
Michael Enßlin
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#32

Re: Klasse mit Konstanten ?

  Alt 8. Sep 2005, 22:02
Delphi-Quellcode:
Type
 TRune = Record
   ruRareness : Integer; // Nicht Rarity... Das ist die 'Rarität', also ein Ding, keine Eigenschaft
   ruColor : TColor;
   ruNochwass : TEgal;
   End;
Dann entweder eine Datei (gut zum Anpassen, aber auch gut zum cheaten) oder eine ziemlich grosse Const-Deklaration. Ich schreibe mir dafür immer ein kleines Tool, das die Deklaration z.B. aus einer kleinen DB oder EXCEL -Datei oder so rausliest und die Const-Deklaration bastelt. Der Zugriff auf die Eigenschaften einer Rune erfolgt einfach über das Konstante Array. Was hier über Klassen steht ist imho absoluter Quark. Man kanns mit OOP auch zu weit treiben, finde ich.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#33

Re: Klasse mit Konstanten ?

  Alt 9. Sep 2005, 02: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
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#34

Re: Klasse mit Konstanten ?

  Alt 9. Sep 2005, 08:17
Zitat von Robert_G:
Quark sind Präfixe wie ru... *ulf*
Problem mit RU? Alter Anti-Kommunist? So, wie ich das gelernt habe, bilden sich Präfixe durchaus so, das ein Bezug zu dem Datentyp gezogen werden kann. Aber vermutlich wirst Du auch immer als Erstes einen Code wegen Indentation bemängeln und nicht wegen des Inhaltes... Bleib sachlich...
Zitat von Robert_G:
Bei deinem Record müsste man ja ständig das Ding hin und herschaufeln und es allen Funktionen als Parameter übergeben... *bäh*
Wie bitte? Es geht darum, die Daten erstmal irgendwie im Programm zu halten. Wie man dann darauf zugreift, ist eine andere Frage. Ich kann mir nicht vorstellen, das ich komplette Records übergebe, wenn sie doch als (globale) Konstanten deklariert sind. Ich weiss nicht, wie Du so programmierst, aber ich schaue mir erstmal das Problem an, bevor ich das Werkzeug wähle. Wenn es diverse Runen gibt, die jeweils ein eigenes _Verhalten_ zeigen, sind Klassen vielleicht eine gute Idee, aber wenn nicht, dann ist eine TRune-Klasse ausreichend. Die hat z.B. eine Eigenschaft 'RuneType'.

Schau und lerne:
Delphi-Quellcode:
Type
  TRune = Class (...)
  Public
    Property RuneType : Integer Read....
    Property Rareness : Integer Read GetRareness Write SetRareness;
...
  End;
So, nun rate mal, wie GetRareness und SetRareness implementiert sind? Kommste nicht drauf? Macht nix:
Delphi-Quellcode:
Function TRune.GetRareness : Integer;
Begin
  Result := rcMyRuneData[RuneType].ruRareness;
End;
Wenn ich mir das hier anschaue, komm ich zu dem Schluss, das das kurz, knapp und effektiv ist. Also *kein* Quark.

Tipp: Erst denken, dann meckern. Danke.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#35

Re: Klasse mit Konstanten ?

  Alt 9. Sep 2005, 09:56
Zitat von alzaimar:
Tipp: Erst denken, dann meckern. Danke.
Habe ich.
Das gilt für Präfixe, genauso wie dafür, was Mr "100 Klassen whatsoever" mit dem Record gemacht hätte, den du vorgeschlagen hast.
Wie ich schrieb, wollte ich auch nur eine weitere Möglichkeit zeigen. Meine Lösung hätte den Vorteil, dass immer weitere Ableitungen "reinklinken" könnte.
Im Spiel ruft er nur CreateInstance auf, wenn er eine Rune haben will, was für eine es ist sollte dann zufällig anhand der Häufigkeit gewählt werden.
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#36

Re: Klasse mit Konstanten ?

  Alt 9. Sep 2005, 10:21
Zitat von Robert_G:
Meine Lösung hätte den Vorteil, dass immer weitere Ableitungen "reinklinken" könnte.
Das ist nun wieder IMHO "absoluter Quark". Die Runen haben bis auf minimale Abweichungen in ihren Eigenschaften keine Unterschiede. Dafür braucht man keine abgeleiteten Klassen.
Man kann das denke ich ganz gut mit der TShape-Komponente vergleichen. Es gibt schließlich auch keine Komponenten namens TCircle, TBox, TRoundRect etc. Warum? Weil sie alle--mehr oder weniger--das gleiche machen. Genau wie hier die Runen. Und deshalb wird es über eine Property gesetzt.
Alles andere ist hier schlicht overkill, OOP um seiner selbst willen. Das macht den Code groß, unübersichtlich und vermutlich auch noch langsamer.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#37

Re: Klasse mit Konstanten ?

  Alt 9. Sep 2005, 10:26
Zitat von Robert_G:
Zitat von alzaimar:
Tipp: Erst denken, dann meckern. Danke.
Habe ich.
Und Humor hast Du auch, gut so.

Ich glaube, das war für beide ein Schnellschuss: Ich habe nicht erwähnt, das es mir nur um die Deklaration der Klassen ging. Egal. Letztendlich sind wir uns ja einig.

Und was der tigerman33 sagt, ist eben so einleuchtend wie simpel: Immer locker und "keep it simple".
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#38

Re: Klasse mit Konstanten ?

  Alt 9. Sep 2005, 10:31
Zitat:
Quark...Quark...Quark...Quark...
Kleines Update: Eine Kollegin hat Quarkkkuchen mitgebracht.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#39

Re: Klasse mit Konstanten ?

  Alt 9. Sep 2005, 11:09
Zitat von Robert_G:
Zitat:
Quark...Quark...Quark...Quark...
Kleines Update: Eine Kollegin hat Quarkkkuchen mitgebracht.
Bitte ein Stück per PN an mich. Und den 'Send' Button schön vorsichtig drücken, sonst geht der Kuchen kaputt!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#40

Re: Klasse mit Konstanten ?

  Alt 9. Sep 2005, 12:33
Zitat von alzaimar:
Zitat von Robert_G:
Zitat:
Quark...Quark...Quark...Quark...
Kleines Update: Eine Kollegin hat Quarkkkuchen mitgebracht.
Bitte ein Stück per PN an mich. Und den 'Send' Button schön vorsichtig drücken, sonst geht der Kuchen kaputt!
Sorry geht nicht.
Es gibt noch keine DRM Sytseme für VQKMS (virtual Quarkkuchen mampf streaming). Deshalb könnte ich dir dafür nicht deine "2 Cents" abknöpfen. Also werde ich mich voll und ganz meiner egoistischen VQKMS session widmen. *g*
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 17:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz