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))
您必须通过引用传递值。因此它可以更新主方法中的更改。用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将具有与调用该方法之前相同的值。
我不知道有什么方法可以简化字符串比较。您可以将这两个字符串都下切,只使用==运算符,但我不确定这是否更简单。