Skip to content

Instantly share code, notes, and snippets.

@simararora07
Last active May 30, 2025 09:32
Show Gist options
  • Save simararora07/260b3327933829414bea04803a3f00ad to your computer and use it in GitHub Desktop.
Save simararora07/260b3327933829414bea04803a3f00ad to your computer and use it in GitHub Desktop.
abstract class TennisGame {
void wonPoint(String playerName);
String getScore();
}
class TennisGame1 implements TennisGame {
int _m_score1 = 0;
int _m_score2 = 0;
late String _player1Name;
late String _player2Name;
TennisGame1(String player1Name, String player2Name) {
this._player1Name = player1Name;
this._player2Name = player2Name;
}
@override
void wonPoint(String playerName) {
if (playerName == "player1") {
_m_score1 += 1;
} else {
_m_score2 += 1;
}
}
@override
String getScore() {
String score = "";
int tempScore=0;
if (_m_score1==_m_score2)
{
switch (_m_score1)
{
case 0:
score = "Love-All";
break;
case 1:
score = "Fifteen-All";
break;
case 2:
score = "Thirty-All";
break;
default:
score = "Deuce";
break;
}
}
else if (_m_score1>=4 || _m_score2>=4)
{
int minusResult = _m_score1-_m_score2;
if (minusResult==1) {
score ="Advantage player1";
} else if (minusResult ==-1) {
score ="Advantage player2";
} else if (minusResult>=2) {
score = "Win for player1";
} else {
score ="Win for player2";
}
}
else
{
for (int i=1; i<3; i++)
{
if (i==1) {
tempScore = _m_score1;
} else { score+="-"; tempScore = _m_score2;}
switch(tempScore)
{
case 0:
score+="Love";
break;
case 1:
score+="Fifteen";
break;
case 2:
score+="Thirty";
break;
case 3:
score+="Forty";
break;
}
}
}
return score;
}
}
// Test
import 'package:flutter_test/flutter_test.dart';
import 'dart:math';
import 'package:tennis_game/tennis_game.dart';
import 'package:tennis_game/tennis_game_one.dart';
main() {
var allScores = [
TennisTest(0, 0, "Love-All"),
TennisTest(1, 1, "Fifteen-All"),
TennisTest(2, 2, "Thirty-All"),
TennisTest(3, 3, "Deuce"),
TennisTest(4, 4, "Deuce"),
TennisTest(1, 0, "Fifteen-Love"),
TennisTest(0, 1, "Love-Fifteen"),
TennisTest(2, 0, "Thirty-Love"),
TennisTest(0, 2, "Love-Thirty"),
TennisTest(3, 0, "Forty-Love"),
TennisTest(0, 3, "Love-Forty"),
TennisTest(4, 0, "Win for player1"),
TennisTest(0, 4, "Win for player2"),
TennisTest(2, 1, "Thirty-Fifteen"),
TennisTest(1, 2, "Fifteen-Thirty"),
TennisTest(3, 1, "Forty-Fifteen"),
TennisTest(1, 3, "Fifteen-Forty"),
TennisTest(4, 1, "Win for player1"),
TennisTest(1, 4, "Win for player2"),
TennisTest(3, 2, "Forty-Thirty"),
TennisTest(2, 3, "Thirty-Forty"),
TennisTest(4, 2, "Win for player1"),
TennisTest(2, 4, "Win for player2"),
TennisTest(4, 3, "Advantage player1"),
TennisTest(3, 4, "Advantage player2"),
TennisTest(5, 4, "Advantage player1"),
TennisTest(4, 5, "Advantage player2"),
TennisTest(15, 14, "Advantage player1"),
TennisTest(14, 15, "Advantage player2"),
TennisTest(6, 4, "Win for player1"),
TennisTest(4, 6, "Win for player2"),
TennisTest(16, 14, "Win for player1"),
TennisTest(14, 16, "Win for player2"),
];
void checkAllScores(TennisGame game, TennisTest test) {
int highestScore = max(test.player1Score, test.player2Score);
for (int i = 0; i < highestScore; i++) {
if (i < test.player1Score) game.wonPoint("player1");
if (i < test.player2Score) game.wonPoint("player2");
}
expect(game.getScore(), test.expectedScore);
}
group('checkAllScoresTennisGame1', () {
allScores.forEach((tested) {
test('${tested.player1Score} - ${tested.player2Score} - ${tested.expectedScore}', () {
TennisGame1 game = TennisGame1("player1", "player2");
checkAllScores(game, tested);
});
});
});
}
class TennisTest {
int player1Score;
int player2Score;
String expectedScore;
TennisTest(this.player1Score, this.player2Score, this.expectedScore) {}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment