Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Klasse mit Konstanten ? (https://www.delphipraxis.net/52918-klasse-mit-konstanten.html)

Speedmaster 6. Sep 2005 18:51

Re: Klasse mit Konstanten ?
 
Zitat:

Zitat von Dax
Mach dir statt der Konstante doch eine Klassenfunktion, die dir den Wert zurückgibt.. Geht auch.

Wenn ich das jetzt in einem 3D Programm mache, dann kann ich nur sagen:
Delphi-Quellcode:
Performance := Goodbye;

Neutral General 6. Sep 2005 18:53

Re: Klasse mit Konstanten ?
 
Delphi-Quellcode:
type TRune = class
function GetRarity : Integer;
end;

type TRune1 = class(TRune)
end;
type TRune2 = class(TRune)
end;


function TRune.GetRarity : Integer;
begin
  if Classname = 'TRune1' then Rarity := 300; // Ka ob die Eigenschaft jetzt Classname heißt..
  if Classname = 'TRune2' then Rarity := 400;
  ...
end;
Würde das so etwa gehen ?
EDIT : Ich glaube das wäre echtes OOP o.O sowas hab ich ja noch nie gemacht :D ;)

@Speedmaster : Ist aber zum Glück nur 2D :mrgreen:

Robert_G 6. Sep 2005 18:58

Re: Klasse mit Konstanten ?
 
Zitat:

Zitat von Speedmaster
Zitat:

Zitat von Dax
Mach dir statt der Konstante doch eine Klassenfunktion, die dir den Wert zurückgibt.. Geht auch.

Wenn ich das jetzt in einem 3D Programm mache, dann kann ich nur sagen:
Delphi-Quellcode:
Performance := Goodbye;

So ein Blödsinn. Non virtual class methods werden die gleiche Performance haben wie hässliche lose Funktionen. (virtuelle kosten dich, wenn überhaupt, einmal nachschlagen in der VMT)
Warum lernst du es nicht, einfach mal dein komischen Vorurteile zu überprüfen? (Ist ja nicht das erste Mal ;) )

@NG
Autsch....

Neutral General 6. Sep 2005 19:01

Re: Klasse mit Konstanten ?
 
:angel2:

Zeigt mir mal nen Beispiel pls :mrgreen:

Speedmaster 6. Sep 2005 19:01

Re: Klasse mit Konstanten ?
 
Zitat:

Zitat von Neutral General
Delphi-Quellcode:
type TRune = class
function GetRarity : Integer;
end;

type TRune1 = class(TRune)
end;
type TRune2 = class(TRune)
end;


function TRune.GetRarity : Integer;
begin
  if Classname = 'TRune1' then Rarity := 300; // Ka ob die Eigenschaft jetzt Classname heißt..
  if Classname = 'TRune2' then Rarity := 400;
  ...
end;
Würde das so etwa gehen ?
EDIT : Ich glaube das wäre echtes OOP o.O sowas hab ich ja noch nie gemacht :D ;)

@Speedmaster : Ist aber zum Glück nur 2D :mrgreen:

Selbst bei 2D kann darunter die Performance leiden( Theoretisch )! Ich frage mich warum du die Werte nicht in einem Konstanten Array abspeicherst, und einfach per Index Abrufst!?!?

@Robert_G: Wer sagt den das ich eine Funktion benutzen würde?

Neutral General 6. Sep 2005 19:04

Re: Klasse mit Konstanten ?
 
