c#为什么获胜';在我的代码中,来自不同类的变量的总和是多少

本文关键字:同类 变量 多少 获胜 为什么 代码 我的 | 更新日期: 2023-09-27 18:00:06

    public static void Main(string[] args)
    {
        string name = "asfd";
        int plhp = 100, plmp = 100, zenhp = 500;
        Random rdn = new Random();
        int atk = rdn.Next(10, 55);
        int zatk = rdn.Next(20, 35);
        while (plhp > 0 && zenhp > 0)
        {
            string action = Console.ReadLine();
            if (String.Equals(action, "attack", StringComparison.OrdinalIgnoreCase))
            {
                zenhp -= atk;
                Console.WriteLine("Zen has taken -" + atk.ToString() + " damage!");
                actionofzen(plhp, name, zenhp, zatk);
                Console.WriteLine("Your next move?");
            }
            else if (!(action == "attack" ))
            {
                Console.WriteLine("Invalid command.");
            }
        }
    }
    public static int actionofzen(int plhp, string name, int zenhp, int zatk)
    {
        Random rdn = new Random();
        string[] zenmoves = { "attack" };
        string zenaction = zenmoves[rdn.Next(zenmoves.Length)];
        if (zenaction == "attack")
        {
            plhp -= zatk;
            Console.WriteLine("Zen has countered, inflicting -" + zatk + " damage on " + name + ".");
        }
        return 0;
    }

问题是,无论禅做什么,都不会影响整体生命值,就像plhp -= zatk;什么都不做一样,只有玩家才能影响禅的健康。如何使这些来自不同类的变量相加?此外,我如何在保持StringComparison.OrdinalIgnoreCase的使用的同时简化它?

if (action.Equals("attack", StringComparison.OrdinalIgnoreCase) ||
    action.Equals("heal", StringComparison.OrdinalIgnoreCase))

c#为什么获胜';在我的代码中,来自不同类的变量的总和是多少

您必须通过引用传递值。因此它可以更新主方法中的更改。用ref关键字传递plhp这是它的工作小提琴https://dotnetfiddle.net/amHbXF

public static void Main()
    {
        Console.WriteLine("Hello World");
        string name = "asfd";
        int plhp = 100, plmp = 100, zenhp = 500;
        Random rdn = new Random();
        int atk = rdn.Next(10, 55);
        int zatk = rdn.Next(20, 35);
        while (plhp > 0 && zenhp > 0)
        {
            string action = Console.ReadLine();
            if (String.Equals(action, "attack", StringComparison.OrdinalIgnoreCase))
            {
                zenhp -= atk;
                Console.WriteLine("Zen has taken -" + atk.ToString() + " damage!");
                actionofzen(ref plhp, name, zenhp, zatk);
                Console.WriteLine("Player HP: " +plhp);
                Console.WriteLine("Zen HP: " +zenhp);
                Console.WriteLine("Your next move?");
            }
            else if (!(action == "attack"))
            {
                Console.WriteLine("Invalid command.");
            }
        }
    }
    public static int actionofzen(ref int plhp, string name, int zenhp, int zatk)
    {
        Random rdn = new Random();
        string[] zenmoves =
        {
        "attack"
        }
        ;
        string zenaction = zenmoves[rdn.Next(zenmoves.Length)];
        if (zenaction == "attack")
        {
            plhp -= zatk;
            Console.WriteLine("Zen has countered, inflicting -" + zatk + " damage on " + name + ".");
        }
        return 0;
    }

请参阅https://msdn.microsoft.com/en-us/library/14akc2c7.aspx了解plhp的情况。为了将对plhp的修改传播回调用方,必须将其作为ref类型传递。您的代码将其作为"副本"(值类型的默认值(传递,这意味着您可以在actionofzen中随心所欲地更改它,而调用者永远不会看到这些更改。plhp将具有与调用该方法之前相同的值。

我不知道有什么方法可以简化字符串比较。您可以将这两个字符串都下切,只使用==运算符,但我不确定这是否更简单。