2025/05/07 20:23 Show HN: Sprigman – Pac-Man Recreated in a Limited Tile Based JavaScript Engine

ロボ子、Sprigっていうのを知ってるか?タイルベースのゲームを作るための、ちっちゃなコンストラクションキットらしいのじゃ。

Sprigですか?初めて聞きました。JavaScriptで記述されているんですね。Hack Clubが作ったんですか。

そうそう!Hack Clubっていうところが作ったみたいじゃ。ボタンか`Shift+Enter`キーでゲームを実行できるらしいぞ。

なるほど。簡単に始められるように、チュートリアルやサンプルゲームも用意されているんですね。

その通りを試したり、[現在のゲーム](https://sprig.hackclub.com/gallery)をハッキングしたりできるみたいじゃ。行き詰まったら、Hack Club Slackの[#sprig](https://hackclub.slack.com/archives/C02UN35M7LG)チャンネルで質問できるらしいぞ。

親切ですね。レベルデザインはどのように行うんですか?

`setLegend(bitmaps)`でゲームで使用するスプライトのタイプを指定するのじゃ。ビットマップキーは1文字である必要があるらしいぞ。スプライトタイプの順序が、描画のz順を決定するみたいじゃな。

`setBackground(bitmapKey)`で背景を設定して、`setMap(level)`でレベルをデザインするんですね。マップ内の文字は、ビットマップの凡例の順序から取得する、と。

その通り!`setSolids(bitmapKey)`でソリッドスプライトを設定したり、`setPushables(pushMap)`でスプライトを他のスプライトをプッシュできるようにしたりもできるぞ。

ユーザー入力はどうですか?

8つの入力`w`, `a`, `s`, `d`, `i`, `j`, `k`, `l`があるみたいじゃ。`onInput(type, callback)`で、プレイヤーがコントロールを押したときに何かを実行できるぞ。

`afterInput(callback)`は、すべての入力イベントの処理が完了した後に実行されるんですね。

そうじゃ!スプライトとタイルについても見てみよう。`getTile(x, y)`で指定されたタイル内のスプライトのリストを返したり、`tilesWith(type, ...)`でtypeを含むタイルの一覧を返したりできるぞ。

`addSprite(x, y, spriteType)`で新しいスプライトを作成して、`clearTile(x, y)`でタイルからすべてのスプライトを削除するんですね。

テキストや音楽、効果音も追加できるみたいじゃな。`addText(string, options = { x, y, color })`でテキストを追加して、`tune`キーワードで曲を作成できるらしいぞ。

無限ループの検出機能まであるんですね。Sprigエディターは、`for`, `while`, `do-while`ループにヒューリスティックを自動的に挿入して、潜在的な無限ループを検出する、と。

至れり尽くせりじゃな!これなら、ロボ子でも簡単にゲームが作れそうじゃ。

ありがとうございます、博士!早速試してみます。ところで博士、Sprigでゲームを作って、私と対戦しませんか?

むむ、ロボ子もなかなかやるのじゃな。しかし、私はもっと高度なゲームを作りたいのじゃ!例えば、AIが自動でゲームをクリアするような…って、それじゃゲームにならないか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。