Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class ActionMaster {
- public enum Action {Invalid, Reset, LiftAndSwipe, EndTurn, EndGame};
- private enum FrameTurn { Frame1To9, Frame10One, Frame10Two, Frame10Three }
- public const string BAD_PATH = "Should never get here!!!";
- public const int MAX_PINS = GameController.MAX_PINS;
- public const int FRAME_TURNS = GameController.FRAME_TURNS;
- public const int LAST_FRAME = GameController.LAST_FRAME;
- public static Action TurnAction(List<int> pins) {
- Action turnAction = Action.Invalid;
- int turn = pins.Count;
- FrameTurn frameTurn = CalculateFrameTurn(pins);
- if (frameTurn == FrameTurn.Frame1To9) {
- turnAction = TurnActionFrames1To9(pins, turn);
- } else {
- turnAction = TurnAction10thFrame(pins, turn, frameTurn);
- }
- return turnAction;
- }
- private static Action TurnAction10thFrame(List<int> pins, int turn, FrameTurn frameTurn) {
- Action turnAction = Action.Invalid;
- switch (frameTurn) {
- case FrameTurn.Frame10One:
- if ((pins[CurrentTurnIdx(turn)] % MAX_PINS) == 0) {
- turnAction = Action.Reset;
- } else {
- turnAction = Action.LiftAndSwipe;
- }
- break;
- case FrameTurn.Frame10Two:
- if (((pins[PreviousTurnIdx(turn)] + pins[CurrentTurnIdx(turn)]) % MAX_PINS) == 0) {
- // Handle: Spare, 2 Strikes, or Strike and 0.
- if (pins[CurrentTurnIdx(turn)] == 0) {
- // Handle: Strike and zero.
- turnAction = Action.LiftAndSwipe;
- } else {
- // Handle: Spare, 2 Strikes.
- turnAction = Action.Reset;
- }
- } else if ((pins[PreviousTurnIdx(turn)] % MAX_PINS) == 0) {
- // Handle: A strike and something else.
- turnAction = Action.LiftAndSwipe;
- } else {
- // Handle: Open Frame.
- turnAction = Action.EndGame;
- }
- break;
- case FrameTurn.Frame10Three:
- // Handle: Clean up marks.
- turnAction = Action.EndGame;
- break;
- default:
- throw new UnityException(BAD_PATH);
- }
- return turnAction;
- }
- private static Action TurnActionFrames1To9(List<int> pins, int turn) {
- Action turnAction = Action.Invalid;
- int modulo = CalculateModulo(pins);
- if (pins[CurrentTurnIdx(turn)] < MAX_PINS) {
- if ((turn % FRAME_TURNS) == modulo) {
- // Handle: < 10 pins knocked down on first ball.
- turnAction = Action.LiftAndSwipe;
- } else {
- // Handle: Spare or Open Frame.
- turnAction = Action.EndTurn;
- }
- } else {
- // Handle: Strike or Spare.
- turnAction = Action.EndTurn;
- }
- return turnAction;
- }
- private static int CalculateModulo(List<int> turnScores) {
- int modulo = 1;
- for (int turn = 1 ; turn < turnScores.Count ; ++turn) {
- if ((turnScores[CurrentTurnIdx(turn)] == MAX_PINS)) {
- if ((turn % FRAME_TURNS) == modulo) {
- modulo = ++modulo % FRAME_TURNS;
- }
- }
- }
- return modulo;
- }
- private static FrameTurn CalculateFrameTurn(List<int> turnScores) {
- FrameTurn lastFrameTurn = FrameTurn.Frame1To9;
- int currentFrame = 1;
- int modulo = 0;
- int turn = 1;
- while ((turn < turnScores.Count) && (currentFrame < LAST_FRAME)) {
- if ((turnScores[CurrentTurnIdx(turn)] == MAX_PINS)) {
- ++currentFrame;
- modulo = ++modulo % FRAME_TURNS;
- } else if ((turn % FRAME_TURNS) == modulo) {
- ++currentFrame;
- }
- ++turn;
- }
- if (currentFrame == LAST_FRAME) {
- lastFrameTurn = FrameTurn.Frame10One;
- // Note: These must be in this order in the if.
- if ((turn + 2) <= turnScores.Count) {
- lastFrameTurn = FrameTurn.Frame10Three;
- } else if ((turn + 1) <= turnScores.Count) {
- lastFrameTurn = FrameTurn.Frame10Two;
- }
- }
- return lastFrameTurn;
- }
- private static int CurrentTurnIdx(int value) {
- return value - 1;
- }
- private static int PreviousTurnIdx(int value) {
- return value - 2;
- }
- }
- =========================================================================================
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using NUnit.Framework;
- using UnityEngine;
- [TestFixture]
- public class ActionMasterTest {
- private ActionMaster.Action endTurn = ActionMaster.Action.EndTurn;
- private ActionMaster.Action liftAndSwipe = ActionMaster.Action.LiftAndSwipe;
- private ActionMaster.Action endGame = ActionMaster.Action.EndGame;
- private ActionMaster.Action reset = ActionMaster.Action.Reset;
- [SetUp]
- public void Setup() {
- }
- [Test]
- public void T00True() {
- Assert.AreEqual (1, 1);
- }
- [Test]
- public void T01FirstThrowZero() {
- List<int> pins = new List<int>();
- pins.Add(0);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- }
- [Test]
- public void T04BowlStrikeFirstFrameReturnEndTurn() {
- List<int> pins = new List<int>();
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- }
- [Test]
- public void T05Bowl8FirstFrameReturnLiftAndSwipe() {
- List<int> pins = new List<int>();
- pins.Add(8);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- }
- [Test]
- public void T06Bowl52FirstFrameReturnEndTurn() {
- List<int> pins = new List<int>();
- pins.Add(5);
- pins.Add(2);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- }
- [Test]
- public void T07Bowl52LastFramesReturnEndGame() {
- List<int> pins = new List<int>();
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- [Test]
- public void T08BowlSpareLastFrameReturnEndGame() {
- List<int> pins = new List<int>();
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(6);
- pins.Add(4);
- Assert.AreEqual(reset, ActionMaster.TurnAction(pins));
- pins.Add(2);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- [Test]
- public void T09Bowl2Strike2LastFrameReturnEndGame() {
- List<int> pins = new List<int>();
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(10);
- pins.Add(10);
- Assert.AreEqual(reset, ActionMaster.TurnAction(pins));
- pins.Add(5);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- [Test]
- public void T10Bowl3StrikesLastFrameReturnEndGame() {
- List<int> pins = new List<int>();
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(10);
- Assert.AreEqual(reset, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(reset, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- [Test]
- public void T11BowlStrikesAndNotAllDownLastFrameReturnEndGame() {
- List<int> pins = new List<int>();
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(10);
- pins.Add(5);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(2);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- [Test]
- public void T12BowlStrikeZeroSomethingFrameReturnEndGame() {
- List<int> pins = new List<int>();
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(5);
- pins.Add(2);
- pins.Add(10);
- pins.Add(0);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(2);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- [Test]
- public void T13Bowl01053ReturnEndTurn() {
- List<int> pins = new List<int>();
- pins.Add(0);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(5);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(3);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- }
- [Test]
- public void T14AllStrikes() {
- List<int> pins = new List<int>();
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(reset, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(reset, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- //http://slocums.homestead.com/gamescore.html
- [Category ("Verification")]
- [Test]
- public void TG02GoldenCopyA () {
- List<int> pins = new List<int>();
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(7);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(3);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(0);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(0);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(8);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(8);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(2);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(0);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(6);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(reset, ActionMaster.TurnAction(pins));
- pins.Add(8);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- //http://guttertoglory.com/wp-content/uploads/2011/11/score-2011_11_28.png
- [Category ("Verification")]
- [Test]
- public void TG03GoldenCopyB1of3 () {
- List<int> pins = new List<int>();
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(7);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(0);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(0);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(8);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(2);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(8);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(2);
- Assert.AreEqual(reset, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- //http://guttertoglory.com/wp-content/uploads/2011/11/score-2011_11_28.png
- [Category ("Verification")]
- [Test]
- public void TG03GoldenCopyB2of3 () {
- List<int> pins = new List<int>();
- pins.Add(8);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(2);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(8);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(7);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(8);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(2);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(7);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- //http://guttertoglory.com/wp-content/uploads/2011/11/score-2011_11_28.png
- [Category ("Verification")]
- [Test]
- public void TG03GoldenCopyB3of3 () {
- List<int> pins = new List<int>();
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(0);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(7);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(3);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(8);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(6);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(3);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(6);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(2);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(reset, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- // http://brownswick.com/wp-content/uploads/2012/06/OpenBowlingScores-6-12-12.jpg
- [Category ("Verification")]
- [Test]
- public void TG03GoldenCopyC1of3 () {
- List<int> pins = new List<int>();
- pins.Add(7);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(2);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(7);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(3);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(reset, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(reset, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- // http://brownswick.com/wp-content/uploads/2012/06/OpenBowlingScores-6-12-12.jpg
- [Category ("Verification")]
- [Test]
- public void TG03GoldenCopyC2of3 () {
- List<int> pins = new List<int>();
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(endTurn, ActionMaster.TurnAction(pins));
- pins.Add(10);
- Assert.AreEqual(reset, ActionMaster.TurnAction(pins));
- pins.Add(9);
- Assert.AreEqual(liftAndSwipe, ActionMaster.TurnAction(pins));
- pins.Add(1);
- Assert.AreEqual(endGame, ActionMaster.TurnAction(pins));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement