public void GetLosingMoves() { MoveHelpers mh = new MoveHelpers(); var beaters = mh.GetBeaters(Move.Rock); CollectionAssert.AreEquivalent(new[] { Move.Paper, Move.Dynamite }, beaters); }
public void GivenExistingMatch_WhenPreviousGameWonAndNoDynamitesAvailableInTheGame_ThenBotsMoveShouldBeOfOneThatBeatsItsPreviousHandWithNoDynamitAndNoWaterbomb() { // Assemble var botStrategy = new BotStrategy(); IMatchService service = new MatchService(botStrategy); service.NewMatch(3, 0); //Act //first game service.AddGame(); var botsFirstMove = service.BotsMove(); service.GameResult(Outcome.Win, Move.Paper); //second game service.AddGame(); var botsSecondMove = service.BotsMove(); MoveHelpers mh = new MoveHelpers(); var beaters = mh.GetBeaters(botsFirstMove).ToList(); //Assert Assert.AreNotEqual(Move.Dynamite, botsSecondMove); Assert.AreNotEqual(Move.Waterbomb, botsSecondMove); Assert.Contains(botsSecondMove, beaters); }
public void GivenExistingMatch_WhenDynamiteAvailableInTheGameAndAlreadyUsedByBot_ThenBotsMoveShouldBeOfOneThatBeatsPlayersPreviousHand() { // Assemble var botStrategy = new BotStrategy(); var strategyMock = new Mock <IBotStrategy>(); var sequence = strategyMock.SetupSequence(m => m.GetBotsNextMove(It.IsAny <Game>(), It.IsAny <bool>(), It.IsAny <bool>())); IMatchService service = new MatchService(strategyMock.Object); service.NewMatch(3, 1); Move playersMove = Move.Waterbomb; //Act //first game sequence.Returns(Move.Dynamite); service.AddGame(); var botsFirstMove = service.BotsMove(); var gameResult = service.GameResult(Outcome.Lose, playersMove); //second game sequence.Returns(botStrategy.GetBotsNextMove(gameResult, false, true)); service.AddGame(); var botsSecondMove = service.BotsMove(); MoveHelpers mh = new MoveHelpers(); var beaters = mh.GetBeaters(playersMove).ToList(); //Assert Assert.Contains(botsSecondMove, beaters); }
private Move ReturnMoveBeater(Move moveToBeat, bool botHasDynamitesAvailable, bool playerHasDynamitesAvailable) { var moveHelpers = new MoveHelpers(); //this selects all the moves that beat the hand var availableMoves = moveHelpers.GetBeaters(moveToBeat); //if bot knows that player run out of dynamites, no point playing waterbomb if (availableMoves.Contains(Move.Waterbomb) && playerHasDynamitesAvailable == false) { return(GetRandomMoveFromSet(botHasDynamitesAvailable, playerHasDynamitesAvailable)); } //if bot does not have any dynamites left, cant play it else if (availableMoves.Contains(Move.Dynamite) && botHasDynamitesAvailable == false) { return(availableMoves.Where(x => x != Move.Dynamite).FirstOrDefault()); } //if more than one moves available, select one at random else { int index = new Random().Next(availableMoves.Count()); return(availableMoves.ElementAt(index)); } }