Pegz Game C # - Помощь Начало работы - PullRequest
2 голосов
/ 28 марта 2012

Мне было поручено сделать базовую игру Pegz на C # в качестве задания для школы. Правила можно найти здесь: http://tinyurl.com/6wro5xc. Я не ищу шаг за шагом, как построить игру, а просто как начать. Я довольно новичок в разработке приложений на C #, но имею опыт разработки веб-приложений на C #.

Пока у меня есть панель макета управления потоком с сеткой 5х5 обычных панелей внутри нее. Внутри каждой обычной панели у меня есть окно с изображением колышка. Все панели заполнены, кроме одной, остается пустой. Смотрите прикрепленное изображение для примера. Чтобы отслеживать сетку панелей 5x5, я подумал, что буду использовать двухмерный BitArray, который будет содержать координаты панели в сетке и будет истинным, если колышек существует, или ложным, если его нет.

Мой первый вопрос: как мне связать сетку с массивом? Другими словами: откуда мне знать, что [0] [0] массива будет представлять верхний левый угол сетки? У меня есть следующий конструктор для массива BitArray[,] board = new BitArray[5,5]; Я знаю, что сначала мне придется циклически проходить по массиву и присваивать всем значениям, кроме одного, значение true, но затем мне нужно будет взять эти данные в массиве и применить их к сетки. Понятие о том, как связать этот массив с сеткой, является частью, в которой я застрял.

Я ценю любую помощь.

enter image description here

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Есть, несомненно, лучшие идеи, чем эта, но, тем не менее, есть кое-что, с чего можно начать ...

Вместо создания массива битов создайте массив класса, который вы создаете, для представления точки, котораятакже будет содержать методы для установки / сброса точки.Тогда вы можете сделать что-то вроде MyGrid [x] [y] .Set ();.

Вы также можете изучить использование коллекций вместо массивов.Я редко использую массивы для чего-либо еще, кроме операций низкого уровня или устаревшего типа, которые требуют их.

0 голосов
/ 15 сентября 2014

Использование массивов 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] будет первой панелью в третьей строке и т. Д.

Наконец, DynArrNums [25] не означает, что у вас есть 25 заполненных полей. Это просто означает, что на вашей панели их 25 блоков, и код знает, что их нет, поэтому в конце запрашивает их.

Удачи.

...