Перемещение символа в двумерном массиве

Я начинаю знакомство с классом C++, и я очень застрял в этом проекте.

Мне нужно, чтобы мой персонаж «H» свободно перемещался по массиву. Я написал много своего кода, но когда я его компилирую и запускаю, моему герою не предоставляется возможность двигаться. Я не знаю, что происходит не так, когда я вызываю свою функцию в main. Любая помощь будет с удовольствием оценена. Мне нужно, чтобы его новое положение в массиве сохранялось, чтобы он мог найти злодея, который случайным образом помещается в массив. Я могу поработать над частью randint позже, но мне трудно просто заставить `` H '' двигаться. Вот что у меня есть на данный момент:
Спасибо.

#include <iostream>
using namespace std;

void printBoard(char board[][8])
{
    for (int x = 0; x < 8; x++)
    {
        for (int y = 0; y < 8; y++)
        {
            cout << board[x][y];
        }
        cout << endl;
    }
}

void move(char board[][8], char umove)
{
    cout << "Please enter which direction you would like to move." << endl;
    cin >> umove;

    if (umove == 'x')
    {
        for (int x = 0; x < 8; x++)
        {
            for (int y = 0; y < 8; y++)
            {
                board[x][y] = x - 1;
            }
        }
    }
    else if (umove == 'd')
    {
        for (int x = 0; x < 8; x++)
        {
            for (int y = 0; y < 8; y++)
            {
                board[x][y] = y + 1;
            }
        }
    }
    else if (umove == 'a')
    {
        for (int x = 0; x < 8; x++)
        {
            for (int y = 0; y < 8; y++)
            {
                board[x][y] = y - 1;
            }
        }
    }

    else if (umove == 'w')
    {
        for (int x = 0; x < 8; x++)
        {
            for (int y = 0; y < 8; y++)
            {
                board[x][y] = x + 1;
            }
        }
    }

}

char userinput()
{
    char usermove;
    cout << "Please enter the direction you want to go." << endl;

    cin >> usermove;

    return usermove;
}

int main()
{
    char board[8][8];
    int x;
    int y;
    while (true)
    {
        for (x = 0; x < 8; x++)
        {
            for (y = 0; y < 8; y++)
            {
                board[x][y] = 'e';
            }
        }

        board[0][0] = 'H';

        printBoard(board);
        void move();

        return 0;
    }
}

void move (); - это объявление метода в вашем коде, который ничего не делает. return 0 завершает программу, а цикл while выполняется только один раз. у вас есть плата char, но вы назначаете ей целое число в методе move. Я не могу этого понять. Можно ли отредактировать и добавить детали? Что ты хочешь делать?

Amin 26.10.2018 06:31

Когда я запускаю программу, я хотел бы, чтобы H перемещался по доске, когда я нажимаю w, a, x или d в соответствующих направлениях.

tiovan 26.10.2018 06:38
1
2
296
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы вызываете void move(), который является объявлением метода, и вместо этого вы должны использовать move(...) для вызова метода. return 0 приводит к завершению работы приложения, что в данной ситуации неверно. вы используете бесконечный цикл, и вы должны использовать условие для завершения игры. в зависимости от вашего описания я предлагаю:

void printBoard(char board[][8]) {
    // same as before
}

bool move(char board[][8], int &Hx, int &Hy) {
    char umove;
    cout << "Please enter which direction you would like to move." << endl;
    cin >> umove;
    if (umove == 'f') // f mean finish it
        return false;

    board[Hx][Hy] = 'e';
    if (umove == 'a') // a mean left
        Hy = Hy == 0 ? 7 : Hy - 1;
    else if (umove == 'd') // d mean right
        Hy = Hy == 7 ? 0 : Hy + 1;
    else if (umove == 'w') // w mean up
        Hx = Hx == 0 ? 7 : Hx - 1;
    else if (umove == 's')  // s mean down
        Hx = Hx == 7 ? 0 : Hx + 1;
    board[Hx][Hy] = 'H';
    return true;
}

int main() {
    char board[8][8];
    int Hx = 0, Hy = 0;
    for (int x = 0; x < 8; x++) {
        for (int y = 0; y < 8; y++) {
            board[x][y] = 'e';
        }
    }
    board[Hx][Hy] = 'H';
    bool res = true;
    while (res) {
        printBoard(board);
        res = move(board, Hx, Hy);
    }
    cout << "Game finished!";
    return 0;
}

Вы можете сделать char board[][], Hx и Hy (которые содержат текущую позицию H) глобальными и не отправлять их в метод, но это совсем не хорошо. Надеюсь, это то, что вам нужно.

Да, это помогло. Я пытался заставить H перемещаться по доске, используя другую функцию void, но использование bool кажется лучшим методом для этого.

tiovan 26.10.2018 06:55

Добро пожаловать. если вы можете принять или проголосовать, чтобы другие знали, что это правда.

Amin 26.10.2018 06:57

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