ChatGPTと作ったソリティアを置いてみた。好きにいじってください。~ソリティア設計①~

に公開
2

はじめに

Google Playでダウンロードしたソリティア、なんかどうも気に入らない。

・広告が多すぎる
・使い方が分かりにくい(余計なUIが多い)
・終わった後の“びよんびよん”演出がちょっと邪魔
・難易度やモードが多すぎる

時間つぶしで、シンプルに遊べればいいだけなんだけど、「シンプル」がなかなか見つからない。

ChatGPTに聞いたら「HTML + JavaScriptの1ファイルで作れるよ」と言われた。
文句言ったらいいものが出てくるわけでもないので、とりあえず一緒に作ってみることにした。

作ったもの

HTML + JavaScriptで、最低限動くソリティア。

  • 1枚めくり
  • 山札は再利用あり
  • ヒントあり

ローカルでもそのまま動く。

設計で決めたこと(重要)

詰み検知よりも、「必ず解ける配りを生成する」方が大変らしい。

なので今回は、そっちはやらないことにした。

代わりに、

  • 行き詰まったら「この配りダメでした」と出す
  • 新しいゲームをやり直す

という形にしている。

いわば「解ける保証を事前に持たない」設計。

システムを作るときは、「どこまでを許容するか」というのは重要な判断になる。

今回は自分用なので、

  • 動かないならそれでOK
  • ただし「動かなかった」という報告は出す

という、いわば“報連相で回す”形にしている。

とりあえず動かしてみる

プレイしていると、ヒントが変。

例えば:
→ ヒントクリック
→「列2 → 列4 に移動できます」
→ 実行する
→ ヒントクリック
→ 「列4 → 列2 に移動できます」

このループが発生する。

これはバグではない

ヒントは「移動できるものを表示する」
つまり、この挙動は、ルール的には正しい。
ただし、盤面としては何も進んでいないし、永遠に終わらない。

市販のソリティアとの違い

市販のソリティアは、この手の動きをあまり見せない。

たぶん、こんなコードを組み込んでいるんだろう。

  • 意味のある手だけヒントに出す
  • 進展しない操作は誘導しない

あえてこの状態で残した

「解ける保証は持たない」という設計にしているので、挙動もそのままにしている。

・無意味な手もそのまま出る
・詰みもそのまま出る(ただし報告は出す)

隠すこともできるが、今回はそこはやっていない。
盤面の動きは、そのまま見える。


コードはGitHubに置いてあります。

Minimalsolitaire.html

ローカルに落として、HTMLを開けばそのまま動きます。

触れるポイント

このコードは、そのまま調整できるようにしてある。

  • UIの派手な演出(いわゆる“びよんびよん”)は入れていない
  • 行き詰まった場合は「ごめん!配りに失敗した可能性があります。新しいゲームを試してください」とそのまま報告する。
  • 難易度調整や細かな設定もあえて用意していない。

つまり、"最低限のルールだけで動く状態"になっている。

例えばこんなところいじってもいいとおもう。:

  • ヒントロジック(findHint)を賢くする
  • 無意味な往復を禁止する
  • 詰み判定を強化する
  • 山札のルールを変える

おわりに

ヒントを賢くしてもいいし、
逆にもっと雑にしてもいい。

ゲームって、その人の「どこまで許容できるか」が一番出るものだと思う。
自分でいじってもいいし、ChatGPTやClaude、Geminiなど、普段使っている生成AIに直させてみてもいい。

好きなようにいじってみてください。

追記

今気になっている点

  • Undoができない。特に、一回右上に詰んだカードを戻せない
  • 非表示カードが無くなったら、自動で右上に詰むボタンが欲しい
  • 右上に詰めるカードが表示されている場合、自動で詰むボタンが欲しい
  • 終わったら、「終了しました」とか言って欲しい

「いつでも直せる」と思っていると、
機能不足も含めて、そのまま遊べることに気がついた。

次回記事

https://zenn.dev/hydrangea01/articles/d86c407b9ba32a

Discussion