Некоторые вопросы, касающиеся 2d Vectors, C++

Этот 2-й вектор используется для удержания игрового поля для тральщика. Я хочу создать двумерный вектор struct cell, в котором есть несколько переменных "state", содержащих всю информацию, необходимую для создания игрового поля (я создаю базовую игру тральщика для запуска в командной строке, очень элементарную, просто хочу получить лучшее понимание классов). Прежде всего, что я делаю неправильно, когда пытаюсь передать вектор в функцию void? И как мне получить доступ к отдельным переменным для чтения и записи в них? Я знаю, что это может быть необычно (можно решить с помощью массивов), но я бы хотел сделать это немного по-другому. Я просматривал различные форумы, но люди, похоже, не используют этот подход. Спасибо, парни.

РЕДАКТИРОВАТЬ: я пытаюсь сделать с помощью вектора ячеек в основном 3 вектора в 1, так что я могу одновременно использовать информацию в разных состояниях, чтобы проверить, были ли выполнены различные условия, когда игрок делает ход (то есть проверить, там есть мина, или было ли это место уже открыто / отмечено / немаркировано и т. д.) Пожалуйста, дайте мне знать, если приведенный ниже код не позволяет выполнить то, что я хочу достичь.

код:

#include <iostream>
#include <vector>

using namespace std;
void gameboard(vector<vector<int>> &stateboard)

struct cell
{
    int state;      //( 0 hidden, 1 revealed, 2 marked)
    int value;      //(-1 mine, 0 no surrounding, # > 0
    bool isMine;
};

void gameboard(vector<vector<int>> &stateboard)
{

}

int main()
{
    int columns = 10;
    int rows = 10;

    vector <vector<cell> > gameboard(rows, vector<cell>(columns));
    gameboard(&gameboard);


    return 0;

}

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

новый код:

#include <iostream>
#include <vector>

using namespace std;

struct cell
{
    int state;      //( 0 hidden, 1 revealed, 2 marked)
    int value;      //(-1 mine, 0 no surrounding, # > 0
    bool isMine;
};

void game_state(vector<vector<cell>> &stateboard)
{

}

int main()
{
    int columns = 10;
    int rows = 10;

    vector <vector<cell> > gameboard(rows, vector<cell>(columns));
    game_state(gameboard);


    return 0;

}

Я думаю, что одно и то же имя для функции и вектора отбрасывало Xcode, поэтому я изначально сделал ссылку на игровое поле, но теперь я понимаю, почему это глупо. Теперь, когда это работает, как я могу специально читать и писать только в переменную bool isMine? Я не прошу вас сделать это полностью, но основная строка кода, показывающая мне, как получить доступ к этой конкретной части, очень бы мне помогла. Я неправильно это понимаю?

1 ответ

Решение

Надеюсь, это поможет вам:

#include <iostream>
#include <vector>

// your columns and rows are equal,
//and they should no change, so i think better to do them const
const int BOARD_SIZE = 10;

struct cell {

    int state;
    int value;
    bool isMine;
};

void game_state(std::vector < std::vector <cell > > &stateboard) {


}

int main (){


    std::vector < std::vector <cell > > gameboard;

    //I give more preference to initialize matrix like this
    gameboard.resize(BOARD_SIZE);
    for (int x = 0; x < BOARD_SIZE; x++) {
        gameboard[x].resize(BOARD_SIZE);
        for (int y = 0; y < BOARD_SIZE; y++) {

            // and this is an example how to use bool is mine
            // here all cells of 10x10 matrix is false
            // if you want place mine in a first cell just change it
            // to gameboard[0][0].isMine = true;

            gameboard[x][y].isMine = false;
        }
    }

    game_state(gameboard);

    return 0;
}
Другие вопросы по тегам