Хорошо, чтобы подвести итог, что я делаю, я являюсь частью группы колледжей, которая хочет разработать пошаговую стратегическую игру для Microsoft Surface.У меня вопрос не связан с сенсорным управлением, так что не беспокойтесь об этом.Эта игра будет разработана для Surface с использованием WPF и .NET 3.5 Framework.
Боевая система игры будет очень похожа на игровые стили популярных игр, таких как Fire Emblem, Final Fantasy Tactics и Disgaea 2, где всеюниты будут размещены на сеточном поле, которое будет представлять их позицию, а также будет использоваться для перемещения юнитов и диапазонов атаки.
Теперь, учитывая, что эта игра будет в значительной степени основана на сетке, я решил, чтолучший способ сделать это - использовать стандартный System.Windows.Controls.Grid и определить столько строк и столбцов, сколько необходимо в коде XAML.
Пример:
<Grid Background="{StaticResource WindowBackground}" x:Name="GridField" ShowGridLines="True" Width="1024" Height="768">
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
<RowDefinition Height="32"/>
<RowDefinition Height="32"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="32"/>
<ColumnDefinition Width="32"/>
<ColumnDefinition Width="32"/>
</Grid.ColumnDefinitions>
Этокод будет создавать и показывать сетку 3x3 с размером каждого блока сетки 32x32.
Теперь предположим, что существует полностью разработанный класс с именем Unit, который будет содержать всю информацию для представления модуля, включая его имя иИзображение, которое представляет этот блок.Ради аргумента, предположим, что изображение отряда имеет правильный размер и формат для правильного отображения при назначении на сетку.
Для текущего плана моей команды мы намерены представить все отряды, которые в настоящее время находятся на поле, вмассив в коде C #.
Пример:
public Unit[,] allUnits = new Unit[3,3];
Где [3,3] представляет количество столбцов и строк, определенных сеткой.
Теперь,обычно, чтобы назначить отдельный элемент в сетке, вы должны определить позицию элемента, явно говоря что-то вроде:
Grid.Row = "1" Grid.Column = "1" Source = "{Binding Unit.Picture} "
Теперь я ЗНАЮ, что это неправильный синтаксис, но мне действительно безразличен этот метод, и мой пример, по крайней мере, дает представление о том, как он обрабатывается.
Так что здесьмой вопрос: есть ли способ напрямую привязать мои 2-мерные массивы единиц к моей определенной сетке, не определяя положение каждого элемента?Например: если есть способ представить саму сетку в виде массива, например, GridField [1,2] будет представлять Grid.Row = "1" Grid.Column = "2" (<-Это возможно в обратном направлении),тогда все, что мне нужно сделать, это сказать GridField [1,2] = Unit [1,2]. Picture или что-то похожее на это. </p>
Я не уверен, что есть способ сделать это, поэтомуВот почему я спрашиваю о наилучшем способе сделать это.
Подводя итог: я хочу знать, как напрямую связать мою сетку с моим двухмерным массивом единиц, чтобы сетка стала видимым представлениемединицы в моем массиве.Я хочу знать, как это сделать без необходимости явно определять содержимое каждого отдельного блока сетки, чтобы указывать на правильную позицию массива.Я предпочел бы, чтобы каждая единица не определяла свою позицию, потому что это является целью двумерного массива, но если это неизбежно, пусть так и будет.
Я надеюсь, что есть реальное решение этой проблемы, потому чтоесли нет следующего шага, я бы создал свою собственную сетку, что было бы больно.
Я прошу прощения за любые орфографические ошибки и за длину этого вопроса, но я хотел сделать себя так же ясно, каквозможно.
Спасибо за ваше время и предложения, FrostFlame64