プロが教えるわが家の防犯対策術!

int stage[4][7][2]; // 盤上のマスの格子点の座標
int pos[3][6][2]; // キャラ描画座標

void init_stage() // stage と pos を初期化する
{
for (int j = 0; j < 7; j++) {
int w = (j - 3) * 100, h = 300;
for (int i = 4; --i >= 0; ) {
stage[i][j][0] = w + 400, stage[i][j][1] = h - 100;
w = w * 9 / 10, h = h * 9 / 10;
}
}
for (int i = 0; i < 3; i++)
for (int j = 0; j < 6; j++) {
pos[i][j][0] = (stage[i][j][0] + stage[i + 1][j + 1][0]) / 2 - 25;
pos[i][j][1] = (stage[i][j][1] + stage[i + 1][j + 1][1]) / 2 - 65;
}
}


以上は台形型のステージのプログラムです。
そして、int stage[4][7][2];について疑問があります。
なぜxとyのみなのに[ ]が3つあるのでしょうか?
最初の2つの[ ]と[ ]がxとy座標と定義するためでしょうか?

仮に[ ]が二つの場合の同じような台形型のステージは作れるのでしょうか?

A 回答 (4件)

○他の方法



複数のセットになる値を扱う方法は、C言語の学習をしていれば、いくつも出てきます。
・別の変数を組になるように使う
・配列を使う
・構造体を使う

この座標のようなものだったら、構造体を使うのが素直でしょう。
他言語の「クラス」でも同じ考えでできます。



> カンマに関しては、そう書くように本に書いてあり深い意味はないです

どの本のどこにそう書いてありましたか?

おそらく、あなたの読み間違い、解釈間違いでしょう。
普通、こんなところでカンマは使いません。
for(x=0,y=0;... )
みたいに、forの直後の括弧の中、とかに使うことはありますが。
「forの括弧の中では」を「forの{ } 中では」と読み間違えてるとかはないですか?
    • good
    • 0

コメントや、「台形」というキーワードから予想すると


・画面は「囲碁のような格子状のマス目が引かれたものを、斜めに見下したもの」になっていている。
 正方形のマスを立体的にするため、一点透視法を使っている。
・このプログラムは、 格子点の番号やマスの番号から、画面上のXY座標を求めるもの。
stage[縦の線の番号][横の線の番号][0] = その交点の画面上のX座標
stage[縦の線の番号][横の線の番号][1] = その交点の画面上のY座標
を記憶して、使用中は計算をしないで配列から読み取る(テーブル引き と呼ばれる基本テクニック)



> なぜxとyのみなのに[ ]が3つあるのでしょうか?

多次元配列は、いろんなことを考えて適したものを利用します。
X,Y だから2次元、等とは単純にはいきません。

> 仮に[ ]が二つの場合の同じような台形型のステージは作れるのでしょうか?

このやり方が唯一の方法ではありません。
    • good
    • 1
この回答へのお礼

そんなテクニックがあるとは知りませんでした。
では、このテクニック以外に作る方法はないのでしょうか?

お礼日時:2019/09/25 18:34

>二面とかxとyの二面ですか?



int stageA[4][7]; // 盤上Aのマスの格子点の座標
int stageB[4][7]; // 盤上Bのマスの格子点の座標
の2面を
int stage[4][7][2]; // 盤上のマスの格子点の座標
としたのではないか、と推測したまでです。

本当に2面を管理したかったのかは、作者に聞くしかわかりませんね。
あくまでも私の推測ですよ

それより、
stage[i][j][0] = w + 400, stage[i][j][1] = h - 100;
が、何故でセミコロンではなくカンマなのかはなぞです。
気になりませんか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

カンマに関しては、そう書くように本に書いてあり深い意味はないです。
すいません。

お礼日時:2019/09/24 18:08

>なぜxとyのみなのに[ ]が3つあるのでしょうか?


stage[*][*][0] と stage[*][*][1] の2面を管理したかったからでは?

そんなことより、
正直、どのような意図が有るのか、私にはわかりませんが、

stage[i][j][0] = w + 400, stage[i][j][1] = h - 100;
w = w * 9 / 10, h = h * 9 / 10;

の部分、なぜ、

stage[i][j][0] = w + 400; stage[i][j][1] = h - 100;
w = w * 9 / 10; h = h * 9 / 10;

のように;でなくて、カンマ区切りなのかに頭を使ったほうが良い気がします
    • good
    • 0
この回答へのお礼

二面とかxとyの二面ですか?
ですが、xとyは最初の2つの[ ]に入っていますよね?

お礼日時:2019/09/24 12:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!