我在班级Enemy
下面有一个名为Program
的班级(这是有Main
的班级):
abstract public class Enemy
{
public string name { get; set; }
public int baseHealth { get; set; }
public int baseAttackDamage { get; set; }
public int baseMagicDamage { get; set; }
public int level { get; set; }
public int baseMoneyDropped { get; set; }
public string damageType { get; set; }
public int GenerateEnemyLevel()
{
Random genEnemyLevelModifier = new Random();
int getEnemyLevel = genEnemyLevelModifier.Next(-3, 3) + player.level;
return(getEnemyLevel);
}
}
此代码的问题在于它说
播放器,在当前上下文中不存在于player.level中。
以下是player
中的Main
个实例,以及Player
类上方的Enemy
类。
//Player decleration
Player player = new Player();
player.level = 1;
player.id = 1
玩家类:
public class Player
{
public string name { get; set; }
public int id { get; set; }
public string currentClass { get; set; }
public int level { get; set; }
public int experience { get; set; }
}
答案 0 :(得分:3)
Player
在此上下文中不存在:
public int GenerateEnemyLevel()
{
Random genEnemyLevelModifier = new Random();
int getEnemyLevel = genEnemyLevelModifier.Next(-3, 3) + player.level;
return(getEnemyLevel);
}
您正在尝试设置对象的属性,但您所拥有的只是尚未实例化的Player
类。
在面向对象编程中,您正在使用类的实例(称为对象)。在这种情况下,您没有Player
的实例。
相反,请考虑使您的代码看起来像这样:
public int GenerateEnemyLevel(Player player)
{
Random genEnemyLevelModifier = new Random();
int getEnemyLevel = genEnemyLevelModifier.Next(-3, 3) + player.level;
return(getEnemyLevel);
}
然后,您将把Player
类的实例传递给方法。
例如:
Player p = new Player();
GenerateEnemyLevel(p);
编辑 -
对可行的方法的更详细解答。我不确定你为什么使用抽象类,但你可以考虑类似于以下内容:
abstract public class Enemy
{
public string name { get; set; }
public int baseHealth { get; set; }
public int baseAttackDamage { get; set; }
public int baseMagicDamage { get; set; }
public int level { get; set; }
public int baseMoneyDropped { get; set; }
public string damageType { get; set; }
public Player player { get; set;}
public Enemy()
{
player = new Player();
}
public int GenerateEnemyLevel()
{
Random genEnemyLevelModifier = new Random();
int getEnemyLevel = genEnemyLevelModifier.Next(-3, 3) + player.level;
return(getEnemyLevel);
}
}
通过将方法Enemy
添加到抽象类中,您已经创建了一个构造函数。这在对象实例化时运行。请注意,您无法直接实例化抽象,您需要建立一些排序级别的继承,例如类似于此的实现:
public class BadGuy : Enemy
{
}
因此,如果你不想在早期就深入研究这些内容,我建议为了简单起见而删除抽象关键字。
答案 1 :(得分:1)
您的抽象敌人类没有任何player
的引用。只需传递它应该工作的实例
public int GenerateEnemyLevel(Player player)
{
Random genEnemyLevelModifier = new Random();
int getEnemyLevel = genEnemyLevelModifier.Next(-3, 3) + player.level;
return (getEnemyLevel);
}