パズルゲームのアルゴリズム

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

パズルゲームのアルゴリズム

#1

投稿記事 by Butler » 13年前

現在パズルゲームを製作中で、以下の状態に躓いています。

パズルゲームの規則
1.数種類の色のブロックが10x10でボードの上に存在する
2.上下左右に列(行)ごとブロックを動かすことができる
3.任意のブロックをクリックする事でブロックを消去できる
4.ブロックを消去すると、その上にあるブロックが落ちてくる

1、2、4の実装は問題なくできました。

そして3のブロックの消去なのですが
このブロックの消去も一定の条件を設けようと思ってます。

条件
・同じ色のブロックが複数並んでいる
・その複数のブロックが四角になっていること
・四角からはぶかれた同じ色のブロックは消さずに残す

以上です。

補足として、複数のブロックは四角になっていれば消せるので、
2x2、2x3、3x3...等、色々な四角に対応させたいです。

この四角になっていることを調べるためのアルゴリズムに苦戦しています。

地道に同じ色を探すようなアルゴリズムでは工夫が見られないので
繰り返しを用いた、できるだけ短いコードにしたいと思ってます。

何か良い方法はないでしょうか?

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

Re: パズルゲームのアルゴリズム

#2

投稿記事 by h2so5 » 13年前

その条件では、このようなブロックの並びの場合にどのように四角形と判定されるのでしょうか
添付ファイル
block.png
block.png (2.07 KiB) 閲覧数: 2185 回

Butler

Re: パズルゲームのアルゴリズム

#3

投稿記事 by Butler » 13年前

説明不足で申し訳ないです><

ブロック消去の条件で
・最低4個(2x2)から
もお願いします

また、↓のような時

□□□
□■□
 □□
(全て同じ色、塗りつぶされているのがクリックするマス)

3x3は成立していないので
一番大きい、上2段の 3x2 を消去します。

アルゴリズム上、
おそらく上の3x2が先に判定されると思います。
そのため上の3x2のみで、右の2x3の四角は放置にしたいと思います。

代わりに、

□□□
□□□
 ■□

このように下のマスをクリックした場合は、
クリックした箇所を使用している右の 2x3 を消去します。


アルゴリズムが複雑になってしまう場合はシステムの変更も考えてます。

追加の条件を合わせた全ての条件さえ成立していれば
どのようなシステムでも問題ないかと思います



わかりにくいかもしれませんが、よろしくお願いします><

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

Re: パズルゲームのアルゴリズム

#4

投稿記事 by h2so5 » 13年前

Butler さんが書きました: アルゴリズム上、
おそらく上の3x2が先に判定されると思います。
そのため上の3x2のみで、右の2x3の四角は放置にしたいと思います。
ここがよく分かりません。
このような配置で右下をクリックした場合どうなるのでしょうか?
添付ファイル
block2.png
block2.png (1.3 KiB) 閲覧数: 2163 回

Butler

Re: パズルゲームのアルゴリズム

#5

投稿記事 by Butler » 13年前

自分で考えてみた限りでは、
クリックしたブロックを中心にして探索する方法を思いついたのですが・・・
    □□
    □□
   □□□
  □□□□
□□□□□□
□□□□□■

これだけ大きく、対象になった時の対処法はわからないです><
自分の思いついたものだと、一番大きな四角を選出できないようですしorz

この場合だと一番大きいのは3x5か5x3になるのですが
それを導き出すのにどうすべきかもわからない状態です・・・

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

Re: パズルゲームのアルゴリズム

#6

投稿記事 by h2so5 » 13年前

無駄は多いかもしれませんが、とりあえず思いついた方法を。
添付ファイル
block3.png
block3.png (22.04 KiB) 閲覧数: 2134 回

Butler

Re: パズルゲームのアルゴリズム

#7

投稿記事 by Butler » 13年前

列を除外・・・
除外なんて全く思いつきませんでした><
ありがとうございます!
参考にさせてもらいますね!

他の方法も募集するので未解決にしておきますー

閉鎖

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