ページ 11

落ち物ブロックパズルのパネルが落ちる処理

Posted: 2016年3月01日(火) 20:54
by 山田
勉強がてら落ち物パズルゲームを作っております。

移動する動きなどは特に考えず、真下にブロックが
落ちる動きをしたいのですが、稀に上手く動かないことがあるみたいです。

パネルは自分の下が0なら落ちるようにしたいです。(縦方向のみ)

以下のようなソースで試してみて、
ランダムな場所を消して試してるのですが、
まれにおかしい値が入っております。

原因が分かる方おりませんでしょうか。

コード:


#define TBL_WIDTH 5
#define TBL_HEIGHT 5

int Tbl[TBL_HEIGHT][TBL_WIDTH] = {
	{ 1,2,2,3,4 },
	{ 1,5,2,3,4 },
	{ 1,2,5,3,4 },
	{ 1,3,2,3,4 },
	{ 1,2,2,3,4 },
}

// 落ちる処理
for( int y=TBL_HEIGHT-2; y>=0; y-- ){
	for( int x=0; x<TBL_WIDTH; x++ ){
		if( this->Tbl[y+1][x].Pram == 0 ){
			int temp = this->Tbl[y][x].Pram;
			this->Tbl[y+1][x].Pram = temp;
			this->Tbl[y][x].Pram = 0;
		}
	}
}

Re: 落ち物ブロックパズルのパネルが落ちる処理

Posted: 2016年3月02日(水) 10:15
by amehirune
いろいろと突っ込みどころがあるプログラムですが、これで全文ではないと信じて解答します。
(間違っているかもしれませんが)このプログラムだと、パネルは1つ下にしか落ちません。

|1|    | |
| | →  |1|
|_|    |_|
…というように、まだ下に空きがあるにもかかわらずそれ以上落ちない、という現象が発生しているような気が。
(実際にテストはしていません)

解決するには、簡単なのは再帰構造を用いることです。C++でも再帰は使いますよね…?
オフトピック
その「稀に」というのがどのような不具合なのかが明記されていないと、回答を得られない場合があります。
言葉で説明しにくい症例であれば、実際に実行結果をコピペするのもよいかもしれません。