Pegz Game C# - Помощь Начало работы
Мне было поручено сделать базовую игру Pegz на C# в качестве задания для школы. Правила можно найти здесь: http://tinyurl.com/6wro5xc. Я не ищу шаг за шагом, как построить игру, а просто как начать. Я довольно новичок в разработке приложений на C#, но имею опыт разработки веб-приложений на C#.
Пока у меня есть панель макета управления потоком с сеткой из 5х5 обычных панелей. Внутри каждой обычной панели у меня есть окно с изображением колышка. Все панели заполнены, кроме одной, остается пустой. Смотрите прикрепленное изображение для примера. Чтобы отслеживать сетку панелей 5x5, я подумал, что буду использовать двухмерный BitArray, который будет содержать координаты панели в сетке и будет истинным, если колышек существует, или ложным, если его нет.
Мой первый вопрос: как мне связать сетку с массивом? Другими словами: откуда мне знать, что [0][0] массива будет представлять верхний левый угол сетки? У меня есть следующий конструктор для массива BitArray[,] board = new BitArray[5,5];
Я знаю, что сначала мне придется циклически проходить по массиву и присваивать всем значениям, кроме одного, значение true, но затем мне нужно будет взять эти данные в массиве и применить их к Grid. Понятие о том, как связать этот массив с сеткой, является частью, в которой я застрял.
Я ценю любую помощь.
2 ответа
Несомненно, есть лучшие идеи, чем эта, но, тем не менее, есть кое-что, с чего можно начать...
Вместо создания массива битов создайте массив класса, который вы создаете, чтобы представить точку, которая также будет содержать методы для установки / сброса точки. Тогда вы можете сделать что-то вроде MyGrid[x][y].Set();.
Вы также можете изучить использование коллекций вместо массивов. Я редко использую массивы для чего-либо еще, кроме операций низкого уровня или устаревшего типа, которые требуют их.
Используйте массивы Dyanmic намного быстрее, чем многомерные, но используйте последний, если это проще, и вы знаете значения. Предполагая, что вы знаете значения каждого целого числа в поле, похоже, у вас есть [5][5] двумерный массив. Использование.NET и C++ где-то хорошо для начала было бы:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector <int> DynArrNums(25);
DynArrNums[0] = //Put any value here which you know for the rules of your game as a number;
DynArrNums[1] = 1001;
DynArrNums[2] = 1002;//Put any value here which you know for the rules of your game as a number;
DynArrNums[3] = 1003;//Put any value here which you know for the rules of your game as a number;
DynArrNums[4] = 1004;//Put any value here which you know for the rules of your game as a number;
DynArrNums[5] = 1005;//Put any value here which you know for the rules of your game as a number;
DynArrNums[6] = 1006;//Put any value here which you know for the rules of your game as a number;
DynArrNums[7] = 1007;//Put any value here which you know for the rules of your game as a number;
DynArrNums[8] = 1008;//Put any value here which you know for the rules of your game as a number;
DynArrNums[9] = 1009;//Put any value here which you know for the rules of your game as a number;
DynArrNums[10] = 1010;//Put any value here which you know for the rules of your game as a number;
DynArrNums[11] = 1011;//Put any value here which you know for the rules of your game as a number;
DynArrNums[12] = 1012;//Put any value here which you know for the rules of your game as a number;
DynArrNums[13] = 1013;//Put any value here which you know for the rules of your game as a number;
DynArrNums[14] = 1014;//Put any value here which you know for the rules of your game as a number;
DynArrNums[15] = 1015;//Put any value here which you know for the rules of your game as a number;
DynArrNums[16] = 1016;//Put any value here which you know for the rules of your game as a number;
DynArrNums[17] = 1017;//Put any value here which you know for the rules of your game as a number;
DynArrNums[18] = 1018;//Put any value here which you know for the rules of your game as a number;
DynArrNums[19] = 1019;//Put any value here which you know for the rules of your game as a number;
DynArrNums[20] = 1020;//Put any value here which you know for the rules of your game as a number;
DynArrNums[21] = 1021;//Put any value here which you know for the rules of your game as a number;
DynArrNums[22] = 1022;//Put any value here which you know for the rules of your game as a number;
DynArrNums[23] = 1023;//Put any value here which you know for the rules of your game as a number;
DynArrNums[24] = 1024;//Put any value here which you know for the rules of your game as a number;
cout << "Enter another number for the array" << endl;
int AnotherNum = 0;
cin >> AnotherNum;
DynArrNums.push_back(AnotherNum);
cout << "Number of integers in array: " << DynArrNums.size() << endl;
cout << "Last element in array: ";
cout << DynArrNums[DynArrNums.size() - 1] << endl;
return 0;
}
Помните, что первый массив хранится как 0, поэтому в конце нужен минус 1. Я только что попробовал, и это работает:)
Однако динамическому массиву не нужно знать, что пропущенное целое число является средней панелью массива, просто нужно знать, что вы добавляете еще одну. Конечно, это делает его настраиваемым для вашей игры, и вы можете поставить любое значение. В этом случае он добавляет его в конец, и вы можете вызывать любое значение по его последовательности в массиве.
Чтобы найти число [0] это первая панель [1] это следующая панель. Поэтому [6] будет первой панелью второй строки [11] будет первой в строке 3 и так далее.
Наконец, DynArrNums[25] не означает, что у вас есть 25 заполненных полей. Это просто означает, что на вашей панели 25 блоков, и код знает, что их нет, поэтому в конце он запрашивает их.
Удачи.