2013-12-21 5 views
1

Мне нужно вернуться к началу кода, показанного здесь после того, как пользователь вводит неправильный ключ. Есть ли простая строка кода, которая просто вернется к другой строке? Как вы можете видеть, у меня уже установлен оператор if, поэтому я могу просто добавить что-то, что может вернуться в начало или в другую область моего кода. Я действительно совсем не знаком с C# и программированием в целом. Я просто не хочу, чтобы снова вводить весь код в другой оператор if, который мог бы вызвать ту же проблему. Я бы предпочел, чтобы код снова запускался после того, как пользователь вводит неправильный ключ, потому что тогда они могут перечитать его, не перезапуская его снова.Возвращаясь к началу блока кода?

//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; 
} 
+0

Когда пользователь нажал не ту клавишу, не было бы лучше, если вы просто попросите, чтобы ввести этот конкретный ключ еще раз? –

+0

Не можете ли вы установить код в функции и вызвать его снова и снова, пока пользователь не нажмет правильный ключ? Вот почему существуют функции – Sugar

+0

Не показывайте нам этот код (заверните его в функцию, как в примере, так и в вашем реальном коде), покажите нам, как вы его используете. –

ответ

0

у вас есть пара вариантов, вы можете использовать время цикла

bool continue = true; 
while(continue == true)// or you can simply type "while(continue)" 
{ 
    /* everything inside the `while` loop will be 
     repeated until `continue` is not `true`. */ 
} 

вы можете также использовать методы

public static void doStuff() 
{ 
    // insert stuff here 
} 

, а затем вы можете позвонить, что из других в классе

if(x = 6) 
{ 
    doStuff(); //this line does the stuff 
    doStuff(); // this line does the stuff again. 
} 
2

C# поддерживает метки в кода, однако это не рекомендуется из-за того, что он нарушает многие лучшие методы кодирования, но я думаю, что всегда существует исключение из любого правила.

class Program 
{ 
    static void Main(string[] args) 
    { 
    Start: 
     Console.WriteLine("Start Here... Press any key"); 
     var key = Console.ReadKey(true); 

     switch (key.Key) 
     { 
      case ConsoleKey.A: 
       goto MyLabel; 

      case ConsoleKey.B: 
       goto MyLabel2; 

      case ConsoleKey.C: 
       goto MyLabel3; 

      default: 
       Console.WriteLine("Bad Choice"); 
       goto Start; 

     } 

    MyLabel: 
     Console.WriteLine("MyLabel: A"); 
     goto Start; 

    MyLabel2: 
     Console.WriteLine("MyLabel: B"); 
     goto Start; 


    MyLabel3: 
     Console.WriteLine("MyLabel: C"); 
     goto Start; 
    } 
} 

Вы можете найти более подробную информацию здесь:

http://msdn.microsoft.com/en-us/library/d96yfwee.aspx http://msdn.microsoft.com/en-us/library/13940fs2.aspx

0

Один ответ на это, чтобы убедиться, что у вас есть правильный вход в цикл, как это:

while (true) 
{ 
    ConsoleKey i = Console.ReadKey() 
    if (i == ConsoleKey.D1 || ...) //Check if it's equal to any valid key, you 
            //might be able to simplify it with <= and 
            //>= if valid keys are sequential. 
     break; 
    Console.WriteLine("You have entered an invalid key"); 
} 

Кроме того, вы можете добавить инструкцию goto в конце блока переключателя:

SwitchStatement: switch(input2.Key) 
... 
default: 
    Console.WriteLine("Invalid key pressed"); 

    goto SwitchStatement; 
    break; 

}

Смежные вопросы