@Points(value = 5)
	@Test
	public void dutchTwoHundredFrameBallAndScoreTest()
	{
		int[] pinsKnockedDownArray = new int[] { 1, 9, 10, 2, 8, 10, 3, 7, 10, 4, 6, 10, 5, 5, 10, 6, 4 };

		for (int frameNumber = 1; frameNumber <= 9; frameNumber++)
		{
			assertEquals(frameNumber, singlePlayerBowlingScoreboard_STUDENT.getCurrentFrame());
			assertEquals(1, singlePlayerBowlingScoreboard_STUDENT.getCurrentBall());
			boolean frameHasStrikeInIt = (frameNumber % 2 == 0);
			if (frameHasStrikeInIt)
			{
				int roll = pinsKnockedDownArray[3 * (frameNumber / 2) - 1];
				assert roll == 10 : "roll = " + roll + " <> 10!";

				singlePlayerBowlingScoreboard_STUDENT.recordRoll(roll);

				assertEquals(frameNumber + 1, singlePlayerBowlingScoreboard_STUDENT.getCurrentFrame());
				assertEquals(1, singlePlayerBowlingScoreboard_STUDENT.getCurrentBall());
			}
			else
			// frameHasSpareInIt
			{
				int firstRoll = pinsKnockedDownArray[3 * ((frameNumber - 1) / 2)];
				singlePlayerBowlingScoreboard_STUDENT.recordRoll(firstRoll);

				assertEquals(frameNumber, singlePlayerBowlingScoreboard_STUDENT.getCurrentFrame());
				assertEquals(2, singlePlayerBowlingScoreboard_STUDENT.getCurrentBall());

				int secondRoll = pinsKnockedDownArray[3 * ((frameNumber - 1) / 2) + 1];
				assert firstRoll + secondRoll == 10 : "(firstRoll + secondRoll) + " + (firstRoll + secondRoll) + " <> 10!";

				singlePlayerBowlingScoreboard_STUDENT.recordRoll(secondRoll);

				assertEquals(frameNumber + 1, singlePlayerBowlingScoreboard_STUDENT.getCurrentFrame());
				assertEquals(1, singlePlayerBowlingScoreboard_STUDENT.getCurrentBall());
			}
			boolean lastFrameHasSpareInIt = frameHasStrikeInIt;
			if (lastFrameHasSpareInIt && frameNumber > 2)
			{
				assertEquals(20 * (frameNumber - 1), singlePlayerBowlingScoreboard_STUDENT.getScore(frameNumber - 1));
				assertEquals(20 * (frameNumber - 2), singlePlayerBowlingScoreboard_STUDENT.getScore(frameNumber - 2));
			}
		}
		// Tenth frame:
		{
			assertEquals(10, singlePlayerBowlingScoreboard_STUDENT.getCurrentFrame());
			assertEquals(1, singlePlayerBowlingScoreboard_STUDENT.getCurrentBall());

			int firstRoll = pinsKnockedDownArray[3 * (10 / 2) - 1];
			assert firstRoll == 10 : "firstRoll = " + firstRoll + " <> 10!";

			singlePlayerBowlingScoreboard_STUDENT.recordRoll(firstRoll);

			assertEquals(180, singlePlayerBowlingScoreboard_STUDENT.getScore(9));

			assertEquals(10, singlePlayerBowlingScoreboard_STUDENT.getCurrentFrame());
			assertEquals(2, singlePlayerBowlingScoreboard_STUDENT.getCurrentBall());

			int secondRoll = pinsKnockedDownArray[3 * (10 / 2)];

			singlePlayerBowlingScoreboard_STUDENT.recordRoll(secondRoll);

			assertEquals(10, singlePlayerBowlingScoreboard_STUDENT.getCurrentFrame());
			assertEquals(3, singlePlayerBowlingScoreboard_STUDENT.getCurrentBall());

			int thirdRoll = pinsKnockedDownArray[3 * (10 / 2) + 1];
			assert (secondRoll + thirdRoll) == 10 : "(secondRoll + thirdRoll) = " + (secondRoll + thirdRoll) + " <> 10!";

			singlePlayerBowlingScoreboard_STUDENT.recordRoll(thirdRoll);

			assertEquals(true, singlePlayerBowlingScoreboard_STUDENT.isGameOver());
		}
		assertEquals(200, singlePlayerBowlingScoreboard_STUDENT.getScore(10));
		System.out.println("Dutch 200: \n" + singlePlayerBowlingScoreboard_STUDENT);
	}