![]() |
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. |
AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
Zitat:
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: |
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:
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..)
type
TTennisPunkte = (tp0 = 0, tp15 = 15, tp30 = 30, tp40 = 45, tpA = 60); const strTennisPunkte: Array[TTennisPunkte] of String = ('0', '15', '30', '40', 'A'); |
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.
|
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 =/ |
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:
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.
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;
Delphi-Quellcode:
Ist doch prima, so kann man sich vor der eigenen Schusseligkeit schützen.
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; |
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.
|
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? |
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:
nun liefert dir Ord(tp) div 15 die Werte 0, 1, 2, ..., 7
type
TTennisPunkte = (tp0 = 0, tp15 = 15, tp30 = 30, tp40 = 45, tpA = 60, tp5 = 75, tp6 = 90, tp7 = 105); var tp: TTennisPunkte 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 |
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 08:02 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 by Thomas Breitkreuz