Exemplo n.º 1
0
        //public void PlayMoves(MoveSeries moves)
        //{
        //    if (_roundType == RoundType.VsComputer)
        //    {
        //        // Play computer moves first...
        //        var computerMoves = new ComputerMoveGenerator().GetMoves();
        //        ApplyChange(new Player1MovesPlayed(_id, computerMoves, computerMoves.PlayerId));
        //    }
        //    if (_player1Moves == null)
        //    {
        //        ApplyChange(new Player1MovesPlayed(_id, moves, moves.PlayerId));
        //    }
        //    else if (_player2Moves == null)
        //    {
        //        ApplyChange(new Player2MovesPlayed(_id, moves, moves.PlayerId));
        //        HandleWinners();
        //    }
        //    else
        //        throw new InvalidOperationException("Cannot play more than 2 moves");
        //}
        public void PlayMoves(MoveSeries moves, IWinnerCalculator winnerCalculator)
        {
            if (_roundType == RoundType.VsComputer)
            {
                if (_player1Moves == null)
                {
                    ApplyChange(new Player1MovesPlayed(_id, moves, moves.PlayerId));
                }

                //Play computer moves first...
                var computerMoves = new ComputerMoveGenerator().GetMoves();
                ApplyChange(new Player2MovesPlayed(_id, computerMoves, computerMoves.PlayerId));
                HandleWinners(winnerCalculator);
            }else
            {
                if (_player1Moves == null)
                {
                    ApplyChange(new Player1MovesPlayed(_id, moves, moves.PlayerId));
                }else if (_player2Moves == null)
                {
                    ApplyChange(new Player2MovesPlayed(_id, moves, moves.PlayerId));
                    HandleWinners(winnerCalculator);
                }
            }
        }
Exemplo n.º 2
0
 private void HandleWinners(IWinnerCalculator winnerCalculator)
 {
     // Fire win event
     var winnerId = winnerCalculator.ProcessWinner(_player1Moves, _player2Moves);
     if(winnerId == null)
         ApplyChange(new RoundDraw(_id, _player1Moves.PlayerId, _player2Moves.PlayerId));
     else
         ApplyChange(new RoundWon(_id, winnerId.Value, _player1Moves.PlayerId, _player2Moves.PlayerId));
 }