テトリスとかのような落ち物系のパズルゲームを作っているのですが
落下させる部分でちょっと詰まってしまったのでアドバイスをもらいたいです。
テトリスのように塊で落下させるのですが、テトリスのように大きさが最大で4つ分ならば
必ず塊に上下が存在しているので(1)のように塊の真下が存在しなければ落下を繰り返せばいいのですが
(2)のように大きさが5つ以上になると挟まれてしまった時に詰まってしまいます。
この場合はどういう考え方でつくればいいのでしょうか。
(1)
112 110 000
122 → 102 → 112
120 122 122
000 020 120
2重のfor文を塊が動く間繰り返す
(2)
112
122
112
000 落下しない
落ち物パズル的な落下
Re: 落ち物パズル的な落下
作ろうとしているゲームは、テトリスと同一のルールですか?
あと、数字の0,1,2はそれぞれ何を表しているのかよく分からないのですが。
あと、数字の0,1,2はそれぞれ何を表しているのかよく分からないのですが。
Re: 落ち物パズル的な落下
全てのブロックの1つ下が空白だったら・・・でいいかと思いますよ(^-^)
逆に言えば、どこか1つでも空白でなければ落ちない訳です。
逆に言えば、どこか1つでも空白でなければ落ちない訳です。
Re: 落ち物パズル的な落下
テトリスとは違うものなのですが説明するために名前を出しました。紛らわしくて申し訳ないです。
数字は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の塊の出っ張った部分に邪魔されて落下しないのです
これを落下できるようにするにはどのような考え方をすればいいのでしょうか
数字は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の塊の出っ張った部分に邪魔されて落下しないのです
これを落下できるようにするにはどのような考え方をすればいいのでしょうか
Re: 落ち物パズル的な落下
最初から、
111
111
111
000
こう落とせば良いのでは?
111
111
111
000
こう落とせば良いのでは?
Re: 落ち物パズル的な落下
処理の順番でしょうなあ
1) 1の塊のコリジョン検出
2) 1を落下させる
3) 2の塊のコリジョン検出
4) 2を落下させる
これだとうまいこといきません。
まず最初に1と2のコリジョンを先に検出し、落下処理は後で。
それでも落ちないというなら別の方法を考えんといけませんが。
1) 1の塊のコリジョン検出
2) 1を落下させる
3) 2の塊のコリジョン検出
4) 2を落下させる
これだとうまいこといきません。
まず最初に1と2のコリジョンを先に検出し、落下処理は後で。
それでも落ちないというなら別の方法を考えんといけませんが。
Re: 落ち物パズル的な落下
2の塊は最初は浮いているのかな?
1の重さで一緒に落ちるようなイメージ?
という前提だとして、こんな方法は?
1) 1の塊のコリジョン検出
2) 何もなければ1を落下させる
3) 1の下に2を発見
4) (1+2)の塊のコリジョン検出
5) 何もなければ(1+2)を落下させる
6) (1+2)の下に地面を発見
7) 処理終了
1の重さで一緒に落ちるようなイメージ?
という前提だとして、こんな方法は?
1) 1の塊のコリジョン検出
2) 何もなければ1を落下させる
3) 1の下に2を発見
4) (1+2)の塊のコリジョン検出
5) 何もなければ(1+2)を落下させる
6) (1+2)の下に地面を発見
7) 処理終了