我想在文字冒险游戏的每个房间中创建一个物品列表,但是我希望每个物品既具有物品的名称,又具有物品的描述,所以我可以为该项目取决于我需要的项目。
Dim StartRoom As RoomInfo
Public Class Items
Public ItemName As String
Public ItemDescription As String
End Class
Public Structure RoomInfo
Dim RoomName As String
Dim BasicDescription As String
Dim RoomDescription As String
Dim ValidExists As List(Of String)
Dim ObjectsInRoom As List(Of String)
Dim ItemsInRoom As List(Of Items)
End Structure
Sub InitializeRooms()
StartRoom.RoomName = "Start Room"
StartRoom.RoomDescription = "Test Description"
StartRoom.BasicDescription = "Test Basic Description"
Dim TestItem As New Items With {
.ItemName = "Test Item",
.ItemDescription = "This is a Test Item"
}
StartRoom.ItemsInRoom.Add(TestItem)
End Sub
我创建了一个列表ItemsInRoom,它是一个Items列表,一个Class。这样,每个房间都可以拥有唯一的物品清单,可以在玩家拿起物品或与其互动时更改。这就是Initialize Rooms子程序的目的-我可以在游戏加载时运行它,并为游戏中的每个房间设置所有信息。 无论如何,当我尝试将TestItem添加到列表中时,会收到“对象引用未设置为对象的实例”。错误。我非常愚蠢,这可能是本书中最明显的错误,但是我找不到这种特殊情况的解决方案。 感谢您的帮助。
答案 0 :(得分:1)
这是您的类型声明应为的样子:
Public Class Item
Public Property Name As String
Public Property Description As String
End Class
Public Class Room
Public Property Name As String
Public Property BasicDescription As String
Public Property RoomDescription As String
Public ReadOnly Property ValidExists As New List(Of String)
Public ReadOnly Property Objects As New List(Of String)
Public ReadOnly Property Items As New List(Of Item)
End Class
类型和成员的更好名称,类而不是结构,属性而不是字段,在声明它们的位置创建的集合,集合属性为只读。