/// <summary> /// /// </summary> protected Timeout MoveToCell(Cell from, Cell to) { // We compute move time and we check if it is a valid number. var time = TimeUnit / Speed; Debug.Assert(!double.IsNaN(time) && !double.IsInfinity(time)); // At last, a timeout event is created and returned. return _env.Timeout(time); }
public Maze(uint width, uint height) { Debug.Assert(width > 0 && height > 0); Width = width; Height = height; Cells = AllocateCells(); GenerateMaze(); // At last, we create entrance and exit. Entrance = Cells[0, 0]; Exit = Cells[height - 1, width - 1]; }
public void MoveEscaper(EscaperBase escaper, Cell cell) { Action<EscaperBase, Cell> me = _mainPage.MazeCanvas.MoveEscaper; _mainPage.Dispatcher.BeginInvoke(me, escaper, cell); }
Cell[,] AllocateCells() { // We need to allocate one more row/column, // in order to efficiently handle walls and borders. var allocWidth = Width + 1; var allocHeight = Height + 1; // Maze cells are allocated using new measures. var cells = new Cell[allocHeight, allocWidth]; for (var h = 0U; h < allocHeight; ++h) { for (var w = 0U; w < allocWidth; ++w) { cells[h, w] = new Cell(this, w, h); } } return cells; }
protected override Cell ChooseNextCell(Cell actual) { return actual; }
/// <summary> /// /// </summary> protected abstract Cell ChooseNextCell(Cell actual);
protected override Cell ChooseNextCell(Cell actual) { if (actual.X <= 10) return actual.GetNeighbour(WallPosition.East); return actual; }
void PositionEscaperInsideCell(Shape figure, Cell cell) { // Cell dimensions are computed from canvas size. var cellWidth = Canvas.ActualWidth / _currentMaze.Width; var cellHeight = Canvas.ActualHeight / _currentMaze.Height; // Useful methods to compute cell offsets. Func<uint, double> xOffset = x => x * cellWidth; Func<uint, double> yOffset = y => y * cellHeight; figure.Fill = new SolidColorBrush(Colors.Magenta); figure.SetValue(Canvas.LeftProperty, xOffset(cell.X)); figure.SetValue(Canvas.TopProperty, yOffset(cell.Y)); figure.Width = figure.Height = 15; }
public void MoveEscaper(EscaperBase escaper, Cell cell) { PositionEscaperInsideCell(_escapers[escaper], cell); Canvas.UpdateLayout(); }