随机敌人分配
本文关键字:分配 敌人 随机 | 更新日期: 2023-09-27 18:00:52
我正试图将Enemy-敌方类实例分配给一个随机的新敌方实例。例如:
public Enemy GetEnemy()
{
Random rand = new Random();
Enemy newenemy = new Enemy(string.Empty, 0, 0, 0, 0, 0);
if (Main.level == 1)
{
int z = rand.Next(0, 2);
if (z == 0)
{
newenemy = new Enemy("Chicken", 50, 0, 4, 11, 32);
}
else if (z == 1)
{
newenemy = new Enemy("Common Goblin", 67, 0, 8, 14, 36);
}
else if (z == 2)
{
newenemy = new Enemy("Rabbit", 50, 0, 15, 25, 9);
}
}
return newenemy;
}
然后在我的战斗功能中使用:(我会发布一些原因,因为它有点长(
if (whathappen == 2 || whathappen == 4 || whathappen == 6 || whathappen == 8 || whathappen == 10) //battle code
{
Console.Write("You were engaged by the enemy! 'nYou are fighting an enemy {0}'n", GetEnemy().name);
while (Main.health > 0 || GetEnemy().health > 0)
{
Console.Write("1) Attack With Weapon ");
int choose;
int.TryParse(Console.ReadLine(), out choose);
if (choose == 1)
{
int miss = r.Next(0, 6);
if (miss < 6)
{
int totaldamage = (r.Next(0, Main.RHand.damage) + r.Next(0, Main.LHand.damage)) - GetEnemy().armor;
GetEnemy().health -= totaldamage;
Console.WriteLine("You attack the {0} with a {1} and deal {2} damage!", GetEnemy().name, Main.RHand.name, totaldamage);
Console.WriteLine("The {0} has {1} health remaning!", GetEnemy().name, GetEnemy().health);
然而,当我测试我的游戏时,在战斗中没有分配敌人,我不明白为什么。这是输出:
你被敌人交战了!你在和敌人作战!(敌人名称应在敌人后面(
你用青铜匕首攻击(名字应该再次出现(并造成15点伤害!
有人能解释为什么会发生这种事吗?
您的代码有一些问题:
- 根据你对问题的描述,我猜
Main.level
不等于1 - 您没有正确使用
Random.Next
:Random.Next(0, 2)
永远不会等于2
但是,即使在解决了这些问题之后,你也会遇到一个更大的问题,那就是你创建了太多的Enemy
实例,却没有将它们保存到任何地方。
每次调用GetEnemy()
方法时,都会生成类的一个全新实例,访问其中的一个属性,然后它就会被丢弃。你试图维护你的敌人的状态,你需要保存你创建的实例并重用它,例如:
Enemy enemy = GetEnemy();
while (Main.health > 0 || enemy.health > 0)
{
.
.
.
}