GraphCoaster
数式でグラフを描き、球を落として通過点をすべて通すパズルゲーム

名前は「グラフ」+「コースター(ジェットコースター)」から。数式で作ったコースを球が滑り落ちることより。
どんなゲーム?
- 数式(y=f(x) の陽関数 や F(x,y)=0 の陰関数)を入力してグラフを描き、球を落として通過点をすべて通すパズルゲーム。
- 画面左がグラフの描画エリア、右が数式の入力欄とステージ情報。
- 「落とす」を押すと球が数式の曲線に沿って落ち、通過点をすべて通せばステージクリア。
操作
- 数式欄に y=f(x) や F(x,y)=0 の形で式を入力する(複数の式を追加して組み合わせ可能)。
- 「落とす」で球をシミュレーション、「リセット」でやり直し、「次の問題」で次のステージへ。
- ステージはプルダウンから選び直すこともできる。
技術情報
- Svelte 5(runes)+ Vite 7 + TypeScript で構築。UI は Flowbite Svelte + Tailwind CSS 4。バックエンドの無い静的サイト。
- 数式は mathjs で構文解析し、使える関数・記号を許可リストで検査してから評価します(eval は使いません)。
- 陰関数 F(x,y)=0 は式から y を解けないため、マーチングスクエア法で曲線を求めて描画と当たり判定に使います。
- 物理演算は requestAnimationFrame 上の固定タイムステップ。着地時は曲線に垂直な速度だけを捨てて接線方向を残すことで「跳ねないが勢いは保つ」動きにしています。
- 曲線から離れるかどうかは、必要な向心力と重力の法線成分を比べて判定。
- GitHub Actions で main への push ごとに GitHub Pages へ配信。ライセンスは MIT。