Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Herausfinden ob Breakpoint ist oder nicht - Wie? (https://www.delphipraxis.net/168831-herausfinden-ob-breakpoint-ist-oder-nicht-wie.html)

torud 14. Jun 2012 12:30

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
 
Hallo,

und sorry für das späte Feedback!

Vielen Dank für Deine Mühe. Ich bau´s mal bei mir ein und teste es. Ich melde mich dann mit einem abschließenden Feedback.

himitsu 14. Jun 2012 13:58

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
 
Zitat:

Zitat von Aphton (Beitrag 1170682)
Delphi-Quellcode:
TTennisPunkte = (tp0 = 0, tp15 = 15, tp30 = 30, tp40 = 45, tpA = 60); // in 15er Schritten, da es programmintern evt. besser zu handhaben ist

Dann doch besser ohne Nummernwerte ... lieber "keine" Werte, als "falsche" Werte.

Delphi-Quellcode:
TTennisPunkte = (tp0, tp15, tp30, tp40, tpA);

PS: Bei ENUMs mit vordefinierten Werten gibt es keine Namen in der RTTI ... man kann sich sowas leider nie wieder in Strings umwandeln lassen :cry:

Aphton 15. Jun 2012 14:23

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
 
Aha? Nun, ich bin immer den umständlichen Weg gegangen und habe es so gemacht:

Delphi-Quellcode:
type
  TTennisPunkte = (tp0 = 0, tp15 = 15, tp30 = 30, tp40 = 45, tpA = 60);

const
  strTennisPunkte: Array[TTennisPunkte] of String = ('0', '15', '30', '40', 'A');
Ist hässlich, jedoch ists kaum schöner mit RTTI (RTTI - sofern ich das richtig in Erinnerung habe - bläst sie ja die Echsen so auf..)

DeddyH 15. Jun 2012 14:30

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
 
Tröste Dich, ich mache das auch oft so. Das kommt ohne RTTI aus und ist noch einigermaßen übersichtlich und somit IMO verständlich.

Aphton 15. Jun 2012 14:35

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
 
Danke, ist beruhigend zu wissen, dass Pros das auch so machen =P
Aber unschön finde ichs trotzdem =/

DeddyH 15. Jun 2012 15:09

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
 
Was findest Du daran unschön? Wenn man auf RTTI verzichten will, könnte man das auch mit einer case-Abfrage in einer Funktion machen und auf die Konstante verzichten.
Delphi-Quellcode:
type
  TMeinTyp = (mtEins, mtZwei, mtDrei);

function TMyClass.GetTypeAsString(Typ: TMeinTyp): string;
begin
  case Typ of
    mtEins:
      Result := 'Typ Eins';
    mtZwei:
      Result := 'Typ Zwei';
    else
      Result := 'Typ Drei';
  end;
end;
Aber: wenn man den Typ einmal erweitert, weil ein neuer Zustand hinzugekommen ist, darf man nicht vergessen, die Funktion auch zu erweitern. Dem Compiler ist das schnurz, ob sie im Fall des neuen Zustandes auch das richtige Ergebnis liefert. Hat man aber wie von Dir gezeigt eine entsprechende Array-Konstante deklariert, muss diese im genannten Fall auch erweitert werden, sonst wird nicht kompiliert, da das Array nicht die richtige Elementanzahl aufweist.

Delphi-Quellcode:
type
  TMeinTyp = (mtEins, mtZwei, mtDrei);

const
  MYTYPESTRINGS: array[TMeinTyp] of string = ('Typ Eins', 'Typ Zwei', 'Typ Drei');

function TMyClass.GetTypeAsString(Typ: TMeinTyp): string;
begin
  Result := MYTYPESTRINGS[Typ];
end;
Ist doch prima, so kann man sich vor der eigenen Schusseligkeit schützen.

Aphton 15. Jun 2012 15:15

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
 
Klar, deshalb mache ich das ja auch so.. Nur kommt mir eine weitere (Hilfs-)Definition ein bisschen redundant vor.

torud 16. Jun 2012 13:40

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
 
Hallo,

ich klink mich mal wieder hier ein. Die Funktion funzt prima. Leider habe ich vergessen zu erwähnen, dass ich die Funktion auch für isSetPoint oder isMatchPoint benutzen will.

Dafür muss ich sicher eine andere funktion erstellen. Ich habe das mit den beiden Funtkionen schon hinbekommen, hadere aber noch ein wenig mit der Tiebreak-Situation.

In diesem Sonderfall, gibt es ja keine 0,15,30,40,A mehr, sondern es wird immer in 1er-Schritten gezählt und wartet, bis einer der Spieler 7 Punkte und mindesten eine Differenz von 2 Punkten hat.

Tiebreak kommt immer dann zum Einsatz, wenn der Spielstand in einem Satz 6-6 ist.
Dann wird für das kommende Spiel der Spieltstand auf 0-0 gesetzt.

Macht einer der Spieler einen Punkt, erhält der dafür einen Punkt und es steht 1-0.
Das geht dann immer weiter, bis es zb. 6-0 steht. Dann hat der Spieler mit den 6 Punkten 6 Satzbälle, weil die 6 mal die Chance hat seinen 7. Punkt zu erreichen.
Würde der andere Spieler in dem konstruierten Fall 6 Punkte aufholen, müsste mindesten für 2 weitere Punkte weiter gespielt werden. Alco bis es z.b. 8-6 steht. Das kann rein theoretisch ewig so weitergehen. Rekord war letztes Jahr in Wimbledon, als 2 Spieler fast 2 Tage den letzten Satz bis ca. 55-53 gespielt haben.

Nun die Frage. Ich kann ja nicht für alle Fälle so einen Riesen Enum aufbauen. Wie kann man dieses Problem lösen?

Aphton 16. Jun 2012 14:46

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
 
Ich weiß momentan nicht, ob es derselbe Spielmodus ist oder etwas ganz anderes.. für den Fall dass es derselbe ist, wäre folgendes machbar:
Delphi-Quellcode:
type
  TTennisPunkte = (tp0 = 0, tp15 = 15, tp30 = 30, tp40 = 45, tpA = 60, tp5 = 75, tp6 = 90, tp7 = 105);

var
  tp: TTennisPunkte
nun liefert dir Ord(tp) div 15 die Werte 0, 1, 2, ..., 7

Edit: Ansonsten steck dahinter mehr oder weniger dieselbe Logik - außer dass man, sobald es zum Tiebreak kommt, alles reseten muss..

Edit2: Ahh.. interessante Spiellogik.
Zum Tiebreak kann es doch auch kommen, wenn die Punkte weit über 6 sind und es ein Tie gibt, nicht? Dh. es muss min. solange gepielt werden, bis man 6 erreicht und ab da, sobald es zum Tie kommt, werden die Punkte zurückgesetzt und alles beginnt von vorne (sorgt dafür, dass wieder min 6 Punkte erreicht werden müssen)
Da es ein anderer Spielmodus ist (nicht?) würde ich da auch nen anderen EnumTyp verwenden Verwende einfach eine Zahl für den Score, kein Enum

torud 16. Jun 2012 17:19

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
 
Genau,

steht es 6-6 Games muss ein weiteres Spiel gespielt werden, um einen Satzgewinner zu ermitteln.

IN dem noch zu absolvierenden Spiel, wird anders gezählt - in Einer-punkten.

Wer zuerst mind. 7 Punkte und mind. 2 Punkte mehr als der Gegner hat, hat das Spiel und damit den Satz gewonnen.
Der Satz endet dann in der Regel mit 7/6 oder 6/7. Steht dahinter noch eine Zahl in Klammern, ist das in der Regel der Punktestand des Verlierers im Tiebreak.

Also sowas hier 7/6 (2) bedeutet, dass Spieler A den Tiebreak (das letzte Spiel eines Satzes bei Stand von 6/6) mit 7 / 2 gewonnen hat.

Also zusammenfassend kann man sagen, dass Satz- oder Matchball ist, wenn
Spieler A Games im aktuellen Satz > 5 hat und Spieler B Games < 6 UND Spieler A 40 Punkte oder Vorteil hat und Spieler B 40 Punkte oder weniger hat.
Haben beide Spieler 6 Games, muss einer von beiden wenigstens 6 Punkte und der andere max. 5 Punkte haben. Der Mindestabstand von Punkten muss 2 betragen und man benötigt mind. 2 Punkte

Ich grübel mal, dass sollte sich eigentlich auch über ne if then else machen lassen. Sieht nicht schön aus, aber sollte gehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 Uhr.
Seite 2 von 3     12 3      

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