![]() |
Delphi-Version: 7
Herausfinden ob Breakpoint ist oder nicht - Wie?
Hallo Wissende,
ich habe zur Verfügung den Punktestand von Spieler A (30) und B (40) und weiss wer den Aufschlag (A) hat. In dem konstruierten Fall hat Spieler A den Aufschlag und nur 30 Punkte und Spieler B hat 40 Punkte. Somit haben wir die Situation, dass wir einen Breakball haben. Breakball ist immer, wenn der Aufschlagsempfänder 40 Punkte oder Vorteil hat und der Aufschlagende weniger Punkte als der andere hat. Bei 0 - 40 hätte man zum Beispiel 3 Breakballe, weil man 3 mal die Chance hat mit dem nächsten Punkt das Spiel zu gewinnen. Ich bin nun am Rätseln, wie ich eine Funktion schreiben kann, die möglichst kurz ist, die mir als Ergebnis einfach nur einen boolschen Wert True zurückgibt, wenn wir einen Breakball haben. Wenn ich jetzt einfach nur nach Strings vergleichen würde, wäre die Routine ewig lang. Geht das auch einfacher? Für die, die nicht wirklich Ahnung vom Tennis haben. Es gibt folgende Punkte innerhalb eines Punktspieles: 0,15,30,40 der danach erungene Punkt würde den Spielpunkt erbringen. Stünde es 40 - 40 wäre Einstand Danach Käme dann 40 - A -> Spieler B hat Vorteil und wenn Spieler A Aufschlag hätte, wäre Breakball und umgekehrt. Ich bin am grübeln, ob es sinnvoll wäre da nen eigenen Typen für die Punkte zu deklarieren, weiss aber noch nicht genau wie. Habt Ihr Ideen dazu? |
AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
Du hast doch Zahlen, wieso willst du da Strings vergleichen?
- Fasse doch erstmal die Bedingungen in kurze Sätze. (hast du schon, ber mehr so im rießigen Text verteilt) - gruppiere diese (Teil)Sätze ordentlich, nach ihren Zusammenhängen - wandle alle Sätze in Formeln um - und fertig Zitat:
B = Aufschlagsempfänder
Delphi-Quellcode:
oder, da ich in deinem Satz nicht erkennen konnte, wie die Zusammenhänge sind, bzw. wie die Klammersetzung wäre. :stupid:
Breakball :=
( (PunkteB = 40) or ( was war nochmal vorteil? ) ) and (PunkteA < PunkteB) ; [edit] ich glaub Ersteres klingt besser/richtiger [/edit]
Delphi-Quellcode:
Breakball :=
(PunkteB = 40) or ( ( was war nochmal vorteil? ) and (PunkteA < PunkteB) ) ; |
AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
Hallo,
folgende Punkte gibt es: 0,15,30,40 Mit dem folgenden Punkt erhält ein Spieler den Spielpunkt, wenn der andere < 40 Punkte hat. Folgende Breakballsituation gibt es: Aufschlag hat Spieler A Spielstand ist A - B 0 - 40 -> 3 breakbälle B* 15 - 40 -> 2 breakbälle B* 30 - 40 -> 1 breakball B* 40 - 40 -> 0 breakbälle B 40 - A -> 1 breakball B* * Macht Spieler B den nächsten Punkt, gewinnt er das Spiel Aufschlag hat Spieler B Spielstand ist A - B 40 - 0 -> 3 breakbälle A* 40 - 15 -> 2 breakbälle A* 40 - 30 -> 1 breakball A* 40 - 40 -> 0 breakbälle A A - 40 -> 1 breakball A* * Macht Spieler A den nächsten Punkt, gewinnt er das Spiel Wichtig ist also, WER Aufschlag hat. Da es zu einer Vermischung von Datentypen kommt (0,15,30,40,A), dachte ich, dass es vielleicht sinnvoll wäre einen eigenen Datentypen einzusetzen. Ich hoffe, das macht es leichter, die Breakball-Situation einzuschätzen. |
AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
Zitat:
Delphi-Quellcode:
Wenn du dir überlegst, welche Datentypen du zur Laufzeit benutzt, dann ist "Ich packe einfach alles in einen String." fast immer die falsche Entscheidung.
type
TTennisMatchPunktZahlDingens = record punkte: integer; advantag: boolean; end. |
AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
Ich hatte vermutet, dass so was hier aus SInn machen könnte:
Delphi-Quellcode:
Aber wenn ich´s wüsste, hätte ich nicht gefragt.
TMatchStatus = (p0, p15, p30, p40, pA);
|
AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
Nur aus Neugier:
Wenn einer Breakball hat, jedoch die Runde verliert, ists dann (sozusagen) wieder Gleichstand? Dh. kann man nur gewinnen, wenn man bei einem Breakball punktet? A - B - (* Breakball) 30 - 40* - B punktet, gewinnt Match/Runde 30 - 40* - A punktet -> neuer Stand: 40 - 40 - A punktet nochmal -> ... 40* - 40 - entweder A punktet und gewinnt oder B punktet (neuer Stand:) 40 - 40 läuft das so ständig hin und her? |
AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
Hallo,
hier mal ein möglicher Verlauf: * schlägt auf A* - B 0 - 15 durch Punkt B 0 - 30 durch Punkt B 0 - 40 = 3BP durch Punkt B 15 - 40 = 2BP durch Punkt A 30 - 40 = 1BP durch Punkt A 40 - 40 = Einstand durch Punkt A 40 - A = Vorteil B = 1BP Punkt durch B 40 - 40 = Einstand nach Punkt durch A A - 40 = Vorteil A nach Punkt A Der Spielpunkt könnte vergeben werden, wenn B bei Breakball einen weiteren Punkt macht. Dann erhält B einen Spieltpunkt und die Gamepunkte werden wieder auf 0 resetet. Der Spielpunkt kann auch vergeben werden, wenn A einen Punkt macht und es A - 40 steht. In dem Falle liegt aber keine Breakball vor, da ein BP nur der Aufschlagsemüfänger haben kann. Kann ein Aufschlagender Spieler einen Spielpunkt mit dem nächsten Punkt erringen, nennt man das Spielpunkt. Der Wechsel von 40 - 40 nach A - 40 oder 40 - A kann ewig hin und her gehen. Solange, bis einer den entscheidenden Punkt macht. Ein zu 0-Spiel würde so verlaufen. Stand Spiele = 0-0 A schlägt auf 0 - 0 danach Punkt A 15 - 0 danach Punkt A 30 - 0 danach Punkt A 40 - 0 danach Punkt A Stand Spiele = 1-0 aktueller Stand im nachfolgenden Spiel ist wieder 0-0 |
AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
Ok, glaube es verstanden zu haben. Liefere demnächst ein Codefetzen...
|
AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
Argh, hättest du das Wort Tennis nicht am Anfang gleich nennen können? Ich habe mich die ganze Zeit gefragt, von was du da überhaupt redest. Erst als du die Regeln erklärt hast, habe ich verstanden um was es eigentlich geht.
Sagt man bei 40:40 nicht eigentlich Deuce? Aber lös dich doch mal von den krummen Punkten vom Tennis: 0 entspricht 0 15 entspricht 1 30 entspricht 2 40 entspricht 3 Steht es also 0:40 im Tennis hast du 0:3 -> 3-0=3 Breakpunkte. steht es 15:40 im Tennis hast du 1:3 -> 3-1=2 Breakpunkte. Wenn du jetzt den Datentyp Enum nimmst kannst du mit den Ordinalwerten der Einträge rechnen. So meine Idee. Eine konkrete Umsetzung mit Code kann ich dir leider nicht anbieten. |
AW: Herausfinden ob Breakpoint ist oder nicht - Wie?
Delphi-Quellcode:
type
TTennisPunkte = (tp0 = 0, tp15 = 15, tp30 = 30, tp40 = 45, tpA = 60); // in 15er Schritten, da es programmintern evt. besser zu handhaben ist PTennisSpieler = ^TTennisSpieler; TTennisSpieler = record Punkte: TTennisPunkte; Aufschlag: Boolean; {...} end; function istBreakBall(SpielerA, SpielerB: TTennisSpieler): Boolean; { Zitat Breakball ist immer, wenn der Aufschlagsempfänder 40 Punkte oder Vorteil hat und der Aufschlagende weniger Punkte als der andere hat. Bei 0 - 40 hätte man zum Beispiel 3 Breakballe, weil man 3 mal die Chance hat mit dem nächsten Punkt das Spiel zu gewinnen. } var Aufschlagender, AufschlagEmpfänger: PTennisSpieler; begin if not (SpielerA.Aufschlag xor SpielerB.Aufschlag) then raise Exception.Create('Ungültige Aufschlagsituation.'); if SpielerA.Aufschlag then begin Aufschlagender := @SpielerA; AufschlagEmpfänger := @SpielerB; end else begin Aufschlagender := @SpielerB; AufschlagEmpfänger := @SpielerA; end; Result := (AufschlagEmpfänger.Punkte >= tp40) and (Aufschlagender.Punkte < AufschlagEmpfänger.Punkte); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 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