2次元配列の要素へのアクセスの順序

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic
記事: 658
登録日時: 15年前
住所: 宮崎県
連絡を取る:

2次元配列の要素へのアクセスの順序

#1

投稿記事 by dic » 14年前

今度はRPGツクールみたいな、背景をつくろうと思ってますが
2次元配列へのアクセスの順序が思ったとおりにいかず、私の理解が間違っていると思うので
どこらへんが間違っているか確認したく、書き込みさせてもらいます

下のCStage::Init( int stage ) で配列を初期化して
CStage::Draw() でそれを描画するのです

コード:

int		CStage::Draw()
{
	int	x, y;
	for( y=0; y<def_height; y++ )
	{
		for( x=0; x<def_widht; x++ )
		{
			DrawBox( x*32, y*32, (x+1)*32, (y+1)*32, gColor[m_iArray[x][y]], TRUE );
			DrawFormatString( x*32, y*32, GetColor(128,128,0), "%d", m_iArray[x][y] );
		}
	}

	return index_stage;
}
void	CStage::Init( int stage )
{
	int	x, y;
	{
		int	stok[def_height][def_widht] = {
			{ 0, 0, 0, 0, 0 },
			{ 1, 1, 1, 1, 1 },
			{ 1, 1, 1, 1, 1 },
			{ 1, 1, 1, 1, 1 },
			{ 1, 1, 1, 1, 1 },
		};
		for( x=0; x<def_height; x++ )
		{
			for( y=0; y<def_widht; y++ )
			{
				m_iArray[x][y] = stok[x][y];
			}
		}
	}
}
予想しているのは、
0,0,0,0,0
1,1,1,1,1
1,1,1,1,1
1,1,1,1,1
1,1,1,1,1
となると思っているのですが
実行すると
0,1,1,1,1
0,1,1,1,1
0,1,1,1,1
0,1,1,1,1
0,1,1,1,1
と90°違って描画されます
これは予想したとおりに描画するにはどこを変更すればいいのでしょうか?
添付ファイル
無題.JPG
無題.JPG (5.44 KiB) 閲覧数: 1947 回

non
記事: 1097
登録日時: 15年前

Re: 2次元配列の要素へのアクセスの順序

#2

投稿記事 by non » 14年前

4行目 for( y=0; y<def_height; y++ )
に対し、
26行目 for( x=0; x<def_height; x++ )
と、xを横に使うのか縦に使うのかが ごちゃまぜだから間違います。
xは横、縦はyに統一しましょう。

結論から言えば
8行目と9行のDrawBox( x*32, y*32, (x+1)*32, (y+1)*32, gColor[m_iArray[x][y]], TRUE );
m_iArray[x][y]のx,yが逆です。
non

dic
記事: 658
登録日時: 15年前
住所: 宮崎県
連絡を取る:

Re: 2次元配列の要素へのアクセスの順序

#3

投稿記事 by dic » 14年前

>>nonさん
描画するところのx、yが逆なのですね
ゆっくり考えます
ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る