我正在为一个基于小文本的游戏编写一个玩家类。播放器具有从actor类继承的属性,例如当前和最大健康状况。在为默认的新角色制作构造函数时,我遇到了一个错误,其中一个属性被设置为0,原因我无法解释。
以下是相关信息:
public class Player : Actor
{
private int _curHunger;
private int _maxHunger;
public Player()
{
this.CurrentHealth = 100;
this.MaxHealth = 100;
this.CurrentHunger = 100;
this.MaxHunger = 100;
}
public int CurrentHunger
{
get { return _curHunger; }
set
{
_curHunger = value;
if (_curHunger > _maxHunger)
{
_curHunger = _maxHunger;
}
if (_curHunger <= 0)
{
_curHunger = 0;
Random HealthLoss = new Random();
this.CurrentHealth -= HealthLoss.Next(1,3);
}
}
}
}
以下输出是最大饥饿变为100,而当前饥饿变为0.如果我删除if(_curHunger&gt; _maxHunger)语句,当前饥饿变为100.如果我将_curHunger设置为100而不是在构造函数中设置它输出变为100预期。
actor类中玩家当前和最大生命值的设置基本相同,没有这样的问题。
public int CurrentHealth
{
get { return _curHealth; }
set
{
_curHealth = value;
if (_curHealth > _maxHealth)
{
_curHealth = _maxHealth;
}
if (_curHealth <= 0)
{
MessageBox.Show("The actor died!");
}
}
}
我不能为我的生活弄清楚我做错了什么,我希望这是一个显而易见的事情,因为我过度疲惫而错过了。
提前感谢任何指导。如果重要,这是在Windows窗体上。
编辑:似乎在构造函数中切换this.CurrentHunger和this.MaxHunger已经解决了我的问题,但是这并不能解释为什么它在当前和最大的健康状况下工作得很好,同时搞砸了饥饿。答案 0 :(得分:3)
由于CurrentHunger
取决于MaxHunger
,因此您设置属性的顺序非常重要。如果您在设置MaxHunger
之前未明确设置CurrentHunger
,则_maxHunger
将为0,这将更改CurrentHunger
的行为方式。
首先尝试设置MaxHunger
:
public Player()
{
this.MaxHealth = 100;
this.CurrentHealth = 100;
this.MaxHunger = 100;
this.CurrentHunger = 100;
}
至于为什么它似乎适用于CurrentHealth
/ MaxHealth
,我只能假设你实际上没有在这里展示一些差异。也许_maxHealth
被初始化为某个默认值。