我正在用 C# 实现一个基于文本的游戏。 在“游戏”类中,我正在初始化一个播放器。如果玩家完成了任务,他将会获得一些奖励。因此,我想将初始化的播放器交给另一个名为 QuestGUI 的类。
游戏类的构造函数:
public Game()
{
Item[] initialItems = new Item[]
{
new Weapon("Sword", 10),
};
main_player = new Player("Omegar", 100, initialItems);
Quest[] quests = new Quest[]
{
new Quest(...);
};
QuestHub QuestHub = new QuestHub(quests);
QuestGUI = new QuestGUI(QuestHub);
QuestHubGUI = new QuestHubGUI(QuestHub);
QuestGUI.Player = main_player;
}
这是我想在 QuestGUI 类中执行的操作:
QuestHub.DisplayResult(quest, input);
Item reward = Player.GenerateItem();
Player.AddItem(reward);
Player.ReceiveItemMessage(reward);
QuestGUI 类的构造函数:
public Player Player { get; set; }
public QuestHub QuestHub { get; set; }
public QuestGUI(QuestHub questHub)
{
QuestHub = questHub;
}
我尝试运行上面描述的内容。我希望程序首先显示任务结果,然后为玩家提供生成的项目。相反,我得到了以下异常:
System.NullReferenceException:“未将对象引用设置为对象的实例。”
lb426_test.QuestGUI.Player.get 返回 null。
您在
main_player
类中声明了 Game
。在 QuestGUI
类中,您声明了属性 Player
,该属性未在 QuestGUI
的构造函数中初始化。您必须将播放器添加为构造函数参数并初始化它。
public Player Player { get; set; }
public QuestHub QuestHub { get; set; }
public QuestGUI(QuestHub questHub, Player player)
{
QuestHub = questHub;
Player = player;
}
那么需要将
Game
类中的构造函数调整为
public Game()
{
Item[] initialItems = new Item[]
{
new Weapon("Sword", 10),
};
main_player = new Player("Omegar", 100, initialItems);
Quest[] quests = new Quest[]
{
new Quest(...);
};
QuestHub QuestHub = new QuestHub(quests);
QuestGUI = new QuestGUI(QuestHub);
QuestHubGUI = new QuestHubGUI(QuestHub);
QuestGUI.Player = main_player;
}