Auch ne Idee aber ich hab ehrlichgesagt keine Lust für jede Klasse nen Konstruktor zu basteln :(

tigerman33 7. Sep 2005 09:32

Re: Klasse mit Konstanten ?
 
Warum müssen das denn überhaupt verschiedene Klassen sein? Die sehen nämlich eigentlich alle ziemlich gleich aus. Ich würd's so machen

Delphi-Quellcode:
type TRuneTypes = (rtX, rtY, rtZ);
const RuneRarities: array[0..2] of integer = [100, 200, 300];
      RuneColors: array[0..2] of TColor = [clGrey, clTeal, clRed]; // Da bin ich mir mit der Syntax nicht ganz sicher

type TRune = class
       constructor Create(RuneType: TRuneType);
     private
       FRuneType: TRuneType;
       function GetRarity: integer;
       function GetColor: integer;
     public
       property RuneType: TRuneType read FRuneType write FRuneType;
       property Rarity: integer read GetRarity;
       property Color: TColor read GetColor;
     end;

constructor TRune.Create(RuneType: TRuneType);
begin
  inherited Create;
  FRuneType := RuneType;
end;

function TRune.GetRarity: integer;
begin
  Result := RuneRarities[ord(RuneType)];
end;

function TRune.GetColor: TColor;
begin
  Result := RuneColors[ord(RuneType)];
end;
//edit
Ah, seh gerade dass dir die Performance so wichtig ist. Dann könnte man das auch so machen:
Delphi-Quellcode:
const RuneRarities: array[0..2] of integer = [100, 200, 300];
      RuneColors: array[0..2] of TColor = [clGrey, clTeal, clRed]; // Da bin ich mir mit der Syntax nicht ganz sicher

type TRune = class
       constructor Create(ARuneType: TRuneType);
     private
       FRuneType: TRuneType;
       FRarity: integer;
       FColor: TColor;
       procedure SetRuneType(Value: TRuneType);
       procedure Recalculate;
     public
       property RuneType: TRuneType read FRuneType write SetRuneType;
       property Rarity: integer read FRarity;
       property Color: TColor read FColor;
     end;

constructor TRune.Create(ARuneType: TRuneType);
begin
  inherited Create;
  RuneType := ARuneType; // Ruft den Setter auf zum Initialisieren;
end;

procedure TRune.Recalculate;
begin
  FRarity := RuneRarities[ord(RuneType)];
  FColor := RuneColors[ord(RuneType)];
end;

procedure TRune.SetRuneType(Value: TRuneType);
begin
  if Value <> RuneType then begin
    FRuneType := Value;
    Recalculate; // Alles neu berechnen
  end;
end;

BlackJack 7. Sep 2005 13:03

Re: Klasse mit Konstanten ?
 
Zitat:

Zitat von Neutral General
Delphi-Quellcode:
type TRune = class
function GetRarity : Integer;
end;

type TRune1 = class(TRune)
end;
type TRune2 = class(TRune)
end;


function TRune.GetRarity : Integer;
begin
  if Classname = 'TRune1' then Rarity := 300; // Ka ob die Eigenschaft jetzt Classname heißt..
  if Classname = 'TRune2' then Rarity := 400;
  ...
end;
Würde das so etwa gehen ?

nein, wenn dann so:
Delphi-Quellcode:
type TRune = class
function GetRarity : Integer; virtual; abstract;
end;

type TRune1 = class(TRune)
function GetRarity : Integer; override;
end;
type TRune2 = class(TRune)
function GetRarity : Integer; override;
end;


function TRune1.GetRarity : Integer;
begin
  Result := 300;
end;
function TRune2.GetRarity : Integer;
begin
  Result := 400;
end;
musst du halt nur für jede klasse machen, ich weiss ja nicht ob es das so bringt.

p.s.: warum gibt es nicht sowas wie
Delphi-Quellcode:
property Value: Integer read 1234;
, das wäre doch mal praktisch :D

shmia 7. Sep 2005 13:40

Re: Klasse mit Konstanten ?
 
@N General:
Die ganzen Mutmassungen über Klassen, Vererbung, u.s.w. ist alles Quark.
Du musst ganz zurück an den Anfang und erklären was du überhaupt programmieren möchtest.
Irgendwie geht es um Runen; das sind wohl irgendwelche Spielsteine.

Welche Eigenschaften soll eine Rune haben ? (Farbe, Wert, X/y-Position, ...)
Welche Eigenschaften dürfen im Laufe des Spiels ihren Wert ändern ?
Wieviele Runen sollen erzeugt werden ?
Gibt es Regeln zur Erzeugung der Runen (z.B. 20 rote, 20 grüne & 20 blaue)
Was soll mit den Runen passieren ? (laden aus Datei, anzeigen, ...)

Du könntest dich ausserdem über Class Factory oder Builder informieren; die wirst du wahrscheinlich gut gebrauchen können.

Neutral General 7. Sep 2005 17:42

Re: Klasse mit Konstanten ?
 
Also ich mache eine Art Rollenspiel in dem es die Aufgabe ist alle Runen zu finden (Gotta Catch 'em all :mrgreen:) Die Rarity Eigenschaft beschreibt wie selten eine Rune gedroppt wird. Also ne Rune mit Rarity von hätte ne Dropchance von 30%. eine Rune mit Rarity 1 hätte ne Chance von 0,1% usw.
Die Farbe ist halt ein Zeichen für die Seltenheit. Also z.b

Häufige = Grün
Seltene = Orange
Sehr Selten = Rot

Außerdem hat jede Rune nachher eine Besondere Eigenschaft. Die Eigenschaft ist wahrscheinlich ne eigene Klasse, z.B TProperty. Es soll etwa min 100 verschiedene Runen geben.

So etwa könnte dann die Klassen aussehen von einer Rune.

Delphi-Quellcode:
type
Rune = class
Color : TColor;
Rarity : Integer;
Property : TProperty;
end;
Alles war jetzt hier nur Beispielhaft dargestellt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 Uhr.
Seite 2 von 5     12 34     Letzte »    

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