Comments私は基本的にゲームはしないのですが、最近子供にせがまれて自分のケータイに入っているパズルゲームをしています。子供はまだ小さいのでパズルを解くことはできないのですが、キャラクターの絵と音楽を楽しんでいるようです。私はもっぱらパズルを解いています。考えてもうまくすすまないので、プログラムを書いて解いてみました。(ついでに、ゲーム本体もまねっこしてみました。)ゲームのルール5×5のパネルがあります。パネルには裏表があるのですが、すべてのパネルを表にするとクリアです。単純に選んだパネルだけが表(裏)になるわけではなくて、ユーザが選んだパネルの他に、その上下左右のパネルも裏表がひっくり返ります。解法パネルの状態が裏と表の2値なので、ビットで表現できます。同じ場所で何度反転させても結果はON/OFFのいずれかにしかならないので、5×5すべての場所でパネルを反転させる組み合わせを全部試せば、正解が見つかりそうです。プログラムプログラムはJavaで書きました。子供とゲームをやるのは大抵寝る前なので、パソコンを起動せずに済むようにiアプリにしました。私のケータイでゲームをやって、嫁さんのケータイで解く感じです。(そもそも、私のケータイはDoCoMoだけどiアプリが動かなかったりします。Mode)を付けましたので、興味のある方でiアプリを使える方はダウンロードして遊んでみて下さい。http://labs.bitmeister.jp/oaka/flip/Download.htmlなお、ソースファイルはここにおきました。リソースファイルとかは付けていませんが、iアプリ開発に心得があれば、流用できると思います。(そういうニーズがあるかどうかはおいといて。)おまけこのプログラムのおかげで、さくさくステージクリアできるようになったのですが、なんだかむなしい。結局、子供とやるときにこのプログラムは使っていません。PM同じように、このパズルをプログラムに解かせたいと思っていて、このサイトを見つけました。私の場合は、エクセルファイルで作成したいと思っています。ソースファイルを拝見したのですが、とても難解で(Javaから勉強です)、なかなか理解出来ていませんが、どうにか完成させたいなぁと思っています。AMコメントありがとうございます。ソースの解説を書いていないのでわからないですよね。私も後で見るとよくわからない位で(^^;簡単にソースのポイントだけ説明すると、問題を解いているのは次の2つのメソッドになります。parentMask)baseとparentMaskは解く対象のパズル、levelが解くのに何手かかるか、maxが最大何手まで試行するか、を表しています。戻り値がポイントなのですが、どことどことどこと...を選ぶかをビットフラグで表しています。答えが左上の隅っこと右下の隅っこだった場合、MASK[]のindex値が0と24が答えになります。順番は問わないので、答えを”0′′と”24′′という値の配列では持たないで、25ビットのうちの0番目と24番目のフラグを立てて答えを表現しています。Javaのint=32ビットあれば、5×5マス=25ビットの解答を表現できるので、そのようにしています。ちなみに、doLevelNで、手数(level)を増やしながら問題を解いているのは、解答の手数(=解答のビット数)が少ない時に少ない時間で解けるようにするためです。わかります?わからないですかね。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。