示例#1
0
        public void GetLosingMoves()
        {
            MoveHelpers mh      = new MoveHelpers();
            var         beaters = mh.GetBeaters(Move.Rock);

            CollectionAssert.AreEquivalent(new[] { Move.Paper, Move.Dynamite }, beaters);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
文件: BotStrategy.cs 项目: flawia/RPS
        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));
            }
        }