カラータイルというゲームを自動的に求解しようというプログラムです。 もちろん全消しを狙っています。
23x15の盤面に200個のタイルが並べられます。タイルには10色の色が割り当てられています。これらのタイルを2分間に次のルールに従って消していき、消した個数が点数となります。
- 空マスをクリックする。タイルの存在するマスをクリックしても何も起こらない。
- クリックしたマス目の上下左右のタイルで最も近いタイル(空マスのみを挟んで隣接する)のうちで、同じ色のタイルが2つ以上存在すればそれらを消去し、マスを空マスにする。
- もし空マスをクリックした時に消えるタイルがなければペナルティとして時間が消費される。
タイルの色のカラーコードです。明るい方はやや怪しいです。
Color | Dark | Light |
---|---|---|
Background | #EDEDED | #F7F7F7 |
Gray | #BBBBBB | #D6D6D6 |
Blue | #0066FF | #5C9DFF |
Cyan | #66CCCC | #9DDFDF |
Green | #00CC00 | #63E063 |
Yellow | #CCCC66 | #DFDFA0 |
Brown | #CC6600 | #E0A366 |
Orange | #FF9900 | #FFC260 |
Red | #FF6666 | #FFA3A3 |
Pink | #FF88FF | #FFB4FF |
Magenta | #CC66CC | #E0A3E0 |
暫定的に色の判別方法を決定する。色のRGB値をそれぞれR,G,Bで表現する。
- R=G=B なら
#E0E0E0
以下か以上かでgrayかemptyかを判定する。 - R<G<B ならblue
- R<G=B ならcyan
- B=R<G ならgreen
- B<R=G ならyellow
- R>G>B ならRが
0xff
のときはorangeで、それ以外はbrownと判定。 あるいは、Gが0xbb
以上ならorangeで、それ以外はbrownとか。 - R>G=B ならred
- G<B=R ならRが
0xff
のときはpinkで、それ以外はmagentaと判定。
####探索手法 探索手法としては次の2つが考えられる。
-
深さ優先探索でガンガン進める。ただ、合法手の選択時になるべく前から選ぶのが速いんだろうか、という疑問がある。もちろん効率的なのかも疑問。
-
A*探索する。最小コスト関数は残りのタイル数/2とかでいい。ただ、結構先まで幅優先的に進んでいく気がして重そう。詰みを検出できないと意味がないのでダメかもしれない。
もちろんすべてのタイルがなくなれば勝ちとなる。負けになる条件は合法手が取れなくなることにほかならないのだが、早く見切りをつけるためにいくつか用意する。
- 合法手がない
- ある色のタイルが1つしかない
- ある色のタイルが3つしかなく、どの二つも直線上にない