static Matrix() { int directionsCount = Delta.DirectionsCount; deltas = new Delta[directionsCount]; for (int i = 0; i < directionsCount; i++) { deltas[i] = new Delta((Direction)i); } }
public void Traverse() { this.Clear(); int counter = 1; Position position = new Position(0, 0); Delta delta = new Delta(Direction.Southeast); while (true) { this.matrix[position.Row, position.Col] = counter; if (!this.CanContinue(position)) { bool newPositionFound = this.TryFindNewPosition(out position); if (newPositionFound) { counter++; this.matrix[position.Row, position.Col] = counter; delta.Direction = Direction.Southeast; } else { break; } } while (!this.CanGoToPosition(position.Row + delta.Row, position.Col + delta.Col)) { delta.UpdateDirectionClockwise(); } position.Update(delta); counter++; } }