Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. class BowlingGameScore {
  2.  
  3. private int[] pinsKnockedDown = new int[21];
  4. private int currentRoll = 0;
  5.  
  6. void roll(int pinsKnockedDown) {
  7. this.pinsKnockedDown[currentRoll++] = pinsKnockedDown;
  8. }
  9.  
  10. int score() {
  11. int totalScore = 0;
  12. int rollNumber = 0;
  13.  
  14. for (int frameNumber = 0; frameNumber < 10; frameNumber++) {
  15. int frameScore;
  16.  
  17. if (isSpare(rollNumber)) {
  18. frameScore = 10 + getSpareBonus(rollNumber);
  19. rollNumber += 2;
  20.  
  21. } else if (isStrike(pinsKnockedDown[rollNumber])) {
  22. frameScore = 10 + getStrikeBonus(rollNumber);
  23. rollNumber++;
  24.  
  25. } else {
  26. frameScore = pinsKnockedDown[rollNumber] + pinsKnockedDown[rollNumber + 1];
  27. rollNumber += 2;
  28. }
  29.  
  30. totalScore += frameScore;
  31. }
  32.  
  33. return totalScore;
  34. }
  35.  
  36. private int getStrikeBonus(int roll) {
  37. return pinsKnockedDown[roll + 1] + pinsKnockedDown[roll + 2];
  38. }
  39.  
  40. private boolean isStrike(int roll) {
  41. return roll == 10;
  42. }
  43.  
  44. private int getSpareBonus(int roll) {
  45. return pinsKnockedDown[roll + 2];
  46. }
  47.  
  48. private boolean isSpare(int roll) {
  49. return pinsKnockedDown[roll] + pinsKnockedDown[roll + 1] == 10;
  50. }}
  51.  
  52. class BowlingGameScoreTest {
  53. private BowlingGameScore game;
  54.  
  55. @BeforeEach
  56. void setUp() {
  57. game = new BowlingGameScore();
  58. }
  59.  
  60. @Test
  61. void
  62. game_no_pins_get_hit() {
  63. rollMany(0, 20);
  64.  
  65. Assertions.assertEquals(0, game.score());
  66. }
  67.  
  68. @Test
  69. void
  70. game_just_1_pin_get_hit() {
  71. rollMany(1, 20);
  72.  
  73. Assertions.assertEquals(20, game.score());
  74. }
  75.  
  76. @Test
  77. void
  78. game_with_1_spare() {
  79. rollSpare();
  80. game.roll(3);
  81. rollMany(0, 17);
  82.  
  83. Assertions.assertEquals(16, game.score());
  84. }
  85.  
  86. @Test
  87. void
  88. game_with_1_strike() {
  89. game.roll(10);
  90. game.roll(3);
  91. game.roll(4);
  92. rollMany(0, 16);
  93.  
  94. Assertions.assertEquals(24, game.score());
  95. }
  96.  
  97. @Test
  98. void
  99. game_of_strikes() {
  100. rollMany(10, 12);
  101.  
  102. Assertions.assertEquals(300, game.score());
  103. }
  104.  
  105. @Test
  106. void
  107. knockdown_nine_and_miss_ten_times() {
  108.  
  109. int firstRollPinsKnockedDown = 9;
  110. int secondRollPinsKnockedDown = 0;
  111. int repeatTimes = 10;
  112. rollPair(repeatTimes, firstRollPinsKnockedDown, secondRollPinsKnockedDown);
  113.  
  114. Assertions.assertEquals(90, game.score());
  115. }
  116.  
  117.  
  118. @Test
  119. void
  120. knockdown_five_and_spare_ten_times_and_fice() {
  121. rollPair(10, 5, 5);
  122. game.roll(5);
  123.  
  124. Assertions.assertEquals(150, game.score());
  125. }
  126.  
  127. private void rollPair(int repeatTimes, int firstRollPinsKnockedDown, int secondRollPinsKnockedDown) {
  128. for (int i = 0; i < repeatTimes; i++) {
  129. game.roll(firstRollPinsKnockedDown);
  130. game.roll(secondRollPinsKnockedDown);
  131. }
  132. }
  133.  
  134. private void rollSpare() {
  135. game.roll(5);
  136. game.roll(5);
  137. }
  138.  
  139.  
  140. private void rollMany(int pins, int times) {
  141. for (int i = 0; i < times; i++) {
  142. game.roll(pins);
  143. }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement