AgentMcBride
AgentMcBride

Reputation: 47

How to start a loop over again after a user pressed a wrong key?

So what I am trying to do is to create a simple text based RPG game in C#. After asking the player what weapon he/she wants to use, I want to be able to start the loop over again if the user presses an invalid key.

//Runs battle interactive
Console.WriteLine("");
Console.WriteLine("You have encountered a simple guard!  He deals 2 damage per attack and has 1 HP.");
Console.WriteLine("You currently have: " + Program.Inventory);
Console.WriteLine("Choose a weapon!");
var input2 = Console.ReadKey();

//Key checker for items
switch (input2.Key)
{
    case ConsoleKey.D1:
        Console.WriteLine("");
        if (Items.iniFists == true)
        {
            Console.WriteLine("You have attacked with your Fists for 1 DMG!");
        }else
        {
            //this will never run, just a placeholder
            Console.WriteLine("You Don't have your fists!");
            switch (input2.Key)
{
    case ConsoleKey.D1:
        Console.WriteLine("");
        if (Items.iniFists == true)
        {
            Console.WriteLine("You have attacked with your Fists for 1 DMG!");
        }else
        {
            //this will never run, just a placeholder
            Console.WriteLine("You Don't have your fists!");
        }
        break;
    case ConsoleKey.D2:
        Console.WriteLine("");
        if (Items.iniLongsword == true)
        {
        Console.WriteLine("You have chosen to attack with the Longsword for 2 DMG!");
        }else
        {
            Console.WriteLine("You don't have a longsword!");
        }
        break;
    case ConsoleKey.D3:
        Console.WriteLine("");
        if (Items.iniBow == true)
        {
            Console.WriteLine("You have chosen to attack with the Bow for 3 DMG!");
        }
        else
        {
            Console.WriteLine("You don't have a Bow!");
        }
        break;
    case ConsoleKey.D4:
        Console.WriteLine("");
        if (Items.iniLightstaff == true)
        {
            Console.WriteLine("You have chosen to attack with the Lightstaff for 4 DMG!");
        }
        else
        {
            Console.WriteLine("You don't have a Lightstaff!");
        }
        break;
    case ConsoleKey.D5:
        Console.WriteLine("");
        Console.WriteLine("You can't attack with an Apple!");
        break;
    case ConsoleKey.D6:
        Console.WriteLine("");
        Console.WriteLine("You can't attack with a Golden Key!");
        break;
    case ConsoleKey.D7:
        Console.WriteLine("");
        Console.WriteLine("You can't attack with a Steak!");
        break;
}
        }
        break;
    case ConsoleKey.D2:
        Console.WriteLine("");
        if (Items.iniLongsword == true)
        {
        Console.WriteLine("You have chosen to attack with the Longsword for 2 DMG!");
        }else
        {
            Console.WriteLine("You don't have a longsword!");
        }
        break;
    case ConsoleKey.D3:
        Console.WriteLine("");
        if (Items.iniBow == true)
        {
            Console.WriteLine("You have chosen to attack with the Bow for 3 DMG!");
        }
        else
        {
            Console.WriteLine("You don't have a Bow!");
        }
        break;
    case ConsoleKey.D4:
        Console.WriteLine("");
        if (Items.iniLightstaff == true)
        {
            Console.WriteLine("You have chosen to attack with the Lightstaff for 4 DMG!");
        }
        else
        {
            Console.WriteLine("You don't have a Lightstaff!");
        }
        break;
    case ConsoleKey.D5:
        Console.WriteLine("");
        Console.WriteLine("You can't attack with an Apple!");
        break;
    case ConsoleKey.D6:
        Console.WriteLine("");
        Console.WriteLine("You can't attack with a Golden Key!");
        break;
    case ConsoleKey.D7:
        Console.WriteLine("");
        Console.WriteLine("You can't attack with a Steak!");
        break;
}

For example if a player hits the 7 key, the game will tell them they can't attack with a steak. After telling the player that, how do I allow the player to choose another item?

Upvotes: 0

Views: 1280

Answers (4)

Sudhakar Tillapudi
Sudhakar Tillapudi

Reputation: 26219

You can use while(true) to solve the problem.

if you use while(true) it will iterate infinite times but you should make sure to quit the loop if once user enters the invalid input.

if user enters the invalid input then no switch case mathces, then it enters into the default block, in the default block you can use return statement to come out of the loop.

Sample code:

    Console.WriteLine("Please enter key 1-5");
    int key =Convert.Int32(Console.ReadLine());

    while (true)
    {
        switch (key)
        {
            case 1: Console.WriteLine("ur option "+key);
                break;
            case 2: Console.WriteLine("ur option " + key);
                break;
            case 3: Console.WriteLine("ur option " + key);
                break;
            case 4: Console.WriteLine("ur option " + key);
                break;
            case 5: Console.WriteLine("ur option " + key);
                break;
            default:
                Console.WriteLine("invalid choice ,quitting the loop");
                return;

        }
        Console.WriteLine("Please enter key 1-5");
         key = Console.ReadLine();
    }
    Console.WriteLine("outside loop");

Complete Code:

            Console.WriteLine("");
            Console.WriteLine("You have encountered a simple guard!  He deals 2 damage per attack and has 1 HP.");
            Console.WriteLine("You currently have: " + Program.Inventory);
            Console.WriteLine("Choose a weapon!");
            var input2 = Console.ReadKey();

            //Key checker for items
            while(true)
            {
            switch (input2.Key)
            {
                case ConsoleKey.D1:
                    Console.WriteLine("");
                    if (Items.iniFists == true)
                    {
                        Console.WriteLine("You have attacked with your Fists for 1 DMG!");
                    }else
                    {
                        //this will never run, just a placeholder
                        Console.WriteLine("You Don't have your fists!");
                        switch (input2.Key)
            {
                case ConsoleKey.D1:
                    Console.WriteLine("");
                    if (Items.iniFists == true)
                    {
                        Console.WriteLine("You have attacked with your Fists for 1 DMG!");
                    }else
                    {
                        //this will never run, just a placeholder
                        Console.WriteLine("You Don't have your fists!");
                    }
                    break;
                case ConsoleKey.D2:
                    Console.WriteLine("");
                    if (Items.iniLongsword == true)
                    {
                    Console.WriteLine("You have chosen to attack with the Longsword for 2 DMG!");
                    }else
                    {
                        Console.WriteLine("You don't have a longsword!");
                    }
                    break;
                case ConsoleKey.D3:
                    Console.WriteLine("");
                    if (Items.iniBow == true)
                    {
                        Console.WriteLine("You have chosen to attack with the Bow for 3 DMG!");
                    }
                    else
                    {
                        Console.WriteLine("You don't have a Bow!");
                    }
                    break;
                case ConsoleKey.D4:
                    Console.WriteLine("");
                    if (Items.iniLightstaff == true)
                    {
                        Console.WriteLine("You have chosen to attack with the Lightstaff for 4 DMG!");
                    }
                    else
                    {
                        Console.WriteLine("You don't have a Lightstaff!");
                    }
                    break;
                case ConsoleKey.D5:
                    Console.WriteLine("");
                    Console.WriteLine("You can't attack with an Apple!");
                    break;
                case ConsoleKey.D6:
                    Console.WriteLine("");
                    Console.WriteLine("You can't attack with a Golden Key!");
                    break;
                case ConsoleKey.D7:
                    Console.WriteLine("");
                    Console.WriteLine("You can't attack with a Steak!");
                    break;
            }
                    }
                    break;
                case ConsoleKey.D2:
                    Console.WriteLine("");
                    if (Items.iniLongsword == true)
                    {
                    Console.WriteLine("You have chosen to attack with the Longsword for 2 DMG!");
                    }else
                    {
                        Console.WriteLine("You don't have a longsword!");
                    }
                    break;
                case ConsoleKey.D3:
                    Console.WriteLine("");
                    if (Items.iniBow == true)
                    {
                        Console.WriteLine("You have chosen to attack with the Bow for 3 DMG!");
                    }
                    else
                    {
                        Console.WriteLine("You don't have a Bow!");
                    }
                    break;
                case ConsoleKey.D4:
                    Console.WriteLine("");
                    if (Items.iniLightstaff == true)
                    {
                        Console.WriteLine("You have chosen to attack with the Lightstaff for 4 DMG!");
                    }
                    else
                    {
                        Console.WriteLine("You don't have a Lightstaff!");
                    }
                    break;
                case ConsoleKey.D5:
                    Console.WriteLine("");
                    Console.WriteLine("You can't attack with an Apple!");
                    break;
                case ConsoleKey.D6:
                    Console.WriteLine("");
                    Console.WriteLine("You can't attack with a Golden Key!");
                    break;
                case ConsoleKey.D7:
                    Console.WriteLine("");
                    Console.WriteLine("You can't attack with a Steak!");
                    break;
                default:  Console.WriteLine("Invalid Option Qutting loop");
                         return;

            }
            Console.WriteLine("Choose a weapon!");
            var input2 = Console.ReadKey();
            }

Upvotes: 0

Zoran Horvat
Zoran Horvat

Reputation: 11321

Here is your code wrapped in a loop:

