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 блоков, и код знает, что их нет, поэтому в конце он запрашивает их.

Удачи.

Другие вопросы по тегам