2017-01-27 6 views
0

私はC++を学ぼうとしているので、コードが乱雑で非効率的であれば、お詫びします。ベクトルに間違った値が割り当てられているのはなぜですか?

私はベクトルを学ぼうとしていましたが、私はマップに "map"を格納しようとしています。 これまでのところ、私はベクトルを生成することができますが、私はそれに値を代入することに問題があります。

vector<vector<vector<int>>> map; 

そして、私の「mapSize」とタイル:ベクトルは「マップ」としてメインで定義されていると

void generateMap(mapSize size, vector<vector<vector<int>>>& map) { 
int xSize, ySize; 
//Resize Vector Based on Map Size Choice 
if (size == tiny) { xSize = 10; ySize = 10; } 
if (size == medium) { xSize = 30; ySize = 30; } 
if (size == large) { xSize = 50; ySize = 50; } 
map.resize(xSize, vector<vector<int>>(ySize, vector<int>(2))); 
//Generate Map 
for (int x = 0; x < xSize; x++) { 
    for (int y = 0; y < ySize; y++) { 
     if (x == 0 || x == xSize) map[x][y][0] = wallTile; 
     else if (y == 0 || y == ySize) map[x][y][0] = wallTile; 
     else map[x][y][0] = tileType::floorTile; 
    } 
} } 

:これは私が私の「マップ」のベクトルに値を代入するように設定されている機能ですなどのように定義列挙型:

enum tileType { emptyTile, floorTile, wallTile }; 
enum mapSize { tiny, medium, large }; //10x10, 30x30, 50x50 tiles, respectively 

(私の頭では、ベクターは、「セル」に、xとy座標を保持し、各「セル」(彼らは実際に呼び出さているのかわからないが)2つのエントリ、tileTypeを持っています、モンスター/トラップ/何かの存在今

for (int y = 0; y < ySize; y++) { 
    for (int x = 0; x < xSize; x++) { 
     cout << map[x][y][0]; 
    } 
    cout << endl; 
} 

、ボックスは、外部4「壁」であった私が産生されることが期待されたwallTiles成るさ:SE) 私は主などの「マップ」を表示しようとし、テストします(またはこの場合は2秒)、insideはfloorTiles(1s)で埋められます。 実際に表示されたものは、上部と左の壁が2で構成され、残りは1秒です。 if文がそれを処理しているはずなので、何がうまくいかないのか分かりません。私は値の変化を見てデバッグモードも行ってきましたが、私はそれが間違った "タイル"を1に設定している場所をまだ特定できません。また、私はベクトルに間違った値を割り当てるつもりであるかもしれません。私はちょうどC++のリファレンスからの研究をやっています。

この時点で、私は別の(より経験豊かな)目のセットが必要です。 ありがとう!

(それは場合に役立ちます。これは、完全なコードです:http://pastebin.com/i2mwEm0M

+1

問題をさらに絞り込む必要があります。 –

+0

コードを読みやすくするために、しばらくの間改行をいくつか使用しても問題ありません。 –

+0

'vector'の' vector'の名前として 'map'を使うのは良い考えではありませんこれは 'std :: map'コンテナと混同される可能性があるからです。 – Rama

答えて

0

あなたforループは次のように書かれている:あなたはあなたが書く壁だかを決めるときしかし

for (int x = 0; x < xSize; x++) 

if (x == 0 || x == xSize) map[x][y][0] = wallTile; 

xは決してxSizeではなく、最大でxSize - 1になります。

+0

Wow。うん、そうだった。私は以前にそれを試してみたと思っていましたが、その変更を無関係にしたもう一つの問題があったことを認識しています。チェック、チェック、再チェックすると思います。ありがとう、また、すばやい返信に感謝します! – Jtpetch

関連する問題