Программирование на 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, поэтому я все еще пытаюсь освоить его.

0 ответов

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