1

この 2d ベクトルは、掃海艇のゲーム ボードを保持するために使用されています。ゲームボードを構築するために必要な情報をすべて保持するいくつかの「状態」変数を持つ構造体セルの 2d ベクトルを作成したい (コマンドラインで実行する基本的なマインスイーパゲームを作成していますが、非常に初歩的なものです。クラスのより良い把握)。まず、ベクトルを 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 変数だけを読み書きするにはどうすればよいでしょうか? 完全に実行するように求めているわけではありませんが、その特定の部分にアクセスする方法を示す基本的なコード行は非常に役立ちます。私はこれを間違って概念化していますか?

4

1 に答える 1

0

それがあなたを助けることを願っています:

#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;
}
于 2016-05-13T07:17:18.403 に答える