Учебная цель C требует, чтобы вы хорошо понимали C ... Код, который вы разместили, показывает, что вы тоже новичок в C :) sooooooooo ... Я отвечу на вопрос "C" для вас.
int aTarget[3][2] = {{-1,0}, {-1,-1}, {-1,-1}};
- инициализация объявления. Это может быть сделано, потому что программа «сохраняет» эти данные во время компиляции, а затем загружает их в память как есть и указывает aTarget (который на самом деле является указателем) на его начало.
Теперь предположим, что вы хотите поместить {{0, -1}, {-1, -1}, {1, -1}} в aTarget во время выполнения (как в вашем выражении switch на север)
Вы можете сделать это одним из двух способов:
1) Установить значения элемент за элементом. Например,
aTarget[0][0] = -1;
aTarget[0][1] = 0;
aTarget[1][0] = -1;
aTarget[1][1] = -1;
aTarget[2][0] = -1;
aTarget[2][1] = -1;
громоздко, но это, по сути, то, что вы собираетесь делать, либо расширяться, как это, либо с помощью некоторого умного цикла.
2) Другой способ, если карта статична (как ваша), объявлять некоторые константы и использовать их
int aTarget[3][2];
const int dueNorth[3][2] = {{0,-1}, {-1,-1}, {1,-1}};
const int dueSouth[3][2] = {{0, 1}, {-1,-1}, {1,-1}};
const int dueEast[3][2] = {{1,0}, {1,-1}, {1,1}};
const int dueWest[3][2] = {{1,0}, {1,-1}, {1,1}};
и затем в вашем переключателе что-то вроде:
switch (dir) {
case north:
memcpy(aTarget, dueNorth, sizeof(aTarget));
break;
case east:
memcpy(aTarget, dueEast, sizeof(aTarget));
break;
case south:
memcpy(aTarget, dueSouth, sizeof(aTarget));
break;
case west:
memcpy(aTarget, dueWest, sizeof(aTarget));
break;
default:
break;
}
Имейте в виду, что это уродливое программирование. Существуют FAR более эффективные способы организации ваших данных эффективно, компактно и в то же время более естественным образом для программирования.
Например, вы можете закодировать все это в один большой массив и инициализировать его:
enum {СЕВЕР, ВОСТОК, ЮГ, ЗАПАД};
int target [4] [3] [2] = {
{{0, -1}, {-1, -1}, {1, -1}},
{{1, 0}, {1, -1}, {1, 1}},
{{0, 1}, {-1, -1}, {1, -1}},
{{-1, 0}, {-1, 1}, {-1, -1}}
}; * * Тысяча двадцать-семь
Но это нелегко поддерживать ... хотя вы можете получить свои координаты с помощью Target [dir] [x] [y]
Вы должны действительно разбить эти данные на структуры, но это еще один урок сам по себе. :)