Пример #1
0
        public void Walk()
        {
            int currentCellValue = 1;
            MatrixCoordinates currentCoordinates = new MatrixCoordinates(0, 0);
            MatrixCoordinates currentDirection = Directions.Southeast;

            while (true)
            {
                this.body[currentCoordinates.Row, currentCoordinates.Column] = currentCellValue;

                if (!this.CanContinue(currentCoordinates))
                {
                    bool newCoordinatesFound = this.TryFindNewCoordinates(out currentCoordinates);
                    if (newCoordinatesFound)
                    {
                        currentCellValue++;
                        this.body[currentCoordinates.Row, currentCoordinates.Column] = currentCellValue;
                        currentDirection = Directions.Southeast;
                    }
                    else
                    {
                        break;
                    }
                }

                while (!this.CanGoToCoordinates(currentCoordinates + currentDirection))
                {
                    this.UpdateDirectionClockwise(ref currentDirection);
                }

                currentCoordinates += currentDirection;
                currentCellValue++;
            }
        }
Пример #2
0
        private static MatrixCoordinates[] GetDirections()
        {
            MatrixCoordinates[] directions = new MatrixCoordinates[DirectionsCount];
            directions[0] = Directions.Southeast;
            directions[1] = Directions.South;
            directions[2] = Directions.Southwest;
            directions[3] = Directions.West;
            directions[4] = Directions.Northwest;
            directions[5] = Directions.North;
            directions[6] = Directions.Northeast;
            directions[7] = Directions.East;

            return directions;
        }
Пример #3
0
        private void UpdateDirectionClockwise(ref MatrixCoordinates direction)
        {
            int currentDirectionIndex = 0;

            for (int i = 0; i < DirectionsCount; i++)
            {
                if (direction == directions[i])
                {
                    currentDirectionIndex = i;
                    break;
                }
            }

            int newDirectionIndex = 0;
            if (currentDirectionIndex == DirectionsCount - 1)
            {
                newDirectionIndex = 0;
            }
            else
            {
                newDirectionIndex = currentDirectionIndex + 1;
            }

            direction = directions[newDirectionIndex];
        }
Пример #4
0
        private bool TryFindNewCoordinates(out MatrixCoordinates newCoordinates)
        {
            newCoordinates = new MatrixCoordinates(0, 0);

            for (int row = 0; row < this.body.GetLength(0); row++)
            {
                for (int col = 0; col < this.body.GetLength(1); col++)
                {
                    if (this.body[row, col] == 0)
                    {
                        newCoordinates.Row = row;
                        newCoordinates.Column = col;
                        return true;
                    }
                }
            }

            return false;
        }
Пример #5
0
        private bool CanGoToCoordinates(MatrixCoordinates coordinates)
        {
            bool validRow = (0 <= coordinates.Row && coordinates.Row < this.body.GetLength(0));
            bool validCol = (0 <= coordinates.Column && coordinates.Column < this.body.GetLength(1));

            return validRow && validCol && this.body[coordinates.Row, coordinates.Column] == 0;
        }
Пример #6
0
        private bool CanContinue(MatrixCoordinates newCoordinates)
        {
            for (int i = 0; i < directions.Length; i++)
            {
                if (this.CanGoToCoordinates(newCoordinates + directions[i]))
                {
                    return true;
                }
            }

            return false;
        }