Задача сократить методы в один метод для кода прохождения змейки

Рейтинг: 0Ответов: 1Опубликовано: 24.03.2023

По принципу предыдущего вопроса попробовал сократить, но что то сделал не так. Ошибка CS7036 Отсутствует аргумент, соответствующий требуемому параметру "direction" из "SnakeMazeTask.MoveRobot(Robot, int, int, Direction)"

Было:

namespace Mazes
{
public static class SnakeMazeTask
{
    public static void MoveRight(Robot robot, int width, int height)
    {
        for (int i = 0; i < width - 3; i++)
            robot.MoveTo(Direction.Right);
    }

    public static void MoveDown(Robot robot, int width, int height)
    {
        for (int i = 0; i < 2; i++)
            robot.MoveTo(Direction.Down);
    }

    public static void MoveLeft(Robot robot, int width, int height)
    {
        for (int i = 0; i < width - 3; i++)
            robot.MoveTo(Direction.Left);
    }

    public static void MoveOut(Robot robot, int width, int height)
    {
        MoveRight(robot, width, height);
        MoveDown(robot, width, height);
        MoveLeft(robot, width, height);

        if (!robot.Finished)
        {
            MoveDown(robot, width, height);
            MoveOut(robot, width, height);
        }
    }
}
}

Стало:

namespace Mazes
{
public static class SnakeMazeTask
{
    public static void MoveRobot(Robot robot, int width, int height, Direction direction)
    {
        for (int i = 0; i < width - 3; i++)
            robot.MoveTo(direction);
    }        
    public static void MoveOut(Robot robot, int width, int height)
    {
        MoveRobot(robot, width, (int)Direction.Right);
        MoveRobot(robot, 5, (int)Direction.Down);
        MoveRobot(robot, width, (int)Direction.Left);

        if (!robot.Finished)
        {
            MoveRobot(robot, 5, (int)Direction.Down);
        }
    }
}
}

Ответы

▲ 1

В MoveRobot не нужны параметры int width, int height, нужен только один параметр, назовём его int steps:

namespace Mazes
{
    public static class SnakeMazeTask
    {
        public static void MoveRobot(Robot robot, int steps, Direction direction)
        {
            for (int i = 0; i < steps; i++)
                robot.MoveTo(direction);
        }        
        public static void MoveOut(Robot robot, int width, int height)
        {
            MoveRobot(robot, width - 3, (int)Direction.Right);
            MoveRobot(robot, 5, (int)Direction.Down);
            MoveRobot(robot, width - 3, (int)Direction.Left);

            if (!robot.Finished)
            {
                MoveRobot(robot, 5, (int)Direction.Down);
            }
        }
    }
}