public void MiniMaxEvaluator() { position = new FrogsAndToadsPosition(gameString1); evaluator = new MiniMaxEvaluator(); value = evaluator.LeftEvaluation(position); Assert.AreEqual(2, value); position = new FrogsAndToadsPosition(gameString2); evaluator = new MiniMaxEvaluator(); value = evaluator.LeftEvaluation(position); Assert.AreEqual(0, value); value = evaluator.LeftEvaluation(position.Reverse() as FrogsAndToadsPosition); Assert.AreEqual(0, value); position = new FrogsAndToadsPosition(gameString3); evaluator = new MiniMaxEvaluator(); value = evaluator.LeftEvaluation(position); Assert.AreEqual(2, value); position = new FrogsAndToadsPosition(gameString4); evaluator = new MiniMaxEvaluator(); value = evaluator.LeftEvaluation(position); Assert.AreEqual(3, value); position = new FrogsAndToadsPosition(gameString5); evaluator = new MiniMaxEvaluator(); value = evaluator.RightEvaluation(position); Assert.AreEqual(-3, value); }
public void CanMovePiece() { position = new FrogsAndToadsPosition(2, 2, 2); try { int value = -1; position.CanMovePiece(value); Assert.Fail($"Failed to throw an IndexOutOfRangeException for index {value}."); } catch (IndexOutOfRangeException) { } try { int value = 6; position.CanMovePiece(value); Assert.Fail($"Failed to throw an IndexOutOfRangeException for index {value}."); } catch (IndexOutOfRangeException) { } Assert.IsFalse(position.CanMovePiece(0)); Assert.IsTrue(position.CanMovePiece(1)); Assert.IsFalse(position.CanMovePiece(2)); Assert.IsFalse(position.CanMovePiece(3)); Assert.IsTrue(position.CanMovePiece(4)); Assert.IsFalse(position.CanMovePiece(5)); }
public void GetAllPossibleMoves() { position = new FrogsAndToadsPosition(2, 2, 2); possibleMoves = position.GetAllPossibleMoves(); Assert.AreEqual(2, possibleMoves.Count); Assert.IsTrue(_sources.Contains(1)); Assert.IsTrue(_sources.Contains(4)); Assert.IsTrue(_targets.Contains(2)); Assert.IsTrue(_targets.Contains(3)); _move = new FrogsAndToadsMove(1, 2); position = position.PlayMove(_move); _move = new FrogsAndToadsMove(4, 3); position = position.PlayMove(_move); possibleMoves = position.GetAllPossibleMoves(); Assert.AreEqual(4, possibleMoves.Count); Assert.IsTrue(_sources.Contains(0)); Assert.IsTrue(_sources.Contains(2)); Assert.IsTrue(_sources.Contains(3)); Assert.IsTrue(_sources.Contains(5)); Assert.IsTrue(_targets.Contains(1)); Assert.IsTrue(_targets.Contains(4)); }
public void MiniMax() { player = new EvaluatingPlayer("", new MiniMaxEvaluator()); //position = new FrogsAndToadsPosition("T___"); //result = player.PlayLeft(_options); //correctMove = new FrogsAndToadsMove(0, 1); //Assert.AreEqual(position.PlayMove(correctMove).ToString(), result.Value.ToString()); //position = new FrogsAndToadsPosition("T_T_"); //result = player.PlayLeft(_options); //correctMove = new FrogsAndToadsMove(0, 1); //Assert.AreEqual(position.PlayMove(correctMove).ToString(), result.Value.ToString()); //position = new FrogsAndToadsPosition("T_T_F"); //result = player.PlayLeft(_options); //correctMove = new FrogsAndToadsMove(2, 3); //Assert.AreEqual(position.PlayMove(correctMove).ToString(), result.Value.ToString()); position = new FrogsAndToadsPosition("T_T___FF"); result = player.PlayLeft(_options); //// is (0 -> 2) the best move? //position = new FrogsAndToadsPosition("TF_TF_TF__TF"); //result = player.PlayLeft(_options); //correctMove = new FrogsAndToadsMove(0, 2); //Assert.AreEqual(position.PlayMove(correctMove).ToString(), result.Value.ToString()); }
public void SubPosition() { FrogsAndToadsPosition position = new FrogsAndToadsPosition(2, 2, 2); Assert.AreEqual("< T >", position.SubPosition(0, 0).ToString()); Assert.AreEqual("< T T >", position.SubPosition(0, 1).ToString()); Assert.AreEqual("< T _ _ F >", position.SubPosition(1, 4).ToString()); }
internal EvaluationData( FrogsAndToadsPosition position, int depth, int bestToad, int bestFrog) { Position = position; Depth = depth; BestToad = bestToad; BestFrog = bestFrog; }
public void EvaluateEndPosition() { MiniMaxEvaluator evaluator = new MiniMaxEvaluator(); position = new FrogsAndToadsPosition("TT__"); Assert.AreEqual(4, evaluator.EvaluateEndPositionForToads(position)); position = new FrogsAndToadsPosition("__F_F______"); Assert.AreEqual(-5, evaluator.EvaluateEndPositionForFrogs(position)); position = new FrogsAndToadsPosition("TFTFF__TTFF___T_T___TTFTFFFF_TTT___"); int result = evaluator.EvaluateEndPositionForToads(position); Assert.AreEqual(0 + 7 + 9, result); }
public void EvaluateToadMoves() { position = new FrogsAndToadsPosition(gameString6); MiniMaxEvaluator evaluator = new MiniMaxEvaluator(); var x = evaluator.EvaluateToadMoves(position); Assert.AreEqual(2, x.Count); Assert.AreEqual(-2, x.First().value); Assert.AreEqual(1, x.Skip(1).First().value); position = position.PlayMove(new FrogsAndToadsMove(0, 2)); x = evaluator.EvaluateToadMoves(position.Reverse()); Assert.AreEqual(2, x.Count); Assert.AreEqual(2, x.First().value); Assert.AreEqual(-1, x.Skip(1).First().value); }
public void PlayMove() { position = new FrogsAndToadsPosition(2, 2, 2); _move = new FrogsAndToadsMove(1, 2); position = position.PlayMove(_move); Assert.AreEqual("< T _ T _ F F >", position.ToString()); _move = new FrogsAndToadsMove(4, 3); position = position.PlayMove(_move); Assert.AreEqual("< T _ T F _ F >", position.ToString()); _move = new FrogsAndToadsMove(2, 4); position = position.PlayMove(_move); Assert.AreEqual("< T _ _ F T F >", position.ToString()); }
public void MiniMiniMax() { player = new MiniMiniMaxPlayer(""); position = new FrogsAndToadsPosition("T_TF_F"); result = player.PlayLeft(_options); correctMove = new FrogsAndToadsMove(2, 4); Assert.AreEqual(position.PlayMove(correctMove).ToString(), result.Value.ToString()); position = new FrogsAndToadsPosition("T_TT_F"); result = player.PlayLeft(_options); correctMove = new FrogsAndToadsMove(3, 4); Assert.AreEqual(position.PlayMove(correctMove).ToString(), result.Value.ToString()); position = new FrogsAndToadsPosition("T__TF_"); result = player.PlayLeft(_options); correctMove = new FrogsAndToadsMove(0, 1); Assert.AreEqual(position.PlayMove(correctMove).ToString(), result.Value.ToString()); }
public void GetSubPositions() { List <FrogsAndToadsPosition> subPositions; position = new FrogsAndToadsPosition("TF__TF_"); subPositions = position.GetSubPositions(); Assert.AreEqual("< T F _ _ T F _ >", subPositions.First().ToString()); position = new FrogsAndToadsPosition("T__TTFF___F"); subPositions = position.GetSubPositions(); Assert.AreEqual(2, subPositions.Count); Assert.AreEqual("< T _ _ >", subPositions[0].ToString()); Assert.AreEqual("< _ _ _ F >", subPositions[1].ToString()); position = new FrogsAndToadsPosition("TFTFF__TTFF_TF_T___TTFTFFFFTTF_FT"); subPositions = position.GetSubPositions(); Assert.AreEqual(3, subPositions.Count); Assert.AreEqual("< _ _ >", subPositions[0].ToString()); Assert.AreEqual("< _ T F _ T _ _ _ >", subPositions[1].ToString()); Assert.AreEqual("< T T F _ F T >", subPositions[2].ToString()); }
public void Construction() { FrogsAndToadsPosition position1 = new FrogsAndToadsPosition(1, 1, 1); FrogsAndToadsPosition position2 = new FrogsAndToadsPosition(2, 1, 1); FrogsAndToadsPosition position3 = new FrogsAndToadsPosition(3, 1, 2); FrogsAndToadsPosition position4 = new FrogsAndToadsPosition(4, 2, 3); FrogsAndToadsPosition position5 = new FrogsAndToadsPosition("TF__FTT"); Assert.AreEqual("< T _ F >", position1.ToString()); Assert.AreEqual("< T T _ F >", position2.ToString()); Assert.AreEqual("< T T T _ F F >", position3.ToString()); Assert.AreEqual("< T T T T _ _ F F F >", position4.ToString()); Assert.AreEqual("< T F _ _ F T T >", position5.ToString()); try { string value = "TF_x_FTT"; FrogsAndToadsPosition bad = new FrogsAndToadsPosition(value); Assert.Fail($"Failed to throw an ArgumentException with positionString = {value}"); } catch (ArgumentException) { } }
public void StaticConstructor() { position = FrogsAndToadsPosition.MakeInitialPosition(); Assert.AreEqual("< T _ F >", position.ToString()); }