■□□□
□□□□
□□□□
□□□□
■=空きマス
プログラミング初心者です。javascriptの練習にと思い、↑のような16面のパズルを作りました。(正式名称はよくわかりません。マスをずらして絵柄を完成させるアレです)
パズルを始める際にマスの並びをシャッフルする、まではできたのですが、一つ問題があり、シャッフルされたマスの並びで絶対に解けないパターンが発生してしまいます。
16面のパズルの解けないパターンというのは、↓の状態から(2)と(1)を入れ替える事が不可能、というものです。
■(2)(1)(3)
(4)(5)(6)(7)
(8)(9)(10)(11)
(12)(13)(14)(15)
現段階でのシャッフルの方法は、単純に、マス(画像)が正しい順番で並んでいる状態を
シャッフル前 ⇒ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
とし、これをシャッフルして
シャッフル後 ⇒ 14,8,1,7,12,9,3,5,15,2,10,6,4,11,13
のようにランダムな並び順となった配列を作り、それを元に画像を並べていく、というものです。
このシャッフル後の配列をチェックして解けないパターンであればエラーとしたいのですが、どのようなチェックをすれば良いのかがわかりません。数学のカテゴリに質問すべきかとも思いましたが、もしどなたかわかる方いらっしゃいましたら教えて頂けると幸いです。
No.2ベストアンサー
- 回答日時:
解けないパターンの識別方法は数学的に証明されています。
「15パスル パリティ」で検索してください。
ただ、方法論としてはシャッフルするよりスワップする方が簡単だと思います。
No.1
- 回答日時:
単純なはなし・・・シャッフルしなければいいのでは?
このゲームの主旨は空マスと最多4つの隣接するマスとを
入れ替えるという処理ですね
よって隣接するマスをランダムに選び、入れ替えをおこなえば
すむはずです。(端のマスは例外処理をいれる)
どのくらいでバラバラになるかは微妙ですが、1万回も入れ替えを
行えばよいのでは?
この回答への補足
回答ありがとうございます。
その方法は最初に考えたのですが、数学的な考え方で配列をチェックできないものか、という点がどうしても気になってしまい、質問させて頂きました。やはり数学のカテゴリが専門でしょうか…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
undefinedを表示させない方法は...
-
jspからjavascriptの変数引継ぎ
-
二次元配列を使って順位をだす...
-
javascriptで2つのArrayの...
-
16面パズルを作ったのですが、...
-
大分類・中分類・小分類のvalue...
-
どうすればresponseText結果を...
-
C#テキストボックスの文字を配...
-
[Javascript]多次元配列の宣言...
-
<a>タグのテキストを取得
-
ASP.NETのコントロールの値をJa...
-
idを使わずにonclickで自身の要...
-
翌月を取得するGASが分かりません
-
getElementByIdを使用したグロ...
-
ActiveXobjectが作成できない
-
なぜ、ジャバスクリプトが表示...
-
任意の座標をクリックさせるには
-
window.openでタイトル名の指定
-
ASP+アクセスでのSQLコメントに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
jspからjavascriptの変数引継ぎ
-
C#テキストボックスの文字を配...
-
undefinedを表示させない方法は...
-
二次元配列を使って順位をだす...
-
JavaScriptにおける[] とか :...
-
javascript 変数名の連結をしたい
-
javascriptを用いて作成された...
-
句点“。”で区切り、“。”も含め...
-
javascriptで行を抽出したいです。
-
JavaScriptで簡単なクイズを作...
-
大分類・中分類・小分類のvalue...
-
javascriptで2つのArrayの...
-
for文内での計算の仕方
-
ぷよぷよの消去アルゴリズムが...
-
オブジェクトから任意のプロパ...
-
【JavaScript】オブジェクト型...
-
配列データの利用方法
-
雪を降らせるみたいな、ゆらゆ...
-
Wikipedia APIの結果からタイト...
おすすめ情報