AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Herausfinden ob Breakpoint ist oder nicht - Wie?

Herausfinden ob Breakpoint ist oder nicht - Wie?

Ein Thema von torud · begonnen am 13. Jun 2012 · letzter Beitrag vom 18. Jun 2012
Antwort Antwort
Seite 1 von 3  1 23   
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Herausfinden ob Breakpoint ist oder nicht - Wie?

  Alt 13. Jun 2012, 11:26
Delphi-Version: 7
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?
Danke
Tom

Geändert von torud (13. Jun 2012 um 11:46 Uhr) Grund: Ergänzugen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#2

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?

  Alt 13. Jun 2012, 11:53
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:
Breakball ist immer,
wenn der Aufschlagsempfänder 40 Punkte
oder
Vorteil hat
und
der Aufschlagende weniger Punkte als der andere hat.
A = Aufschlagende
B = Aufschlagsempfänder

Delphi-Quellcode:
Breakball :=
(
  (PunkteB = 40)
  or
  ( was war nochmal vorteil? )
)
and
(PunkteA < PunkteB)
;
oder, da ich in deinem Satz nicht erkennen konnte, wie die Zusammenhänge sind, bzw. wie die Klammersetzung wäre.
[edit] ich glaub Ersteres klingt besser/richtiger [/edit]
Delphi-Quellcode:
Breakball :=
(PunkteB = 40)
or
(
  ( was war nochmal vorteil? )
  and
  (PunkteA < PunkteB)
)
;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Jun 2012 um 12:05 Uhr)
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?

  Alt 13. Jun 2012, 11:58
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.
Danke
Tom

Geändert von torud (13. Jun 2012 um 12:14 Uhr) Grund: Bessere Beschreibung
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?

  Alt 13. Jun 2012, 12:06
Ich hatte über einem eigenen Typen nachgedacht, weil es Punkte 0,15,30 und 40 gibt und der Vorteil als A (wie Advantag) kommt. Es liegt hier also eine Vermischung von Datentypen vor.
Was du vermutlich suchst, sind zusammengesetzte Datentypen:
Delphi-Quellcode:
type
  TTennisMatchPunktZahlDingens = record
    punkte: integer;
    advantag: boolean;
  end.
Wenn du dir überlegst, welche Datentypen du zur Laufzeit benutzt, dann ist "Ich packe einfach alles in einen String." fast immer die falsche Entscheidung.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (13. Jun 2012 um 12:12 Uhr)
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?

  Alt 13. Jun 2012, 12:17
Ich hatte vermutet, dass so was hier aus SInn machen könnte:

TMatchStatus = (p0, p15, p30, p40, pA); Aber wenn ich´s wüsste, hätte ich nicht gefragt.
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?

  Alt 13. Jun 2012, 14:58
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?
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (13. Jun 2012 um 15:40 Uhr)
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?

  Alt 13. Jun 2012, 15:32
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
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?

  Alt 13. Jun 2012, 15:46
Ok, glaube es verstanden zu haben. Liefere demnächst ein Codefetzen...
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?

  Alt 13. Jun 2012, 15:52
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#10

AW: Herausfinden ob Breakpoint ist oder nicht - Wie?

  Alt 13. Jun 2012, 15:56
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;
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (13. Jun 2012 um 16:01 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:01 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