Переназначение позиции в массиве - PullRequest
0 голосов
/ 21 января 2020

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

В настоящее время, как написано, программа заставляет игроков двигаться, но я не думаю, что это фактически передается в функцию updateMove. Я попытался использовать функцию cout << playerMove, но она ничего не показывает. Я делаю что-то, чтобы движение не передавалось в функцию updateMove? Я предполагаю, что именно поэтому движение не обновляется. </p>

Я добавил свой основной и рассматриваемую функцию:

int main()
{
    // initialize random #
    srand(static_cast<int>(time(NULL)));

    do  // play again loop
    {
        // define variables
        bool win, lose;
        char playerMove;
        char dungeon[MAX_ROW][MAX_COL];
        int cash;

        displayInstructions(); // display instructions
        initializeDungeon(dungeon); // initialize dungeon

        do
        {
            setTraps(dungeon); // set traps
            displayDungeon(dungeon); // display dungeon
            playerMove = getMove(playerMove);

            // check for valid move
            // reassign player to new position
            updateMove(playerMove, dungeon);


            //update map now that move is legit
            if (!win && !lose)
            {
                updateDungeon();
            }

        } while (!win && !lose);

    } while (repeat());
}

void updateMove(char & playerMove, char dungeon[MAX_ROW][MAX_COL])
{
    int px, py;

    int dx = 0, dy = 0;
    if(playerMove == UP && px != 0)
    {
        dx--;
    }
    else if (playerMove == DOWN && px != 7)
    {
        dx++;
    }
    else if (playerMove == LEFT && py != 0)
    {
        dy--;
    }
    else if (playerMove == RIGHT && py != 8)
    {
        dy++;
    }

    if(dx != 0 || dy != 0)
    {
    dungeon[px][py] = SPACE; // I updated this to be an 'empty' space based on my variables
    px += dx;
    py += dy;
    dungeon[px][py] = PLAY;
    }
} ````

1 Ответ

1 голос
/ 21 января 2020

Необходимость перебора всей карты, чтобы найти игрока, довольно расточительна и медленна. Это также усложняет кодирование, как вы видите здесь.

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

Как то так:

int px, py;

void updateMove(char playerMove, char dungeon[MAX_ROW][MAX_COL])
{
    int dx = 0, dy = 0;
    if(playerMove == 'u' && px != 0)
    {
        dx--;
    }
    else if (playerMove == 'd' && px != 8)
    {
        dx++;
    }
    else if (playerMove == 'l' && py != 0)
    {
        dy--;
    }
    else if (playerMove == 'r' && py != 9)
    {
        dy++;
    }

    if(dx != 0 || dy != 0) {
        dungeon[px][py] = EMPTY;
        px += dx;
        py += dy;
        dungeon[px][py] = PLAY;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...