Home > database >  How to re-write menu using DRY
How to re-write menu using DRY

Time:05-15

I'm doing a school project and I really feel that I can acomplish what I want in my code, however I feel like i -always- repeat my code.

I have tried to put the switch cases into methods but haven't had any success though to out of scope.

I am beginner so sorry for the eyesore code!

However, if anyone have any tips for using methods or something else so I can clean up my code a little better.

So here is a bit of my code, this is the beginning branch of my menu.

I have translated the code roughly to english.

So this is a sub menu in the main method.

            string[] flowers = { "Sunflower", "Coleus Tree", "Tomato" };
            int[] plant = { 0, 0, 0 };


                      switch (menuInput03)
                            {
                                /////WATER PLANT////
                                case 1:
                                    Console.Clear();
                                    Console.WriteLine("Press SPACEBAR several times to water plant!");

                                    if (plant[0] < 21)
                                    {
                                        for (int i = plant[0]; i < 21; i  )
                                        {
                                            var keyPressed = Console.ReadKey();
                                            if (keyPressed.Key == ConsoleKey.Spacebar)
                                            {
                                                plant[0] = i;
                                                Console.Clear();
                                                Console.WriteLine("Press SPACEBAR several times to water plant!");
                                                Console.WriteLine("\nWatering plant..");
                                                Console.WriteLine("["   flowers[0]   " "   plant[0]   "/100]");
                                            }
                                     
                                        }
                                        while (true)
                                        {
                                            Console.Clear();
                                            Console.WriteLine("Your plant has been watered!");
                                            Console.WriteLine("["   flowers[0]   " "   plant[0]   "/100]\n");
                                            Console.WriteLine("To continue press ENTER.");
                                            var keyPressed01 = Console.ReadKey();
                                            if (keyPressed01.Key == ConsoleKey.Enter)
                                            {
                                                Console.Clear();
                                                break;
                                            }
                                            else
                                            {
                                                        Console.Clear();
                                                    }
                                        }
                                    }
                                            else
                                            {
                                                break;
                                            }
                                            Console.Clear();
                                            break;
                                case 2:
                                            Console.Clear();
                                            Console.WriteLine("Press SPACEBAR several times to remove weed!");

                                            if (plant[0] > 19)
                                            {
                                                for (int i = plant[0]; i < 51; i  )
                                                {
                                                    var keyPressed = Console.ReadKey();
                                                    if (keyPressed.Key == ConsoleKey.Spacebar)
                                                    {
                                                        plant[0] = i;
                                                        i  ;
                                                        Console.Clear();
                                                        Console.WriteLine("Press SPACEBAR several times to remove weed!");
                                                        Console.WriteLine("\nRipping out weeds..");
                                                        Console.WriteLine("["   flowers[0]   " "   plant[0]   "/100]");
                                                    }

                                                }
                                                while (true)
                                                {
                                                    Console.Clear();
                                                    Console.WriteLine("Your plant has gotten it's weed removed!");
                                                    Console.WriteLine("["   flowers[0]   " "   plant[0]   "/100]\n");
                                                    Console.WriteLine("To continue press ENTER.");
                                                    var keyPressed01 = Console.ReadKey();
                                                    if (keyPressed01.Key == ConsoleKey.Enter)
                                                    {
                                                        Console.Clear();
                                                        break;
                                                    }
                                                    else
                                                    {
                                                        Console.Clear();
                                                    }
                                                }
                                            }
                                            Console.Clear();
                                            break;`

CodePudding user response:

I came up with the following; don't just copy-paste for school project without understanding what is going on. If some things are not clear do not hesitate to ask follow-up questions.

public record Action
{
    public string Title { get; }
    public int RequiredHealth { get; }
    public string ActionMessage { get; }
    public string CompletedMessage { get; }

    private Action(string title, int requiredHealth, string actionMessage, string completedMessage)
    {
        Title = title;
        RequiredHealth = requiredHealth;
        ActionMessage = actionMessage;
        CompletedMessage = completedMessage;
    }

    public static Action WaterPlant { get; } = new Action(
        title: "Press SPACEBAR several times to water plant!",
        requiredHealth: 20,
        actionMessage: "Watering plant..",
        completedMessage: "Your plant has been watered!");

    public static Action RemoveWeed { get; } = new Action(
        title: "Press SPACEBAR several times to remove weed!",
        requiredHealth: 50,
        actionMessage: "Ripping out weeds..",
        completedMessage: "Your plant has gotten it's weed removed!");
}

static void Main()
{
    string[] flowers = { "Sunflower", "Coleus Tree", "Tomato" };
    int[] plant = { 0, 0, 0 };

    for (var menuInput03 = 1; menuInput03 <= 2; menuInput03  )
    {
        var action = menuInput03 switch
        {
            1 => Action.WaterPlant,
            2 => Action.RemoveWeed,
        };

        Console.Clear();
        Console.WriteLine(action.Title);

        while (plant[0] < action.RequiredHealth)
        {
            if (Console.ReadKey().Key != ConsoleKey.Spacebar)
            {
                Console.Write("\b \b");
                continue;
            }

            plant[0]  ;
            Console.Clear();
            Console.WriteLine(action.Title);
            Console.WriteLine(action.ActionMessage);
            Console.WriteLine($"[{flowers[0]} {plant[0]}/100]");
        }

        Console.Clear();
        Console.WriteLine(action.CompletedMessage);
        Console.WriteLine($"[{flowers[0]} {plant[0]}/100]");
        Console.WriteLine("To continue press ENTER.");

        while (Console.ReadKey().Key != ConsoleKey.Enter)
        {
            Console.Write("\b \b");
        }
        
        Console.Clear();
    }
}
  • Related