public HexagonTileSerializable(HexagonTile source) { this.Id = source.Id; this.X = source.X; this.Y = source.Y; this.TileType = source.TileType; this.TileValue = source.TileValue; this.Fortress = source.Fortress; }
public HexagonTileSerializable(HexagonTile source) { this.Id = source.Id; this.X = source.X; this.Y = source.Y; this.TileType = source.TileType; this.TileValue = source.TileValue; this.Fortress = source.Fortress; }
private HexagonTile GetClone(HexagonTile tile, Game target) { if (this.hexagonList.IndexOf(tile) >= 0) { return target.hexagonList[this.hexagonList.IndexOf(tile)]; } else { return null; } }
private void TurnColorInLine(HexagonTile search, Func<HexagonTile, HexagonTile> GetNext) { HexagonTile next = GetNext(search); while (next.TileType != search.TileType) { next.TileType = search.TileType; next = GetNext(next); } }
private HexagonTile FindColorInLine(HexagonTile search, Func<HexagonTile, HexagonTile> GetNext) { TileType found = TileType.none; HexagonTile next = GetNext(search); if (next == null || next.TileType == search.TileType || next.TileType == TileType.board || next.TileType == TileType.none||next.Fortress) { return null; } while (next != null && next.TileType != TileType.board && next.TileType != TileType.none && next.TileType != search.TileType && !next.Fortress) { found = next.TileType; next = GetNext(next); // endboard => end search if (next == null || next.TileType == TileType.none) { return null; } } if (next.TileType == search.TileType) { if (this.firstCapture == TileType.none) { this.firstCapture = found; } return next; } return null; }
private void TurnTilesToCurrentColor(HexagonTile chosenTile) { bool first = (this.firstCapture == TileType.none); if (FindColorInLine(chosenTile, f => f.North) != null) { TurnColorInLine(chosenTile, f => f.North); } if (FindColorInLine(chosenTile, f => f.NorthEast) != null) { TurnColorInLine(chosenTile, f => f.NorthEast); } if (FindColorInLine(chosenTile, f => f.NorthWest) != null) { TurnColorInLine(chosenTile, f => f.NorthWest); } if (FindColorInLine(chosenTile, f => f.South) != null) { TurnColorInLine(chosenTile, f => f.South); } if (FindColorInLine(chosenTile, f => f.SouthWest) != null) { TurnColorInLine(chosenTile, f => f.SouthWest); } if (FindColorInLine(chosenTile, f => f.SouthEast) != null) { TurnColorInLine(chosenTile, f => f.SouthEast); } if (first) { logger.Debug("First move"); switch (this.firstCapture) { case TileType.red: turnOrder.Add(TileType.red); turnOrder.Add(TileType.blue); break; case TileType.blue: turnOrder.Add(TileType.blue); turnOrder.Add(TileType.red); break; } logger.Debug("The order of turns is: {0}, {1}, {2}", turnOrder[0], turnOrder[1], turnOrder[2]); } var boardtiles = from p in hexagonList where p.TileType == TileType.board select p; }
private HexagonTile FindChoiceCandidateForDirection(HexagonTile search, Func<HexagonTile, HexagonTile> GetNext) { HexagonTile next = GetNext(search); // skip first if (next == null || next.TileType == search.TileType || next.TileType == TileType.board || next.TileType == TileType.none) { return null; } while (next.TileType != TileType.board) { if (next.TileType == search.TileType) { return null; } if (next.Fortress) // blocks possible moves { return null; } next = GetNext(next); // endboard => end search if (next == null || next.TileType == TileType.none) { return null; } } return next; }
private void AddPosibility(List<HexagonTile> posibilities, HexagonTile tile) { if (tile != null && !posibilities.Contains(tile)) { posibilities.Add(tile); } }
private List<HexagonTile> FindChoiceCandidatesForTile(HexagonTile search, List<HexagonTile> posibilities) { AddPosibility(posibilities, FindChoiceCandidateForDirection(search, f => f.North)); AddPosibility(posibilities, FindChoiceCandidateForDirection(search, f => f.NorthWest)); AddPosibility(posibilities, FindChoiceCandidateForDirection(search, f => f.NorthEast)); AddPosibility(posibilities, FindChoiceCandidateForDirection(search, f => f.South)); AddPosibility(posibilities, FindChoiceCandidateForDirection(search, f => f.SouthEast)); AddPosibility(posibilities, FindChoiceCandidateForDirection(search, f => f.SouthWest)); return posibilities; }
private void MapUpTile(HexagonTile tile) { if (tile.North == null) { tile.North = FindTileAt((int)tile.X + 0, (int)tile.Y - yFull); if (tile.North != null) { tile.North.South = tile; } } if (tile.South == null) { tile.South = FindTileAt((int)tile.X + 0, (int)tile.Y + yFull); if (tile.South != null) { tile.South.North = tile; } } if (tile.NorthWest == null) { tile.NorthWest = FindTileAt((int)tile.X - xMarge, (int)tile.Y - yMarge); if (tile.NorthWest != null) { tile.NorthWest.SouthEast = tile; } } if (tile.NorthEast == null) { tile.NorthEast = FindTileAt((int)tile.X + xMarge, (int)tile.Y - yMarge); if (tile.NorthEast != null) { tile.NorthEast.SouthWest = tile; } } if (tile.SouthWest == null) { tile.SouthWest = FindTileAt((int)tile.X - xMarge, (int)tile.Y + yMarge); if (tile.SouthWest != null) { tile.SouthWest.NorthEast = tile; } } if (tile.SouthEast == null) { tile.SouthEast = FindTileAt((int)tile.X + xMarge, (int)tile.Y + yMarge); if (tile.SouthEast != null) { tile.SouthEast.NorthWest = tile; } } }
public void LoadSaveData(BoardSerializable boardData) { int id = 0; this.Fortresses = boardData.FortressesPerPlayer; this.PlayerFortress[0] = boardData.FortressesPerPlayer; this.PlayerFortress[1] = boardData.FortressesPerPlayer; this.PlayerFortress[2] = boardData.FortressesPerPlayer; //Dictionary<HexagonTileSerializable, HexagonTile> mapping = new Dictionary<HexagonTileSerializable, HexagonTile>(); this.hexagonList.Clear(); foreach (HexagonTileSerializable serializedTile in boardData.ActiveTileList) { HexagonTile tile = new HexagonTile() { Id = serializedTile.Id, TileType = serializedTile.TileType, X = serializedTile.X, Y = serializedTile.Y, TileValue = serializedTile.TileValue, Fortress = serializedTile.Fortress, }; if (tile.TileType != TileType.none) { //mapping.Add(serializedTile, tile); this.hexagonList.Add(tile); } } foreach (HexagonTile tile in hexagonList) { MapUpTile(tile); } //this.SetTurn(); }