示例#1
0
        public PlayerDto RunTurn(TurnDto Turn)
        {
            if (Turn.Players.Count != 2)
            {
                throw new Exception(ERROR_MESSAGE_NUMBER_PLAYERS_INCORRECT);
            }

            var p1 = Turn.Players[0];
            var p2 = Turn.Players[1];

            if (p1.Move == p2.Move)
            {
                return(p1);
            }

            switch (p1.Move)
            {
            case 'R':
                return(p2.Move == 'S' ? p1 : p2);

            case 'P':
                return(p2.Move == 'R' ? p1 : p2);

            case 'S':
                return(p2.Move == 'P' ? p1 : p2);

            default:
                throw new Exception(message: ERROR_MESSAGE_STRATEGY_ERROR);
            }
        }
示例#2
0
        public IHttpActionResult PostUserTurn(UserTurnDto playersTurn)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                var turnDto = new TurnDto
                {
                    GameId   = playersTurn.GameId,
                    PlayerId = playersTurn.PlayerId,
                    X        = playersTurn.X ?? 0,
                    Y        = playersTurn.Y ?? 0
                };

                var res = _gameService.MakeTurn(turnDto);
                return(Ok(res));
            }
            catch (CustomValidationException ex)
            {
                ModelState.AddModelError(ex.Property, ex.Message);
                return(BadRequest(ModelState));
            }
        }
示例#3
0
        private GameDto makeTurn(TurnDto turnDto, Game game)
        {
            var gameState = getGameState(game);

            if (gameState[turnDto.X, turnDto.Y] != 0)
            {
                throw new CustomValidationException("Requested cell already contains value", string.Empty);
            }

            game.Game2Players.Add(new Game2Player
            {
                Date     = DateTime.Now,
                PlayerId = turnDto.PlayerId,
                X        = turnDto.X,
                Y        = turnDto.Y,
                GameId   = turnDto.GameId ?? 0
            });

            if (game.Id > 0)
            {
                game.IsFinished = _gameResultChecker.DoesGameFinished(getGameState(game));
                _database.Games.Update(game);
            }
            else
            {
                _database.Games.Create(game);
            }

            _database.Save();

            return(convertToDto(game));
        }
示例#4
0
        private static TurnDto getAiTurn(Game game)
        {
            var res = new TurnDto
            {
                GameId = game.Id
            };

            var state = getGameState(game);

            for (var x = 0; x < state.GetLength(0); x++)
            {
                for (var y = 0; y < state.GetLength(1); y++)
                {
                    if (state[x, y] != 0)
                    {
                        continue;
                    }

                    res.X = x;
                    res.Y = y;
                    return(res);
                }
            }

            return(res);
        }
示例#5
0
        public GameDto MakeTurn(TurnDto turnDto)
        {
            var game = turnDto.GameId.HasValue && turnDto.GameId.Value > 0
                ? _database.Games.Get(turnDto.GameId.Value)
                : new Game();

            validateGame(game);
            return(makeTurn(turnDto, game));
        }
示例#6
0
        public TurnDto AddTurn(List <PlayerDto> players)
        {
            TurnDto Turn = new TurnDto();

            foreach (var player in players)
            {
                Turn.Players.Add(player);
            }

            return(Turn);
        }
示例#7
0
        public void TestMakeTurn()
        {
            //Arrange
            _gameRepository.Setup(gr => gr.Get(It.IsAny <int>())).Returns(new Game
            {
                Id           = 1,
                IsFinished   = false,
                Game2Players = new List <Game2Player>
                {
                    new Game2Player
                    {
                        Id       = 1,
                        Date     = DateTime.Now,
                        GameId   = 1,
                        PlayerId = 1,
                        X        = 0,
                        Y        = 0
                    },
                    new Game2Player
                    {
                        Id       = 2,
                        Date     = DateTime.Now,
                        GameId   = 1,
                        PlayerId = 1,
                        X        = 1,
                        Y        = 1
                    }
                }
            });
            _unitOfWorkMock.SetupGet(uow => uow.Games).Returns(_gameRepository.Object);
            var gameService = new GameService(_unitOfWorkMock.Object);
            var turnDto     = new TurnDto
            {
                GameId   = 1,
                PlayerId = 1,
                X        = 2,
                Y        = 2
            };

            //Act
            var result = gameService.MakeTurn(turnDto);

            //Assert
            Assert.IsTrue(result.IsFinished);
            Assert.AreEqual(result.State[0, 0], 2);
            Assert.AreEqual(result.State[1, 1], 2);
            Assert.AreEqual(result.State[2, 2], 2);
        }
示例#8
0
        public GameDto GetGame()
        {
            var Game = new GameDto();

            var Turn1 = new TurnDto();

            Turn1.Players.Add(new PlayerDto {
                PlayerName = "Armando", Move = 'P'
            });
            Turn1.Players.Add(new PlayerDto {
                PlayerName = "Dave", Move = 'S'
            });
            Game.Turn.Add(Turn1);

            var Turn2 = new TurnDto();

            Turn2.Players.Add(new PlayerDto {
                PlayerName = "Richard", Move = 'R'
            });
            Turn2.Players.Add(new PlayerDto {
                PlayerName = "Michael", Move = 'S'
            });
            Game.Turn.Add(Turn2);

            var Turn3 = new TurnDto();

            Turn3.Players.Add(new PlayerDto {
                PlayerName = "Allen", Move = 'S'
            });
            Turn3.Players.Add(new PlayerDto {
                PlayerName = "Omer", Move = 'P'
            });
            Game.Turn.Add(Turn3);

            var Turn4 = new TurnDto();

            Turn4.Players.Add(new PlayerDto {
                PlayerName = "David E.", Move = 'R'
            });
            Turn4.Players.Add(new PlayerDto {
                PlayerName = "Richard X.", Move = 'P'
            });
            Game.Turn.Add(Turn4);

            return(Game);
        }
示例#9
0
        public async Task <Game> CastTurn(TurnDto turnDto)
        {
            Game game = await _gameRepository.GetByIdAsync(turnDto.Game);

            Cell cell = _ticTacToeHelper.GetCellFromRowAndCol(
                game.TicTacToe.Cells, turnDto.Row, turnDto.Column);

            if (!_ticTacToeHelper.ShouldSetCell(game, turnDto.CastedBy, cell))
            {
                throw new TurnUncastedException();
            }

            cell.CastedBy = turnDto.CastedBy;

            game.TicTacToe = _ticTacToeHelper.CastTurn(game.TicTacToe, cell, game.GameState);

            game.GameState = _ticTacToeHelper.CalculateGameState(game.TicTacToe, cell.CellState);

            return(await _gameRepository.UpdateAsync(game));
        }
示例#10
0
 public IList <TurnDto> GetRequestList(DateTime date, int hourId, int campId)
 {
     try
     {
         IList <TurnDto> results = new List <TurnDto>();
         var             list    = turnRepository.RequestList(date, hourId, campId);
         foreach (Turn turn in list)
         {
             int?teamId = null;
             if (turn.Team != null)
             {
                 teamId = turn.Team.Id;
             }
             TurnDto turnDto = new TurnDto(turn.Id, turn.Date, turn.FullName, turn.Field.Name, teamId);
             results.Add(turnDto);
         }
         return(results);
     }
     catch
     {
         throw;
     }
 }