落ち物パズル的な落下

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

落ち物パズル的な落下

#1

投稿記事 by shute » 14年前

テトリスとかのような落ち物系のパズルゲームを作っているのですが
落下させる部分でちょっと詰まってしまったのでアドバイスをもらいたいです。

テトリスのように塊で落下させるのですが、テトリスのように大きさが最大で4つ分ならば
必ず塊に上下が存在しているので(1)のように塊の真下が存在しなければ落下を繰り返せばいいのですが
(2)のように大きさが5つ以上になると挟まれてしまった時に詰まってしまいます。
この場合はどういう考え方でつくればいいのでしょうか。

(1)
112   110   000
122 → 102 → 112
120   122   122
000   020   120
2重のfor文を塊が動く間繰り返す

(2)
112
122
112
000 落下しない

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 落ち物パズル的な落下

#2

投稿記事 by h2so5 » 14年前

作ろうとしているゲームは、テトリスと同一のルールですか?
あと、数字の0,1,2はそれぞれ何を表しているのかよく分からないのですが。

アバター
バグ
記事: 130
登録日時: 14年前
住所: 愛媛県
連絡を取る:

Re: 落ち物パズル的な落下

#3

投稿記事 by バグ » 14年前

全てのブロックの1つ下が空白だったら・・・でいいかと思いますよ(^-^)
逆に言えば、どこか1つでも空白でなければ落ちない訳です。

shute

Re: 落ち物パズル的な落下

#4

投稿記事 by shute » 14年前

テトリスとは違うものなのですが説明するために名前を出しました。紛らわしくて申し訳ないです。
数字は0がなにもない部分で1および2がテトリスでいうテトリミノにあたるもので崩さずに落下させたいです。
落下させる塊を操作できるわけではないのですが 落下前の状態のテトリミノが複数あるような感じです。
投稿前は書こうと思っていたのですが忘れていました。

基本的には

011   000
010 → 011
000   010

のようにそのままの配置で落下します。ただし崩れないので

011
012
002

のような場合は引っかかり1の塊は落下しません。
ここまではいいのですが最初の投稿の(2)のように挟まるような形になると本来は

112   000
122 → 112
112   122
000   112

のようにしたいのですが
今は一つ一つの塊毎に塊の下が空白ならば下にずらす というようにプログラムを組んでいるので最初の状態では
1の塊は2行目2列目の2の塊の出っ張った部分に邪魔されて落下せず
2の塊は3行目2列目の1の塊の出っ張った部分に邪魔されて落下しないのです
これを落下できるようにするにはどのような考え方をすればいいのでしょうか

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 落ち物パズル的な落下

#5

投稿記事 by h2so5 » 14年前

最初から、
111
111
111
000

こう落とせば良いのでは?

TRSGR

Re: 落ち物パズル的な落下

#6

投稿記事 by TRSGR » 14年前

処理の順番でしょうなあ

1) 1の塊のコリジョン検出
2) 1を落下させる
3) 2の塊のコリジョン検出
4) 2を落下させる

これだとうまいこといきません。
まず最初に1と2のコリジョンを先に検出し、落下処理は後で。
それでも落ちないというなら別の方法を考えんといけませんが。

たいちう
記事: 418
登録日時: 14年前

Re: 落ち物パズル的な落下

#7

投稿記事 by たいちう » 14年前

2の塊は最初は浮いているのかな?
1の重さで一緒に落ちるようなイメージ?

という前提だとして、こんな方法は?

1) 1の塊のコリジョン検出
2) 何もなければ1を落下させる
3) 1の下に2を発見
4) (1+2)の塊のコリジョン検出
5) 何もなければ(1+2)を落下させる
6) (1+2)の下に地面を発見
7) 処理終了

shute

#8

投稿記事 by shute » 14年前

なるほど、言われて組む方向性がわかってきました。
他の塊のコリジョンと合わせていけばいいみたいですね。
出来そうな気がするのでやってみます。
みなさん、ありがとうございました。またなにかあったらよろしくお願いします。

閉鎖

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