/// <summary> /// Converts MoveType enum object to Location object /// </summary> /// <returns></returns> private GameObjects.Location PerformLocationDelta(MoveType moveType, GameObjects.Location currentLocation, TeamColour team) { // is MoveUp the same for red and blue team? or if for red Up is +1 for blue should be -1 on OY??? int dx = 0, dy = 0; switch (moveType) { case MoveType.right: dx = 1; break; case MoveType.left: dx = -1; break; case MoveType.down: dy = -1; break; case MoveType.up: dy = 1; break; } if (!ValidateFieldPosition(currentLocation.X, currentLocation.Y, team)) { return(currentLocation); } else { return(new GameObjects.Location(currentLocation.X + dx, currentLocation.Y + dy)); } }
/// <summary> /// Sets info about discovered TaskField /// </summary> /// <param name="location"></param> /// <param name="dx"></param> /// <param name="dy"></param> /// <param name="field"></param> /// <param name="TaskFieldList"></param> public void SetInfoAboutDiscoveredTaskField(GameObjects.Location location, int dx, int dy, GameObjects.Field field, List <GameObjects.TaskField> TaskFieldList) { //basic information GameObjects.TaskField responseField = new GameObjects.TaskField(location.X + dx, location.Y + dy, DateTime.Now) { TimeStamp = DateTime.Now, DistanceToPiece = (field as GameObjects.TaskField).DistanceToPiece }; //anoter Player on the field if (field.HasPlayer()) { responseField.PlayerId = (long)field.Player.ID; responseField.Player = field.Player; } else { responseField.PlayerId = -1; responseField.Player = null; } //piece on the field GameObjects.Piece piece = (field as GameObjects.TaskField).Piece; if (piece != null) { responseField.Piece = piece; } else { responseField.Piece = null; } TaskFieldList.Add(responseField); }
///// <summary> ///// Handles Player's request - move towards TaskField - fills response message with data about futureField ///// </summary> ///// <param name="location"></param> ///// <param name="playerGuid"></param> ///// <returns>Info about future field</returns> //public void TryMovePlayerToTaskField(Data response, Location futureLocation, string playerGuid, // out Messages.Piece piece, out Messages.Field field) //{ // GameArea.TaskField fieldFromBoard = actualBoard.GetField(futureLocation.x, futureLocation.y) as GameArea.TaskField; // field = new Messages.TaskField(futureLocation.x, futureLocation.y) // { // distanceToPiece = fieldFromBoard.Distance, // timestamp = DateTime.Now, // }; // // check if there is a piece on the filed // fieldFromBoard = actualBoard.GetField(futureLocation.x, futureLocation.y) as GameArea.TaskField; // piece = (fieldFromBoard as GameArea.TaskField).GetPiece; // if (piece != null) // { // response.Pieces = new Messages.Piece[] { piece }; // (field as Messages.TaskField).pieceId = piece.id; // (field as Messages.TaskField).pieceIdSpecified = true; // } // response.TaskFields = new Messages.TaskField[] { (field as Messages.TaskField) }; //} ///// <summary> ///// Handles Player's request - move towards GoalField - fills response message with data about futureField ///// </summary> ///// <param name="location"></param> ///// <param name="playerGuid"></param> ///// <returns>Info about future field</returns> //public void TryMovePlayerToGoalField(Data response, Location futureLocation, string playerGuid, // out Messages.Field field) //{ // GameArea.GoalField fieldFromBoard = actualBoard.GetField(futureLocation.x, futureLocation.y) as GameArea.GoalField; // field = new Messages.GoalField(futureLocation.x, futureLocation.y, fieldFromBoard.GetOwner) // { // timestamp = DateTime.Now, // }; // response.GoalFields = new Messages.GoalField[] { (field as Messages.GoalField) }; // response.TaskFields = null; //} // najprawdopodobniej do wyrzucenia /// <summary> /// Performs move action for an Player - called when action is valid /// </summary> /// <param name="currentLocation"></param> /// <param name="futureLocation"></param> /// <param name="playerGuid"></param> /// <param name="response"></param> public void PerformMoveAction(GameObjects.Location currentLocation, GameObjects.Location futureLocation, string playerGuid, DataMessage response) { var Player = actualBoard.GetField(currentLocation.X, currentLocation.Y).Player; actualBoard.GetField(currentLocation.X, currentLocation.Y).Player = null; actualBoard.GetField(futureLocation.X, futureLocation.Y).Player = Player; response.PlayerLocation = futureLocation; Players.Where(q => q.GUID == playerGuid).First().SetLocation(futureLocation); }
/// <summary> /// Handles Player's request - place a sham Piece on a GoalField /// </summary> /// <param name="location"></param> /// <param name="playerGuid"></param> /// <returns></returns> public GameObjects.GoalField[] TryPlaceShamPieceOnGoalField(GameObjects.Location location, string playerGuid) { var teamColour = Players.Where(q => q.GUID == playerGuid).First().Team; var player = Players.Where(q => q.GUID == playerGuid).First(); var fieldMessage = new GameObjects.GoalField(location.X, location.Y, DateTime.Now, teamColour, GoalFieldType.unknown) { PlayerId = (long)player.ID, }; return(new GameObjects.GoalField[] { fieldMessage }); }
public GoalDirectionInfo(List <GameArea.GameObjects.GoalField> goals, TeamColour team, GameArea.GameObjects.Location _PlayerLocation) { PlayerLocation = _PlayerLocation; Team = team; if (team == TeamColour.red) { Goals = goals.OrderBy(q => q.Y).ThenBy(q => q.X).Where(q => q.Type == GoalFieldType.unknown).ToList(); } else { Goals = goals.OrderByDescending(q => q.Y).ThenBy(q => q.X).Where(q => q.Type == GoalFieldType.unknown).ToList(); } }
/// <summary> /// Handles Player's request - place a normal Piece on a GoalField /// </summary> /// <param name="location"></param> /// <param name="playerGuid"></param> /// <returns></returns> public GameObjects.GoalField[] TryPlaceNormalPieceOnGoalField(GameObjects.Location location, string playerGuid) { var teamColour = Players.Where(q => q.GUID == playerGuid).First().Team; var goalFieldType = actualBoard.GetGoalField(location.X, location.Y).Type; var Player = Players.Where(q => q.GUID == playerGuid).First(); var fieldMessage = new GameObjects.GoalField(location.X, location.Y, DateTime.Now, teamColour, goalFieldType) { PlayerId = (long)Player.ID }; // if GoalField is of type 'goal' we update data and notify point score var currentGoalField = actualBoard.GetField(location.X, location.Y) as GameObjects.GoalField; if (currentGoalField.Type == GoalFieldType.goal) { var goal = actualBoard.GetField(location.X, location.Y) as GameMasterGoalField; if (goal != null && !goal.IsFullfilled && State != GameMasterState.GameOver) { switch (goal.Team) { case TeamColour.red: GoalsRedLeft--; // one goal less before the game is over break; case TeamColour.blue: GoalsBlueLeft--; break; } if (GoalsBlueLeft == 0 || GoalsRedLeft == 0) { if (IsGameFinished) { Console.WriteLine("!!!ACHTUNG!!!\nGame has ended."); } State = GameMasterState.GameResolved; GameEndDate = DateTime.Now; PrintEndGameState(); } Player.SetPiece(null); // the piece is no longer possesed by an Player } } return(new GameObjects.GoalField[] { fieldMessage }); }
/// <summary> /// Sets info about discovered GoalField /// </summary> /// <param name="location"></param> /// <param name="dx"></param> /// <param name="dy"></param> /// <param name="field"></param> /// <param name="GoalFieldList"></param> public void SetInfoAboutDiscoveredGoalField(GameObjects.Location location, int dx, int dy, GameObjects.Field field, List <GameObjects.GoalField> GoalFieldList) { GameObjects.GoalField responseField = new GameObjects.GoalField(location.X + dx, location.Y + dy, DateTime.Now, (field as GameObjects.GoalField).Team, GoalFieldType.unknown) { TimeStamp = DateTime.Now }; if (field.HasPlayer()) { responseField.PlayerId = (long)field.Player.ID; responseField.Player = field.Player; } else { responseField.PlayerId = -1; responseField.Player = null; } GoalFieldList.Add(responseField); }
// ------------ additional methods #region addition api methods /// <summary> /// Handles Player's request - place a Piece on a TaskField /// </summary> public GameObjects.TaskField[] TryPlacePieceOnTaskField(GameObjects.Location location, string playerGuid) { GameObjects.TaskField fieldMessage = null; var currentTaskField = actualBoard.GetField(location.X, location.Y) as GameObjects.TaskField; var Player = Players.Where(q => q.GUID == playerGuid).First(); // if TaskField is not occupied if (currentTaskField.Piece == null) { fieldMessage = new GameObjects.TaskField(location.X, location.Y, DateTime.Now) { PlayerId = (long)Player.ID, Piece = Player.GetPiece, TimeStamp = DateTime.Now }; var piece = Player.GetPiece; piece.PlayerId = 0; currentTaskField.Piece = piece; // the piece is put on the field Player.SetPiece(null); // the piece is no longer possesed by an Player UpdateDistancesFromAllPieces(); } return(new GameObjects.TaskField[] { fieldMessage }); // fieldMessage is null if TaskField is occupied }
private int GetDistance(GameArea.GameObjects.Location goalLocation) { return(Math.Abs(goalLocation.X - PlayerLocation.X) + Math.Abs(goalLocation.Y - PlayerLocation.Y)); }