//Any other corner cases? public bool IsBlocked(Character character, Point direction) { Point currentPosition = new Point(character.Coordinate.X, character.Coordinate.Y); Tile currentTile = map[currentPosition.X, currentPosition.Y]; Point nextPosition = new Point(character.Coordinate.X + direction.X, character.Coordinate.Y + direction.Y); if (nextPosition.X < 0 || nextPosition.X > (map.GetLength(0) - 1) || nextPosition.Y < 0 || nextPosition.Y > (map.GetLength(1) - 1)) // Beyond boundaries { return true; } else if (currentPosition.X == nextPosition.X && currentPosition.Y == nextPosition.Y) // Stay still - Invalid { return true; } else { Tile nextTile = map[nextPosition.X, nextPosition.Y]; if (currentPosition.X > nextPosition.X) // Left { return currentTile.FourWalls.HasFlag(Walls.West); } else if (currentPosition.X < nextPosition.X) // Right { return currentTile.FourWalls.HasFlag(Walls.East); } else { if (currentPosition.Y > nextPosition.Y) // Up { return currentTile.FourWalls.HasFlag(Walls.North); } else // Down { return currentTile.FourWalls.HasFlag(Walls.South); } } } }
public bool MoveCharacter(Character character, Point direction) { if (IsBlocked(character, direction)) { return false; } else { // Update current position of character character.Coordinate.X += direction.X; character.Coordinate.Y += direction.Y; return true; } }
// Check if thesesus is at Exit 'after' his every move public bool IsExit(Character character) { Point currentPosition = new Point(character.Coordinate.X, character.Coordinate.Y); Tile currentTile = map[currentPosition.X, currentPosition.Y]; if (currentTile.FourWalls.HasFlag(Walls.End)) { return true; } else { return false; } }