Das stimmt aber so nicht, denn wenn ein Spieler 'tp40a' Punkte hat, under andere auch, dann ist bei dem Gewinn eines weiteren Punktes ja noch lange nicht schluss. Ich würde die Punkte einfach addieren (Punkte = Integer, wieso nicht?), und nur die Ausgabe (Visualisierung) dem im Tennis üblichen Gehopse von 0 auf 15 auf 30 auf 40 etc. anpassen, etwa so:
Delphi-Quellcode:
Function ShowPoints (aPointsA, aPointsB : Integer) : String;
Var
sScoreA, sScoreB : String;
Function Score (aPoints : Integer) : String;
Begin
Case aPoints Of
0 : Result := '0';
1 : Result := '15';
2 : Result := '30';
3 : Result := '40';
else Result :='Advantage'
End;
End;
Begin
sScoreA := Score (aPointsA);
sScoreB := Score (aPointsB);
Case max (aPointsA, aPointsB) Of
0,1,2,3 :
Result sScoreA+':'sScoreB
Else
If Abs (aPointsA-aPointsB)>1 Then // Jemand gewinnt
If aPointsA>aPointsB Then
Result := 'Spieler A gewinnt'
else
Result := 'Spieler B gewinnt'
else If aPointsA>aPointsB Then
Result := sScoreA+' A'
else
Result := sScoreA+' B'
End
End;
Function IsAWin (aPointsA, aPointsB : Integer) : Boolean;
Begin
Result := (Max (aPointsA, aPointsB)>3) And (Abs (aPointsA-aPointsB)>1)
End;
Gewonnen hat der, der zuerst mehr als 3 Punkte gemacht und dabei mindestens 2 Punkte mehr als der Gegner hat.
Der Nachteil einer Enumeration ist ja der, das man beim Stand von 'tp45A' nicht weiter erhöhen kann. Das muss aber möglich sein, denn viele Spiele sind hart umkämpft...