我目前正在为基于文本的小型游戏编写玩家类。玩家具有继承自 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 > _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 已经解决了我的问题,但这并不能解释为什么它对于当前和最大的健康状况很好,同时又会因饥饿而混乱。