C#当循环未按预期工作时
我在我的游戏中有一个boss战斗,我正在为一个职业工作,但它没有按预期工作,在boss或玩家死亡后,它会打印各种攻击和死亡信息 我对代码很陌生,今年刚开始上课 提前谢谢 这是老板之战:C#当循环未按预期工作时,c#,if-statement,while-loop,console,C#,If Statement,While Loop,Console,我在我的游戏中有一个boss战斗,我正在为一个职业工作,但它没有按预期工作,在boss或玩家死亡后,它会打印各种攻击和死亡信息 我对代码很陌生,今年刚开始上课 提前谢谢 这是老板之战: public static void redKeeperBattle() { if (boss.redKeeperHealth <= 0 && (player.playerHealth <= 0)) {
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 ();
}
publicstaticvoid redKeeperBattle()
{
如果(boss.redKeeperHealth您使用递归循环和while循环,这太复杂了。很难理解您的问题到底是什么。您必须选择使用什么
1) 环路
2) 递归
function P(){
if(boss.redKeeperAlive == true){
P()
}
}
但不能同时使用两者。这里是代码的修改版本。由于它基于您的代码,因此仍需要更多的工作,但我注意到的一些事情是:
不使用函数
没有正确使用“如果”语句
没有正确使用递归和循环
我建议多读一点这些
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
public class Boss
{
public int redKeeperHealth = 100;
}
public class Player
{
public int playerHealth = 100;
public string playerName = "Ace";
}
class Program
{
public static Boss boss = new Boss();
public static Player player = new Player();
static void Main(string[] args)
{
redKeeperBattle();
}
public static void redKeeperBattle()
{
//Player damage
Random pDmg = new Random();
int playerDmg;
//Player dodge
Random pDodge = new Random();
int playerDodge;
//Player crit
Random pCrit = new Random();
int playerCrit;
//Red keeper damage
Random rDmg = new Random();
int redDmg;
while (boss.redKeeperHealth > 0 && player.playerHealth > 0)
{
PrintToScreen();
int playerChoice = ReadPlayerChoice();
if (playerChoice == 1)
{
playerDmg = pDmg.Next(5, 16);
playerCrit = pCrit.Next(10, 16);
if (playerCrit == 15)
{
playerDmg += playerCrit;
Console.WriteLine("");
Console.Write("You critically struck ");
}
Console.WriteLine("");
Console.WriteLine("You hit The Red Keeper for {0}", playerDmg);
boss.redKeeperHealth -= playerDmg;
redDmg = rDmg.Next(1, 21);
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("The Red Keeper ");
Console.ResetColor();
Console.WriteLine("hit you for {0}", redDmg);
Console.ForegroundColor = ConsoleColor.Gray;
redDmg = rDmg.Next(1, 21);
player.playerHealth -= redDmg;
Console.WriteLine("Press Enter to continue");
Console.ReadLine();
Console.ResetColor();
}
else if (playerChoice == 2)
{
Console.WriteLine("");
Console.ForegroundColor = ConsoleColor.DarkGray;
Console.WriteLine("You attempt to dodge!");
Console.ResetColor();
Console.ReadLine();
playerDodge = pDodge.Next(1, 11);
if (playerDodge > 5)
{
redDmg = rDmg.Next(1, 21);
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();
}
else
{
redDmg = rDmg.Next(1, 21);
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();
}
}
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();
}
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.redKeeperHealth > 0)
{
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 && player.playerHealth > 0)
{
Console.Write("You have defeated ");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("The Red Keeper!");
Console.ResetColor();
Console.ReadLine();
redKeeperRoom();
}
}
}
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();
}
private static void PrintToScreen()
{
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();
}
private static int ReadPlayerChoice()
{
return int.Parse(Console.ReadLine());
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
命名空间控制台应用程序1
{
公务舱老板
{
公共int redKeeperHealth=100;
}
公开课选手
{
公共int playerHealth=100;
公共字符串playerName=“Ace”;
}
班级计划
{
公共静态Boss=新Boss();
公共静态播放器=新播放器();
静态void Main(字符串[]参数)
{
雷德基佩尔巴特();
}
公共静态void redKeeperBattle()
{
//玩家伤害
随机pDmg=新随机();
int playerDmg;
//玩家闪避
Random pDodge=新的Random();
int playerDodge;
//玩家暴击
Random pCrit=新的Random();
int playerCrit;
//红色守护者伤害
随机rDmg=新随机();
int-redDmg;
while(boss.redKeeperHealth>0&&player.playerHealth>0)
{
打印屏幕();
int playerChoice=ReadPlayerChoice();
如果(playerChoice==1)
{
playermg=pDmg.Next(5,16);
playerCrit=pCrit.Next(10,16);
如果(playerCrit==15)
{
playerDmg+=playerCrit;
控制台。写线(“”);
安慰。写(“你受到了批评”);
}
控制台。写线(“”);
WriteLine(“你击中了红色门将{0}”,playerDmg);
boss.redKeeperHealth-=playerDmg;
redDmg=rDmg.Next(1,21);
Console.ForegroundColor=ConsoleColor.Red;
控制台。写(“红色守护者”);
Console.ResetColor();
WriteLine(“点击你的{0}”,redDmg);
Console.ForegroundColor=ConsoleColor.Gray;
redDmg=rDmg.Next(1,21);
player.playerHealth-=redDmg;
Console.WriteLine(“按Enter键继续”);
Console.ReadLine();
Console.ResetColor();
}
否则如果(playerChoice==2)
{
控制台。写线(“”);
Console.ForegroundColor=ConsoleColor.DarkGray;
控制台。WriteLine(“你试图闪避!”);
Console.ResetColor();
Console.ReadLine();
playerDodge=pDodge.Next(1,11);
如果(播放模式>5)
{
redDmg=rDmg.Next(1,21);
Console.ForegroundColor=ConsoleColor.Green;
WriteLine(“你成功闪避并获得10点生命!”);
Console.ReadLine();
player.playerHealth+=10;
Console.ForegroundColor=ConsoleColor.Red;
控制台。写(“红色守护者”);
Console.ResetColor();
WriteLine(“可能会打到你{0}HP!”,redDmg);
Console.ReadLine();
}
其他的
{
redDmg=rDmg.Next(1,21);
Console.ForegroundColor=ConsoleColor.Red;
控制台。WriteLine(“道奇失败!”);
Console.ResetColor();
Console.ReadLine();
Console.ForegroundColor=ConsoleColor.Red;
控制台。写(“红色守护者”);
Console.ResetColor();
WriteLine(“点击你的{0}”,redDmg);
Console.ForegroundColor=ConsoleColor.Gray;
控制台。WriteLine(“按回车键结束他的回合…”);
Console.ResetColor();
player.playerHealth-=redDmg;
Console.ReadLine();
}
}
其他的
{
控制台。写线(“”);
Console.ForegroundColor=ConsoleColor.Red;
Console.WriteLine(“发生错误!请重试!”);
Console.ForegroundColor=ConsoleColor.Gray;
Console.WriteLine(“按Enter键继续…”);
Console.ResetColor();
Console.ReadLine();
}
如果(boss.redKeeperHealth 20)
{
Console.ForegroundColor=ConsoleColor.Yellow;
}
其他的
{
Console.ForegroundColor=ConsoleColor.Red;
}
Console.WriteLine(“{0}”,player.playerHealth);
控制台。写线(“”);
控制台。写线(“”);
Console.ForegroundColor=ConsoleColor.Pigenta;
WriteLine(“您想做什么?”);
控制台。写线(“1)攻击”);
控制台。写线(“2)道奇”);
控制台。写线(“”);
Console.ResetColor();
}
私有的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
public class Boss
{
public int redKeeperHealth = 100;
}
public class Player
{
public int playerHealth = 100;
public string playerName = "Ace";
}
class Program
{
public static Boss boss = new Boss();
public static Player player = new Player();
static void Main(string[] args)
{
redKeeperBattle();
}
public static void redKeeperBattle()
{
//Player damage
Random pDmg = new Random();
int playerDmg;
//Player dodge
Random pDodge = new Random();
int playerDodge;
//Player crit
Random pCrit = new Random();
int playerCrit;
//Red keeper damage
Random rDmg = new Random();
int redDmg;
while (boss.redKeeperHealth > 0 && player.playerHealth > 0)
{
PrintToScreen();
int playerChoice = ReadPlayerChoice();
if (playerChoice == 1)
{
playerDmg = pDmg.Next(5, 16);
playerCrit = pCrit.Next(10, 16);
if (playerCrit == 15)
{
playerDmg += playerCrit;
Console.WriteLine("");
Console.Write("You critically struck ");
}
Console.WriteLine("");
Console.WriteLine("You hit The Red Keeper for {0}", playerDmg);
boss.redKeeperHealth -= playerDmg;
redDmg = rDmg.Next(1, 21);
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("The Red Keeper ");
Console.ResetColor();
Console.WriteLine("hit you for {0}", redDmg);
Console.ForegroundColor = ConsoleColor.Gray;
redDmg = rDmg.Next(1, 21);
player.playerHealth -= redDmg;
Console.WriteLine("Press Enter to continue");
Console.ReadLine();
Console.ResetColor();
}
else if (playerChoice == 2)
{
Console.WriteLine("");
Console.ForegroundColor = ConsoleColor.DarkGray;
Console.WriteLine("You attempt to dodge!");
Console.ResetColor();
Console.ReadLine();
playerDodge = pDodge.Next(1, 11);
if (playerDodge > 5)
{
redDmg = rDmg.Next(1, 21);
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();
}
else
{
redDmg = rDmg.Next(1, 21);
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();
}
}
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();
}
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.redKeeperHealth > 0)
{
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 && player.playerHealth > 0)
{
Console.Write("You have defeated ");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("The Red Keeper!");
Console.ResetColor();
Console.ReadLine();
redKeeperRoom();
}
}
}
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();
}
private static void PrintToScreen()
{
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();
}
private static int ReadPlayerChoice()
{
return int.Parse(Console.ReadLine());
}
}