Программирование на Nintendo DS - проблема со столкновениями
Извините, если этот вопрос уже задавался, но мне не удалось найти какой-либо совет в Интернете по моей проблеме. В настоящее время я пытаюсь запрограммировать небольшую игру на Nintendo DS, в которой игрок должен перемещать спрайт (в настоящее время квадрат), пока он не достигнет выхода. Для этого я использую спрайт, который я включил, используя grit-файл, а также фон, включенный в мозаичном режиме. Тем не менее, у меня возникла проблема, когда дело доходит до проверки, столкнется ли спрайт со стеной. Вот код, который у меня есть и для фоновой конфигурации (где я объявляю плитки и карту), а также для движений спрайтов (я еще не добавил условие для всех случаев, так как оно не работало хорошо):
void configureMaze_Sub() {
int row, col;
for (row = 0; row < 24; row ++) {
for (col = 0; col < 32; col ++) {
BG_MAP_RAM_SUB(3)[row * 32 + col] = 1;
if (col == 15 && (row != 12 && row !=4 && row != 19)) {
BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
}
if ((row == 1 || row == 22) && (col > 2 && col < 29)) {
BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
}
if ((col == 3 || col == 28) && (row > 1 && row < 22 && row != 12)) {
BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
}
if ((row == 3 || row == 20) && (col > 4 && col < 27)) {
BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
}
if ((col == 5 || col == 26) && (row != 9 && row != 15 && row > 3 && row < 20)) {
BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
}
if (row == 8 && (col > 5 && col < 15)) {
BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
}
if (row == 16 && (col > 15 && col < 26)) {
BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
}
if ((row == 12) && (col > 5 && col < 26)) {
BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
}
}
}
}
void gameplayMaze() {
int x = 103, y = 41, keys;
int maze_success = 0;
while (maze_success == 0) {
scanKeys();
keys = keysHeld();
int xmod = x / 8;
int ymod = x / 8;
if ((keys & KEY_RIGHT) && BG_MAP_RAM_SUB(3)[xmod + 32 * ymod] == 1) {
x++;
printf("%d \n", x);
}
if ((keys & KEY_LEFT) && BG_MAP_RAM_SUB(3)[xmod + 32 * ymod] == 1) {
x--;
}
if (keys & KEY_UP) {
y--;
}
if (keys & KEY_DOWN) {
y++;
}
oamSet(&oamSub,
0,
x, y,
0,
0,
SpriteSize_8x8,
SpriteColorFormat_256Color,
gfxSub,
-1,
false,
false,
false, false,
false
);
swiWaitForVBlank();
oamUpdate(&oamSub);
}
Основная проблема, которую я имею, состоит в том, чтобы попытаться изменить координаты плиток (которые имеют размер 8x8) на координаты карты, как и для координат спрайта (256x192). Если у кого-нибудь из вас есть подсказка, чтобы помочь мне, я был бы очень благодарен! Я все еще новичок в программировании на NDS, поэтому я все еще пытаюсь освоить его.