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)); }
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)); }
public PlayerLogic(Messages.PlayerInterfaces.IConnection connection) { _connection = connection; }
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()); } } } } } }