2017-09-12 47 views
0

我正在重建一个基于文本的冒险游戏。在角色创建过程中,我希望用户随时键入'技能组'并列出特定种族的所有特征。我试了几个小时,似乎无法弄清楚。添加调用另一个方法的第二个命令?

这是我的角色创作班。

public string userCommand_SeachSkill; 

    SkillSet searchSkill = new SkillSet(); 

    public void Create_Character() 
    { 

     // CHOOSE GENDER // 
     do 
     { 
      validate = 0; 
      Console.Clear(); 
      Console.Write("Are you male or female? (f/m): "); 
      Sex = Console.ReadLine().ToUpper(); 


      if (Sex == "M" || Sex == "F") 
      { 
       validate = 1; 
      } 
      else if (Sex != "M" || Sex != "F") 
      { 
       Console.WriteLine("You must enter 'm' or 'f'"); 
      } 


     } while (validate == 0); 

这是我的技能集类。 if/else语句中的所有内容都是打印控制台竞赛特征的方法。让我知道如果还有什么我可以添加更好地问我的问题。先谢谢你! :)

ClassAttributes classes = new ClassAttributes(); 
Character character = new Character(); 
skillset = Console.ReadLine().ToUpper(); 
     do 
     { 
      validate = 0; 
      if (skillset == "HUMAN") 
      { 
       classes.SkillSetHuman(); 
      } 
      else if (skillset == "ORC") 
      { 
       classes.SkillSetOrc(); 
      } 
      else if (skillset == "ELF") 
      { 
       classes.SkillSetElf(); 
      } 
      else if (skillset == "EXIT") 
      { 
       validate = 1; 
       character.Create_Character(); 
      } 

     } while (validate == 0); 
+0

你的Sex and Skillset可能应该是[Enum](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/enum)。会让你的代码更易于阅读和维护。 –

+0

什么代码设置变量技能组?你如何期待它被设置为“退出”?现在你的代码将永远循环。 –

+0

skillset = Console.ReadLine()。ToUpper();读取用户的用户输入 –

回答

0

我认为你正在寻找类似于event的东西。 C#控制台应用程序似乎只有一种事件,它会在发生ctrl + c或ctrl + break时触发。您可以处理的函数处理你的技能的输入/输出逻辑

你可以在这里阅读更多: https://msdn.microsoft.com/library/system.console.cancelkeypress(v=vs.110).aspx

如果你真的需要的话要打字,你可以捕获在一个特殊的函数类型的一切,而不是使用常规的Console.ReadLine()。事情是这样的:

public static string CustomReadLine() 
    { 

     ConsoleKeyInfo cki; 
     string capturedInput = ""; 

     while (true) 
     { 

      cki = Console.ReadKey(true); 
      if (cki.Key == ConsoleKey.Enter) 
       break; 
      else if (cki.Key == ConsoleKey.Spacebar) 
      { 
       capturedInput += " "; 
       Console.Write(" "); 
      } 
      else if (cki.Key == ConsoleKey.Backspace) 
      { 
       capturedInput = capturedInput.Remove(capturedInput.Length - 1); 
       Console.Clear(); 
       Console.Write(capturedInput); 
      } 
      else 
      { 
       capturedInput += cki.KeyChar; 
       Console.Write(cki.KeyChar); 
      } 

      if (capturedInput.ToUpper().Contains("SKILLSET")) 
      { 
       capturedInput = ""; 
       skillsetTyped(); 
       return ""; 
      } 
     } 

     return capturedInput; 
} 

那么你Create_Character里面,做

... 
    do 
    { 
     Console.Write("Are you male or female? (f/m): "); 
     Sex = CustomReadLine(); 
    } while (String.IsNullOrEmpty(sex)); 

最后,在这里办理技能逻辑

protected static void skillsetTyped() 
{ 
    Console.Write("\nWrite your skillset capture/display logic here\n"); 
} 

这只是一个草案,并有一些小错误,但我相信它接近你真正想要的东西。

相关问题