从方法

时间:2015-06-23 19:48:02

标签: c#

您好我正在尝试制作一个简单的猎枪游戏,其中用户与CPU以及拾取镜头,屏蔽或重新加载但在我的GetOptionFromUser方法中我不知道如何根据用户的方式从枚举方法返回值选择。

任何指导都将不胜感激 这是我的方法

enum ShotgunOption
         {
             Shoot = 1,
             Reload = 2,
             Shield = 3


         }
        static void DisplayMenu()
        {

            Console.WriteLine("Please pick an item:");
            Console.WriteLine("S - Shoot");
            Console.WriteLine("P - Shield");
            Console.WriteLine("R - Reload");         
            Console.WriteLine("X - Exit");

        }

        static ShotgunOption GetOptionFromUser()
        {
            char menuItem;
            DisplayMenu();
            Console.WriteLine("Please Select A Option");
            menuItem = char.ToUpper(char.Parse(Console.ReadLine()));
            while (menuItem != 'S' && menuItem != 'P' &&
                menuItem != 'R' && menuItem != 'X')
            {
                Console.WriteLine("Error - Invalid menu item");
                DisplayMenu();
                menuItem = char.ToUpper(char.Parse(Console.ReadLine()));
            }
            return ShotgunOption;
        }
        static void DisplayResults(ShotgunOption UserOption,ShotgunOption CPUOption, int UserScore, int UserBullets, int CPUBullets)
    {
        Console.Clear();
        Console.WriteLine("Giving up?");
        Console.WriteLine("You Chose {0}, The Computer Chose{1} Your Score is {3} . You had {4} Bullet(s). The CPU had {5} bullets(s).", UserOption, CPUOption, UserScore, UserBullets, CPUBullets);
        Console.WriteLine("Thanks for playing!");
        Console.ReadKey();

    }

3 个答案:

答案 0 :(得分:1)

在GetOptionFromUser方法中,您需要检查用户选择的内容。基于此,您将返回ShotgunOption.Shot,ShotgunOption.Reload或ShotgunOption.Shield。像这样:

if (menuItem == 'S')
     return ShotgunOption.Shoot;
if (menuItem == 'P')
     return ShotgunOption.Shield;

...

除此之外,请考虑到这一点:

1)将用户界面(UI)与应用程序的逻辑分开。在UI层中,您应该只检查用户输入,验证并将好请求传递给业务层。业务层将完成工作并将结果返回到UI层。

2)不要一直使用“静态”。静态仅在您不需要对象时或者您想要在同一时间的对象之间共享值或者该类仅具有不依赖于对象状态的方法时才有意义。

答案 1 :(得分:0)

您还可以利用char本身可以作为数字处理的事实,并且这些数字可以直接分配给枚举:

  enum ShotgunOption
        {
            Shoot = 'S',
            Reload = 'R',
            Shield = 'P'
        }

这样可以通过查看值是否已定义来完成检查。以char menuitem为例:

 // char menuitem...
 //X should be checked before and handled appropiately, or else added in the enumeration
 if (Enum.IsDefined(typeof(ShotgunOption), (int)menuItem ))
            return (ShotgunOption)menuItem ;
 //throw exception, return nullable<shotgunoption> or print error message. 

提到了这一点,只是一些值得思考的问题:如果你定义了一个包含menukey,描述和动作的类,而不是枚举,你可以使用该类的列表来显示菜单,通过在类本身中实现该操作来确定所选操作执行该操作。

答案 2 :(得分:0)

您需要使用switch语句(或一系列if语句)来返回取决于所选菜单值的显式枚举值。像这样:

    static ShotgunOption GetOptionFromUser()
    {
        char menuItem;
        DisplayMenu();
        Console.WriteLine("Please Select A Option");
        menuItem = char.ToUpper(char.Parse(Console.ReadLine()));
        while(true)
        {
            switch(menuItem)
            {
                case 'S': return ShotgunOption.Shoot;
                case 'P': return ShotgunOption.Shield;
                case 'R': return ShotgunOption.Reload;
                case 'X': return ShotgunOption.Exit;
                default:
                    Console.WriteLine("Error - Invalid menu item");
                    DisplayMenu();
                    menuItem = char.ToUpper(char.Parse(Console.ReadLine()));
            }
        }

        return ShotgunOption.Exit; // to keep compiler happy
    }