Example #1
0
 public GameMessage AnswerForGameMessage(Messages.PlayerInterfaces.IConnection connection, Game gameMessage)
 {
     _gameId          = connection.GameId;
     _id              = gameMessage.playerId;
     _guid            = connection.Guid;
     _colour          = gameMessage.Players.First <Xsd2.Player>(p => p.id == _id).team;
     _type            = gameMessage.Players.First <Xsd2.Player>(p => p.id == _id).type;
     _boardWidth      = (int)gameMessage.Board.width;
     _tasksHeight     = (int)gameMessage.Board.tasksHeight;
     _goalsHeight     = (int)gameMessage.Board.goalsHeight;
     _currentX        = (int)gameMessage.PlayerLocation.x;
     _currentY        = (int)gameMessage.PlayerLocation.y;
     _hasStartedOnTop = _currentY >= _goalsHeight + _tasksHeight;
     _goalSearching   = false;
     _board           = CreateInitialBoard(_goalsHeight, _tasksHeight, _boardWidth);
     return(CreateFirstMove(connection));
 }
Example #2
0
 public GameMessage CreateFirstMove(Messages.PlayerInterfaces.IConnection connection)
 {
     if (_hasStartedOnTop)
     {
         _moveFromGoalArea = MoveType.down;
         _moveToGoalArea   = MoveType.up;
         _minBoardY        = _goalsHeight;
         _maxBoardY        = _goalsHeight * 2 + _tasksHeight;
     }
     else
     {
         _moveFromGoalArea = MoveType.up;
         _moveToGoalArea   = MoveType.down;
         _minBoardY        = 0;
         _maxBoardY        = _goalsHeight + _tasksHeight;
     }
     _lastActionReminder = 0;
     return(new Move(connection.Guid, _moveFromGoalArea));
 }
Example #3
0
 public PlayerLogic(Messages.PlayerInterfaces.IConnection connection)
 {
     _connection = connection;
 }
Example #4
0
        public GameMessage ChooseNextMessage(Messages.PlayerInterfaces.IConnection connection, Data gameMessage)
        {
            if (IsInTheGoalField())
            {
                if (_lastActionReminder == 4)
                {
                    if (((GoalField)_board[_currentX][_currentY]).type == GoalFieldType.goal)
                    {
                        _goalSearching         = false;
                        _lastActionReminder    = 0;
                        _previousMoveDirection = _moveFromGoalArea;
                        return(new Move(_guid, _moveFromGoalArea));
                    }
                    else
                    {
                        _lastActionReminder = 2;
                        return(new PickUpPiece(_guid, _gameId));
                    }
                }
                else
                {
                    if (_pieceTaken != null)
                    {
                        if (_goalSearching)
                        {
                            if (((GoalField)_board[_currentX][_currentY]).type == GoalFieldType.unknown)
                            {
                                _lastActionReminder = 4;
                                _pieceTaken         = null;
                                return(new PlacePiece(_guid, _gameId));
                            }
                            else
                            {
                                return(NextMove());
                            }
                        }
                        else
                        {
                            return(NextMove());
                        }
                    }
                    else
                    {
                        _lastActionReminder    = 0;
                        _previousMoveDirection = _moveFromGoalArea;
                        return(new Move(_guid, _moveFromGoalArea));
                    }
                }
            }
            else
            {
                if (_lastActionReminder == 3)
                {
                    // for now it is always normal piece, later we have to add checking whether it is a sham
                    _lastActionReminder    = 0;
                    _previousMoveDirection = _moveToGoalArea;
                    _moveDiscoverCount++;
                    return(new Move(_guid, _moveToGoalArea));
                }
                else
                {
                    if (_pieceTaken != null)
                    {
                        if (_pieceTaken.type == PieceType.unknown)
                        {
                            _lastActionReminder = 3;
                            return(new TestPiece(_guid, _gameId));
                        }
                        else
                        {
                            _lastActionReminder    = 0;
                            _previousMoveDirection = _moveToGoalArea;
                            _moveDiscoverCount++;

                            return(new Move(_guid, _moveToGoalArea));
                        }
                    }
                    else
                    {
                        if (((TaskField)_board[_currentX][_currentY]).distanceToPiece == 0)
                        {
                            _lastActionReminder = 2;
                            return(new PickUpPiece(_guid, _gameId));
                        }
                        else
                        {
                            if (_moveDiscoverCount >= 2)
                            {
                                _lastActionReminder = 1;
                                _moveDiscoverCount  = 0;
                                return(new Discover(_guid, _gameId));
                            }
                            else
                            {
                                return(NextMove());
                            }
                        }
                    }
                }
            }
        }