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

Я начинаю знакомство с классом 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
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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