Создание переменной для сетки в VB.net - PullRequest
1 голос
/ 07 сентября 2011

Мне нужно хранить элементы в многомерном массиве. В частности, мне нужно сохранить «плитки» в сетке (например, трава в x: 2 y: 5, грязь в x: 3 y: 5 и т. Д.). Использование многомерного чувствует себя очень взломанным и очень сбойным (необходимость изменять размеры моих массивов и создавать новые, если они не существуют). Есть ли какой-то элемент для этого? Что-то, что я могу сказать obj.getPos (2,5), получить свой элемент Grass и использовать obj.setPos (DirtObj, 3, 5), чтобы установить его для моего элемента грязи?

Мне просто интересно, есть ли что-то более простое в использовании, чем многомерные массивы в vb.net, вот и все. Спасибо!

1 Ответ

1 голос
/ 07 сентября 2011

Вариант 1 - Класс

Если вы собираетесь добавлять, удалять и вставлять объекты, я бы использовал список списков, поскольку это даст вам прямой доступ к объекту с заданной координатой (X, Y) и позволит вам установить объект напрямую без необходимости изменять их размер.

Например, вы можете иметь класс Tile и использовать списки следующим образом:

Dim level As New List(Of List(Of Tile))

' load your level into the lists here!

level(2)(5) ' returns the Tile object at coordinate (2, 5) from above

level(3)(5) = New Tile(TileTypes.Dirt) ' sets a dirt tile at coordinate (3, 5) from above TileTypes would be a simple enum



Вариант 2 - Enum

Если все, для чего вы используете объекты, это их значение, вам даже не нужно создавать класс Tile, вместо этого вы можете просто создать перечисление TileTypes с некоторыми значениями, такими как Dirt, Grass, и т.д. и установите их:

Public Enum TileTypes
    Dirt
    Grass
    'etc
End Enum

Dim level As New List(Of List(Of TileTypes))

' load your level into the lists here!

level(2)(5) ' returns the TileTypes value stored at coordinate (2, 5) from above

level(3)(5) = TileTypes.Dirt ' sets a dirt tile at coordinate (3, 5) from above

Вы должны быть в состоянии развить это и взять его оттуда.

...