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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
山田

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

#1

投稿記事 by 山田 » 8年前

勉強がてら落ち物パズルゲームを作っております。

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

パネルは自分の下が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;
		}
	}
}

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

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

#2

投稿記事 by amehirune » 8年前

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

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

解決するには、簡単なのは再帰構造を用いることです。C++でも再帰は使いますよね…?
オフトピック
その「稀に」というのがどのような不具合なのかが明記されていないと、回答を得られない場合があります。
言葉で説明しにくい症例であれば、実際に実行結果をコピペするのもよいかもしれません。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

閉鎖

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