我在我的游戏中有这个boss战,我正在为一个班级工作,并且它不按预期工作,在老板或玩家死后打印各种攻击和死亡消息。C#虽然循环不按预期工作
我很新的代码,今年刚开始为一类
在此先感谢!
这里的boss战:
public static void redKeeperBattle()
{
if (boss.redKeeperHealth <= 0 && (player.playerHealth <= 0))
{
Console.Write("You have defeated ");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("The Red Keeper!");
Console.ResetColor();
Console.ReadLine();
Console.Write("But you have also ");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Died!");
Console.ResetColor();
Console.ReadLine();
playerDeath();
}
if (player.playerHealth <= 0)
{
boss.redKeeperAlive = false;
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("The Red Keeper ");
Console.ResetColor();
Console.WriteLine("has killed {0}, how sad...", player.playerName);
Console.ReadLine();
playerDeath();
}
if (boss.redKeeperHealth <= 0)
{
boss.redKeeperAlive = false;
Console.Write("You have defeated ");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("The Red Keeper!");
Console.ResetColor();
Console.ReadLine();
redKeeperRoom();
}
while (boss.redKeeperAlive == true)
{
//Player damage
Random pDmg = new Random();
int playerDmg = pDmg.Next(5, 16);
//Player dodge
Random pDodge = new Random();
int playerDodge = pDodge.Next(1, 11);
//Player crit
Random pCrit = new Random();
int playerCrit = pCrit.Next(10, 16);
//Red keeper damage
Random rDmg = new Random();
int redDmg = rDmg.Next(1, 21);
Console.Clear();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("--------------------------------------------------------------------------------");
Console.WriteLine("");
Console.WriteLine("THE RED KEEPER: {0} HP", boss.redKeeperHealth);
Console.ResetColor();
Console.WriteLine("");
Console.Write("{0}: ", player.playerName);
if (player.playerHealth > 50)
{
Console.ForegroundColor = ConsoleColor.Green;
}
else if (player.playerHealth > 20)
{
Console.ForegroundColor = ConsoleColor.Yellow;
}
else {
Console.ForegroundColor = ConsoleColor.Red;
}
Console.WriteLine("{0}", player.playerHealth);
Console.WriteLine("");
Console.WriteLine("");
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine("What would you like to do?");
Console.WriteLine("1) Attack");
Console.WriteLine("2) Dodge");
Console.WriteLine("");
Console.ResetColor();
string attackChoice = Console.ReadLine();
if (attackChoice == "1" && (playerCrit == 15))
{
playerDmg += playerCrit;
Console.WriteLine("");
Console.Write("You critically struck ");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("The Red Keeper ");
Console.ResetColor();
Console.WriteLine("for {0} HP!", playerDmg);
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Press Enter to end your turn...");
boss.redKeeperHealth -= playerDmg;
Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("The Red Keeper ");
Console.ResetColor();
Console.WriteLine("hit you for {0}", redDmg);
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Press Enter to end his turn...");
Console.ResetColor();
player.playerHealth -= redDmg;
Console.ReadLine();
redKeeperBattle();
}
if (attackChoice == "1")
{
Console.WriteLine("");
Console.WriteLine("You hit The Red Keeper for {0}", playerDmg);
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Press Enter to end your turn...");
boss.redKeeperHealth -= playerDmg;
Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("The Red Keeper ");
Console.ResetColor();
Console.WriteLine("hit you for {0}", redDmg);
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Press Enter to end his turn...");
Console.ResetColor();
player.playerHealth -= redDmg;
Console.ReadLine();
redKeeperBattle();
}
if (attackChoice == "2" && (playerDodge > 5))
{
Console.WriteLine("");
Console.ForegroundColor = ConsoleColor.DarkGray;
Console.WriteLine("You attempt to dodge!");
Console.ResetColor();
Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("You successfully dodged and gained 10 HP!");
Console.ReadLine();
player.playerHealth += 10;
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("The Red Keeper ");
Console.ResetColor();
Console.WriteLine("would have hit you for {0} HP!", redDmg);
Console.ReadLine();
redKeeperBattle();
}
if (attackChoice == "2")
{
Console.WriteLine("");
Console.ForegroundColor = ConsoleColor.DarkGray;
Console.WriteLine("You attempt to dodge!");
Console.ResetColor();
Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Dodge failed!");
Console.ResetColor();
Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("The Red Keeper ");
Console.ResetColor();
Console.WriteLine("hit you for {0}", redDmg);
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Press Enter to end his turn...");
Console.ResetColor();
player.playerHealth -= redDmg;
Console.ReadLine();
redKeeperBattle();
}
else {
Console.WriteLine("");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("An error occurred! Please try again!");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Press Enter to continue...");
Console.ResetColor();
Console.ReadLine();
redKeeperBattle();
}
}
}
public static void redKeeperRoom()
{
//Continue game
Console.WriteLine ("The boss has died!");
Console.ReadLine();
}
public static void playerDeath()
{
//End game
Console.WriteLine ("You have Died!");
Console.ReadLine();
}
所以会发生什么是当人死后,它只是像修建垃圾邮件:
你打红守护者12 按Enter键结束轮到你了.. 。
红色守护打你14 按Enter键结束轮到他...
你已经打败了红色的守护者!
老板死了!
发生错误!请再试一次! 按Enter继续...
您已击败The Red Keeper!
老板死了!
你打红守护者29 按Enter键结束轮到你...
红色守护打你19 按Enter键结束轮到他...
你已经打败了的红色的守护者!
但你也死了!
你已经死了!
你有没有考虑时会发生什么'redKeeperBattle()'因为你是递归(这你可能不希望做调用它的回报... )。即'redKeeperBattle()'调用调用'redKeeperBattle()'的redKeeperBattle()'。现在,当第三个人回来时,控制权交还给第二个人。第二个电话是否正确?您可以使用静态int来计算呼叫号码并打印一些调试信息,以告诉您哪个呼叫正在输出意外数据。 – John3136
:/代码墙 –
对不起@ J.SMTBCJ15我真的不知道我在做什么。 :/ – Josh