以前作った15パズルを少しだけ改造して別のパズルを作ってみました。
決定ボタンを押すと赤い四角の枠内で右回りにセルが回ります。
これによって元の画像を復元できればクリアです。
(追記,2017/2/1)改良版を作りました。
・テストゲーム
ダウンロード
・スクリプト
DataManager
Tile_Tip_Cycle4
Scene_Puzzle_4cycle
Window_Puzzle_4cycle
・導入法
上のスクリプトたちを導入した後、本体のDataManager内のself.initのcreate_game_objectsの下にload_normal_data_takopuzzle_4circle
を挿入してください。
例
・使い方
新しく導入したDataManager内の
$MINIGAMERESULT_puzzle4circleでゲームをクリアしたときに1を加算する変数のIDを指定します。
$data_puzzle4cycle_pic_filenameでパズルに使用する画像のファイル名(例"hogehoge.jpg")を指定してください。
画像は300*300の大きさのものをピクチャ素材のフォルダに入れておいてください
$data_puzzle4cycle_widthで横マスの個数
$data_puzzle4cycle_heightで縦マスの個数を指定します。
・注意点
おそらくセル数が8個以上ないと解けないケースが発生します。
ですので2*4,4*2または3*3より大きくなるように縦、横マスを設定してください。
(余談1)
十分大きな桝目の場合は任意の置換で置き換えたものでも解けそうなので
今回は前回とは違って単純にランダムにセルを置き換えてます。
(余談2)
一部の数学用語は
15パズルの記事参照。
今回の赤い枠内での変換(以下Tと呼ぶ)は奇置換なので15パズルのような偶置換による問題は起こりません。
(数学的に言うとTは4次の巡回置換になっており(1 2 3 4)=(3 4)(2 3)(1 2)であるから奇置換)
ただあくまでこれはTたちの合成が偶置換とは限らないということをいっているのに過ぎないので
すべての置換がこのTたちの合成で表せるかはまだ示されていません。
そこですべての置換がTたちの合成となっているか検証します。
さて前回同様左上から詰めていって帰納的に
3*2の場合に帰着した場合を考えたのですがどうも上手くいきませんでした。
もしかすると3*2の場合は解けないのかもしれません。
ただしここで解けないからといって任意のマスの場合も成り立たないとは限らなくて
3*3の場合では成り立つかもしれません。
3*3の場合について考えてみます。
色々やった結果Tを繰り返すことで(7 8)の互換ができました。
対称性から(7 9)や(1 2)のように角とその隣との互換も作ることができます。
また色々やった結果
(5 6)の互換を作ることができました。
これも対称性から(2 6),(4 6),(8 6),(5 6)も作ることができることがわかります。
(b c) = (a c)(a b)(a c)であることに注意すると
上の結果からすべての互換がTたちによって生成可能であることがわかります。
3*3の場合の任意の置換は互換の積で表されることから
3*3の場合の任意の置換はTたちで生成できることが分かります。
すなわち3*3より大きな場合はTによって解くことができることがわかります。
これでm , n >= 3の場合のm * nの場合において解けることが分かりましたが
2 * n の場合( n >= 4)はどうなのか検証してみました。
これも帰納法で2 * 4の場合に還元されるので2*4の場合を考えます。
色々やった結果
画像
画像2
画像3
上の画像のようになりやはり2*4の場合も解くことができることがわかりました。
2*3の場合が解けるか否かは今のところわかりません。
解ける場合を示すにはその解き方を示すだけでいいのですが
解けないことを示すのはそういうやり方では難しいので別の方法をとる必要があります。
解決したら追記します。
1. こちらのスクリプトは
改変=
報告=
商用=
R18使用=
また、こちらのパズルスクリプトは、1つのゲームに1つのパズルしか設定できないと思ったのですが間違いないでしょうか?