public bool MoveCharacter(Character character, Point direction) { if (IsWall(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 = Map1[currentPosition.X, currentPosition.Y]; if (currentTile.MyWalls.HasFlag(TheWalls.End)) { return true; } else { return false; } }
//Any other corner cases? public bool IsWall(Character character, Point direction) { Point currentPosition = new Point(character.Coordinate.X, character.Coordinate.Y); Tile currentTile = Map1[currentPosition.X, currentPosition.Y]; Point nextPosition = new Point(character.Coordinate.X + direction.X, character.Coordinate.Y + direction.Y); Tile nextTile = Map1[nextPosition.X, nextPosition.Y]; // Beyond boundaries if (nextPosition.X < 0 || nextPosition.X > Map1.GetLength(0) || nextPosition.Y < 0 || nextPosition.Y > Map1.GetLength(1)) { return true; } // Stay still - Invalid if (currentPosition.X == nextPosition.X && currentPosition.Y == nextPosition.Y) { return true; } if (currentPosition.X > nextPosition.X) // Left { return currentTile.MyWalls.HasFlag(TheWalls.West); } else if (currentPosition.X < currentPosition.X) // Right { return currentTile.MyWalls.HasFlag(TheWalls.East); } else { if (currentPosition.Y > currentPosition.Y) // Up { return currentTile.MyWalls.HasFlag(TheWalls.North); } else // Down { return currentTile.MyWalls.HasFlag(TheWalls.South); } } }