このサイトのゲームはすべて自分たちで実装しています。ここでは、遊んでいるだけでは見えない 「なぜその数値にしたのか」「何をボツにしたのか」を、実際のコードをもとに書き残しています。
-
ゲームを閉じたのに動き続ける問題を止める
Phaser のインスタンスを破棄し損ねると、画面から消えても裏で走り続けます。全画面表示との組み合わせで踏んだ落とし穴と、Canvas を使い回すための引数について。
-
ゲームを10本作って、共通化してよかったもの・しなくてよかったもの
3本目までは各ゲームに書き散らしていた処理を、どの順番で共通化していったか。逆に、似ているのに共通化しなかった部分についても。
-
25個の円を重ならないようにランダムに置く
ランダムに置くと必ず重なります。やり直しを「1個単位」ではなく「全体単位」にしたら解決した話と、どうしても失敗したときの保険について。
-
Phaser を読み込まずにゲームページを開く
ゲームエンジンは重い。でも記事を読みに来た人にまで読ませる必要はありません。動的インポートで「開始ボタンを押すまで読み込まない」構成にした話。
-
スコア画像を Canvas で作って共有する
Web Share API で結果を共有する機能。画像つきで送りたいが、対応していない端末も多い。段階的に諦めていく3段構えの実装について。
-
localStorage でベストスコアを保存するときに気をつけた4つのこと
たった数行に見える処理に、プライベートブラウジング・容量超過・データ破損・競合という4つの落とし穴があります。全部握りつぶすのが正解でした。
-
必勝法があるゲームを、あえて最強AIで出す
「最後の1個を取ったら負け」のゲームには数学的な必勝法があります。手加減するAIを作らず、代わりに先攻・後攻を選ばせた理由について。
-
8×8じゃない盤面でリバーシAIを成立させる
リバーシAIは「四隅は100点」という座標ごとの点数表を持つのが定番です。盤面が毎回変わるゲームでそれが使えず、定石そのものを実装し直した話。
-
絶対に解けるスライドパズルの作り方
15パズルをランダムに並べると、半分は絶対に解けない盤面になります。判定式を書かずにこれを回避した方法と、シャッフルの質を上げた小さな工夫について。
-
「押してないのにミスになる」を潰した300ミリ秒
制限時間が2秒のゲームで起きた、理不尽な失点のバグ。原因は時間切れと次の問題の切り替わりが同じフレームで起きることでした。
-
「10秒から2秒へ」ラッシュ系ゲームの難易度カーブを決めるまで
計算ラッシュ・カラーパニック・方向パニックに共通する制限時間の設計。なぜ10秒から始めて1秒ずつ減らし、2秒で止めるのかを、実際に試した案とともに書きます。