bool correct = false;
do
{
    Console.WriteLine("");
    Console.WriteLine("You have encountered a simple guard!  He deals 2 damage per attack and has 1 HP.");
    Console.WriteLine("You currently have: " + Program.Inventory);
    Console.WriteLine("Choose a weapon!");
    var input2 = Console.ReadKey();

    correct = true;
    //Key checker for items
    switch (input2.Key)
    {
        case ConsoleKey.D1:
            Console.WriteLine("");
            if (Items.iniFists == true)
            {
                Console.WriteLine("You have attacked with your Fists for 1 DMG!");
            }
            else
            {
                //this will never run, just a placeholder
                Console.WriteLine("You Don't have your fists!");
                switch (input2.Key)
                {
                    case ConsoleKey.D1:
                        Console.WriteLine("");
                        if (Items.iniFists == true)
                        {
                            Console.WriteLine("You have attacked with your Fists for 1 DMG!");
                        }
                        else
                        {
                            //this will never run, just a placeholder
                            Console.WriteLine("You Don't have your fists!");
                        }
                        break;
                    case ConsoleKey.D2:
                        Console.WriteLine("");
                        if (Items.iniLongsword == true)
                        {
                            Console.WriteLine("You have chosen to attack with the Longsword for 2 DMG!");
                        }
                        else
                        {
                            Console.WriteLine("You don't have a longsword!");
                        }
                        break;
                    case ConsoleKey.D3:
                        Console.WriteLine("");
                        if (Items.iniBow == true)
                        {
                            Console.WriteLine("You have chosen to attack with the Bow for 3 DMG!");
                        }
                        else
                        {
                            Console.WriteLine("You don't have a Bow!");
                        }
                        break;
                    case ConsoleKey.D4:
                        Console.WriteLine("");
                        if (Items.iniLightstaff == true)
                        {
                            Console.WriteLine("You have chosen to attack with the Lightstaff for 4 DMG!");
                        }
                        else
                        {
                            Console.WriteLine("You don't have a Lightstaff!");
                        }
                        break;
                    case ConsoleKey.D5:
                        Console.WriteLine("");
                        Console.WriteLine("You can't attack with an Apple!");
                        break;
                    case ConsoleKey.D6:
                        Console.WriteLine("");
                        Console.WriteLine("You can't attack with a Golden Key!");
                        break;
                    case ConsoleKey.D7:
                        Console.WriteLine("");
                        Console.WriteLine("You can't attack with a Steak!");
                        break;
                }
            }
            break;
        case ConsoleKey.D2:
            Console.WriteLine("");
            if (Items.iniLongsword == true)
            {
                Console.WriteLine("You have chosen to attack with the Longsword for 2 DMG!");
            }
            else
            {
                Console.WriteLine("You don't have a longsword!");
            }
            break;
        case ConsoleKey.D3:
            Console.WriteLine("");
            if (Items.iniBow == true)
            {
                Console.WriteLine("You have chosen to attack with the Bow for 3 DMG!");
            }
            else
            {
                Console.WriteLine("You don't have a Bow!");
            }
            break;
        case ConsoleKey.D4:
            Console.WriteLine("");
            if (Items.iniLightstaff == true)
            {
                Console.WriteLine("You have chosen to attack with the Lightstaff for 4 DMG!");
            }
            else
            {
                Console.WriteLine("You don't have a Lightstaff!");
            }
            break;
        case ConsoleKey.D5:
            Console.WriteLine("");
            Console.WriteLine("You can't attack with an Apple!");
            break;
        case ConsoleKey.D6:
            Console.WriteLine("");
            Console.WriteLine("You can't attack with a Golden Key!");
            break;
        case ConsoleKey.D7:
            Console.WriteLine("");
            Console.WriteLine("You can't attack with a Steak!");
            break;
        default:
            correct = false;
            break;
    }
}
while (!correct);

Upvotes: 2

user2138160
user2138160

Reputation: 279

You need to print out "Please press another key" then add a new input variable and switch statement. This way a user can press the key 7 twice. The first switch will be used to do whatever you want when the user presses the button for the first time. And the second switch statement will control what happens when the user presses the key again.

           var input2 = Console.ReadKey();

            //Key checker for items
            switch (input2.Key)
            {
               //CODE HERE (PRINT PLEASE PRESS ANOTHER KEY)
            }

           var input3 = Console.ReadKey();
            switch (input3.Key)
            {
               //CODE HERE 
            }

Upvotes: 0

Tigran
Tigran

Reputation: 62265

Example code:

string key;
do {

   key = Console.Read(); 
   if(key == ..) {
   }
   else if(key == ...) {
   }
   else if(..) {
   }

}while(key == WRONG_KEY);

Upvotes: 0

Related Questions