Я работаю над небольшой игрой, которая основана на карте квадратов сетки. У меня есть класс (clsGrid), который хранит несколько свойств для каждого квадрата сетки. Квадратные объекты сетки организованы в список (из clsGrid).
Читатель цикла и потока успешно считывает свойства из текстового файла, помещает свойства в объекты сетки и добавляет объекты сетки в мой список сеток. При получении сетки из списка сеток я получаю необычные результаты. Независимо от индекса, который я даю в списке, я всегда получаю последнюю индексированную сетку в списке. Похоже, что отладчик предполагает, что правильные числа читаются в потоковом считывателе и добавляются в gridHolder. Однако в окне сообщения в конце всегда отображается LAST grid.id, независимо от того, какой индекс я ему предоставляю.
Я работал над этим так долго, что, наверное, что-то глупо. Заранее спасибо за помощь.
'A subroutine that generates a map (list of grids)
Sub GenerateMap()
Dim reader As StreamReader = File.OpenText("map1.txt")
Dim gridHolder As New clsGrid
'The streamreader peeks at the map file. If there's nothing in it, a warning is displayed.
If reader.Peek = CInt(reader.EndOfStream) Then
MessageBox.Show("The map file is corrupted or missing data.")
reader.Close()
Else
'If the map file has information, X and Y counts are read
intXCount = CInt(reader.ReadLine)
intYCount = CInt(reader.ReadLine)
'Reads in grid properties until the end of the file
Do Until reader.Peek = CInt(reader.EndOfStream)
gridHolder.TerrainType = CInt(reader.ReadLine)
gridHolder.MovementCost = CInt(reader.ReadLine)
gridHolder.DefensiveBonus = CInt(reader.ReadLine)
gridHolder.ID = listMap.Count
listMap.Add(gridHolder)
Loop
reader.Close()
End If
End Sub
'This function returns a Grid object given an X and Y coordinate
Function lookupGrid(ByVal intX As Integer, ByVal intY As Integer) As clsGrid
Dim I As Integer
Dim gridHolder As New clsGrid
'This formula finds the index number of the grid based on its x and y position
I = ((intX * intYCount) + intY)
gridHolder = listMap.Item(I)
MessageBox.Show(gridHolder.ID.ToString)
Return gridHolder
End Function