小さなゲームのアイデアって、どうやって思いつくの

さあ小さなゲームを作る準備は整った。じゃあどういったゲームを作ろうか。

ゲームのアイデア出しは一番楽しく一番苦労するポイントである。ここで良いアイデアが思いつけば制作はとんとん拍子に進む。逆にここで微妙なアイデアをつかむといばらの道だ。まあ小さなゲームの場合、ちょっと作ってダメだったら単に捨てればよいのだけど。

ゲームのアイデア発想法はWeb上にたくさん記事がある。なので適当に検索して自分に合いそうなものをピックアップしてみるのも良い。私が探した中で気に入ったものを例に挙げよう。

redditのr/gamedevにあったスレッド'How do you guys come up with ideas for your games?' 1 では、以下のプロセスが書いてあった。

  1. あなたが好きな既存のゲームからインスピレーションを得よう。

  2. 奇妙に見えるものを組み合わせてみよう。カードゲーム + 釣り、タワーディフェンス + マインクラフト、FPSとしてのパックマンなど。

  3. 他のゲームを分析し、その制作過程を考えてみよう。もしあなたがそれを作るなら、どう違うものにするだろうか。

  4. 自分の創造的なアイデアを、実際に制作可能なサブセットに落とし込もう。「作りたいもの」と「作れるもの」の交差点に集中しよう。

  5. 制限を受け入れよう。アイデアからいろんな複雑さを取り除いて、その過程で新しいものを作り上げよう。

既存ゲームの要素を組み合わせ、そぎ落とし、自分なりに改良し、新しいゲームにする。これは新しいゲームを考えるときの鉄板プロセスで、特に小さなゲームでは極限まで要素をそぎ落とすことで、面白いコアメカニクスを持つゲームを作ることができる。


ゲームエンジンGameMakerのサイト内にある'14 WAYS TO GENERATE S-TIER VIDEO GAME IDEAS' 2 も良い記事だ。小さなゲーム向けにも大切と思う部分を取り出すと、以下の内容が挙げられる。

  • 過去の名作をプレイする。スーパーマリオブラザーズをプレイするとき、あなたは将来のすべての2Dプラットフォーマーの基礎を築いたゲームをプレイしている。新しいプレイヤーために、その土台をどのように拡張し、現代化するか?

  • 何もないところからゲームのコンセプトを引き出すのは難しい。まずゲームのジャンルを選び、それを中心にアイデアを構築してみる。

  • ジャンルにこだわるのが苦手なら、キャラクターにこだわる。キャラクターの特徴を活かし、彼らを中心とした世界を展開する。

  • マインドマップでアイデアを紙に書き出す。マインドマップは、ジャンルやメインキャラクターなど、ゲームの核となる部分から始め、思いついたキーワードやアイデアを書き留めていく。ゲームプレイのメカニズム、特徴、ストーリーのテーマ、アートスタイルなど。

  • ひらめきはふとした瞬間に生まれる。いつでも手の届くところにメモ帳を置き、一日を過ごす中で頭に浮かんだアイデアを書き留める。

  • SCAMPERメソッドを使う。既存ゲームに対して、どこが代替できるか、どこを組み合わせられるか、何が追加できるか、修正できるか、削除または簡略化できるか、ある側面を別の用途で利用できるか、ある側面を逆にできるか。

  • 他のメディアに目を向ける。テレビ、映画、音楽、本、伝統的な芸術作品など、すべてがビデオゲームのアイデアをかき立ててくれる。

  • 現実世界からインスピレーションを得る。現実世界にはゲームを作るに値する信じがたいコンセプトが満載だ。

  • 自分の経験を生かす。あなたは、他の誰も経験したことのない方法で世界を見てきた。それがポジティブなものであれ、ネガティブなものであれ、そうした経験は素晴らしいビデオゲームのアイデアの基礎となり、あなたにしか語れない物語となる。

  • ゲームアイデアジェネレーター(ゲームのジャンルやルール、テーマなどをランダムに表示してくれるもの)を使う。

  • テーマが決まっているゲームジャムに参加する。ゲームジャムは、テーマが決まっていて締め切りが厳しい、短期間のゲーム制作コンテストだ。ゲームジャムに参加することで、集中力が研ぎ澄まされ、創造性が高まる。

  • ゲームコミュニティーに参加し、ゲーマーに直接質問する。スレッドに目を通し、質問を投げかけ、ゲーマーが何を求めているのか、何が好きで何が嫌いなのかを知る。

イデアを得るためのテクニックや普段の習慣まで、広い範囲をカバーしている良いリストだ。小さなゲームを作る場合、ここまで頑張る必要はないかもしれないが、こういった方法があるということを頭の片隅に入れておくと、アイデア出しに役立つだろう。


手前味噌ながら、自分がアイデア出しのために行ってきたことについても書こうと思う。

私が大量のミニゲームを作ったときの、評判が良かったゲームの特性や、実際にアイデア出しをした経験から、このような方法でアイデアを考えればよいのではということを、ブログに書いた 3 4 。その内容が以下だ。

  • 既存ゲームのモチーフやルールをうまく借用する。
  • 既存ゲームはテレビゲームに限らず既存スポーツなども視野に入れる。
  • レトロゲームからつまみ食う。レトロゲームの一部分だけを別のゲームとして仕立てる。
  • 誘爆、重力などの定番メカニクスを取り入れる。
  • まとめて取る・倒すと高得点を楽しさの基本に置く。
  • 自然現象や幾何学などから面白い挙動を転用する。
  • 物理挙動を操作にリンクさせて楽しさを生み出す。
  • うまくプレイできていることを視覚的に示して達成感を増す。
  • ワンボタンでの操作などの制約を活かしたインタラクションを取り入れる。
  • リスクとリワードのバランスを常に考える。
  • リスク駆動開発。どういったリスクをプレイヤーに与えようか、という点から新たなメカニクスを考える。
  • 爽快感と緊張感のバランスを考える。
  • ゲームテンポを高めるためのルールを探す。
  • ゲームの背景や舞台設定などのモチーフを提示して、ゲームと物語をリンクさせる。
  • 斬新さを少しずつ削る。最初に考えた斬新なアイデアを少しずつ削って、保守的な作りによせる。

前述2つのスレッド、記事と被る部分もあるが、このリストは私の実開発経験に基づいているので、小さなアクションゲームにフォーカスしたリストになっていると思う。

ちなみに今まで私が作ってきたゲームがどんなものかという記事 5 もあるので、興味があれば参照いただきたい(Flashで作ったゲームは残念ながら今は遊べなくなってしまった)。


また、それらゲームを、いくつかの仕組みに分解して解析してみる 6 ということも行ってみた。今まで作ったゲームが、どのようなプレイヤーキャラクタ、武器、障害物、フィールド、ルール、操作から構成されているかを、カテゴリごとのタグで整理した。これらのタグを使って、以下のように新しいゲームを発想することを想定している。

  • タグ一覧ページを見てゲームに組み込める仕組みを把握する
  • タグ詳細ページを見てその仕組みを使った別のゲームを考える
  • 複数のタグを適当に組み合わせてそれら仕組みを使ったゲームを考える


ランダムに、こういうテーマでゲームを作ってみては?などを出してくれるスロットマシンのようなものを、ゲームアイデアジェネレーターと呼ぶ 7 。これは発想の取っ掛かりを得るにはいいツールではあるが、小さなゲームに使うにはちょっと漠然とした内容であることも多い。なので、私も小さなアクションゲームに特化したゲームアイデアジェネレーター 8 を作った。「ミサイル を 打ち払う」「屋根 が 戦う」「電気 を 拡大する」などの突拍子もないアイデアが次々に出てくるので、それを何とかしてゲームにすることで、斬新なゲームが作れる、かもしれない。


ゲームのアイデアを考えるテクニックは色々あるし、先人の知恵を利用することで効率的に思いつくこともできるだろう。だけど一番いいのは、たくさん考えて、たくさん作ってみることだ。幸いにして小さなゲームを作る場合、アイデアを考えるのも、そのアイデアをゲームにするのも、短時間で行えるだろう。失敗したら捨てればいい。そういった軽い気持ちでトライしてはいかがだろうか。

1.

2.

3.

4.

5.

6.

7.

8.

小さなゲームを作るとして、ターゲットデバイスと開発環境、何向けに何で作るのがいいんだろう

じゃあ小さなゲームを作ってみようか、と思ったときに、まず考えないといけないことの一つに、PC、スマホ、ゲーム機などなど、どのデバイスで動くゲームを作るかということがある。

特にこだわりがないのであれば、PCのWebブラウザ向けのゲームを作るのがおススメだ。今のブラウザは様々な開発環境で開発されたゲームを動作させるためのプラットフォームとして成熟しているし、他の人にプレイしてもらうにも、ネット上のURL告知からシームレスに遊んでもらえてお手軽だ。

ゲーム作りを楽しむ、という面では、どの開発環境・プログラミング言語ゲームエンジンでゲームを作りたいか、から考える手もある。これについては小さなゲームだからどうこう、ということは特になくて、自分の好みで決めて良いと思う。ただ、重厚な3Dゲームを主なターゲットとしているUnreal Engineなどは小さなゲームを作るにはリッチすぎる、などは考慮しても良いかもしれない。

ブラウザ向けに作るとして、開発環境の選択肢は色々ある。

ブラウザで動くプログラムはJavaScriptで書く。だからゲームもJavaScriptで書こう、というのは自然な発想だ。p5.jsPhaserなどのライブラリを利用することで、画面描画などの面倒な部分を楽して書くことができる。p5.jsなら、文系大学生のためのp5.js入門p5.js日本語リファレンスを見ながら、p5.js web editorを使えば、すぐに始めることができる。

ゲームの実行環境と開発環境、キャラクタ・レベル・音のエディタなどを内包した、軽量なゲームエンジンをファンタジーコンソールと呼ぶ。代表的なものとしてはPICO-8PyxelTIC-80などがある。オールインワンの環境で、機能も意図的に絞られているため、小さなゲームを作るには良い選択だ。それぞれ使えるプログラミング言語などが異なるので、自分の好みのものを見つけると良い。PICO-8を試してみるなら、PICO-8日本語版マニュアルPICO-8 API早見表を見ながら、PICO-8 Education Editionを使ってみよう。

UnityGameMakerGodot、など多くのゲームエンジンは、ブラウザ (HTML5)向けにゲームをエクスポートすることができ、ブラウザ上で作ったゲームを遊ぶことができる。画像や音などのアセット管理機能が充実していたり、ブラウザだけでなくPC・スマホ向けにもゲームをリリースできるなど、採用するメリットは大きい。

  • ツクール

RPGが作りたい、ノベルゲームが作りたい、などのジャンルが決まっているのであれば、専用のツールが使える。RPGツクールMVに代表されるツクールが歴史的にも有名なため、このカテゴリのツールは伝統的にツクールと呼ばれがちだ。RPGツクール以外にもWOLF RPGエディターなどもあるし、ノベルゲームならティラノスクリプトなどがある。最近の多くのツクールはブラウザ向けのエクスポート機能を備えている。

テキストベースのプログラムにそもそも慣れていない場合は、ScratchMakeCodeなどのビジュアルプログラミング言語が利用できる。複雑なゲームを作ることは大変だが、あらかじめ絵や音なども用意されていて、小さなゲームであれば十分に制作することができる。

今のブラウザは、JavaScript以外の言語もWebAseemblyなどの技術を活用することで動作させることができる。ただし動作させるためのコンパイルなどの作業が複雑なことも多く、可能であれば上記ファンタジーコンソールやゲームエンジンの助けを借りた方が良い。Pythonで作りたかったらPyxel、C#で作りたかったらUnity、など。HSPなど、オフィシャルで対応している言語は手間は少なくて済みそうだ。


ブラウザ向けに作る場合、タッチ操作(PC上ではマウス操作)のみでゲームを操作可能にすることで、スマホ対応を行うこともできる。より多くの人に遊んでもらいたい場合は検討したい。

ゲームを作る体験それ自身を楽しみたい、という面では別にブラウザ向けにこだわる必要もない。PC用アプリやスマホ用アプリでもよい。プチコン4などを使ってSwitch向けゲームを作っても良い。MakeCodeで作ったゲームは好きなハンドヘルドデバイスで遊ぶこともできる。PICO-8用ゲームをハンドヘルドデバイスで動かしている人もいる。多くの人に手軽に遊んでもらいたい!という考え方だけでなく、このデバイス向けに作ってみるのが面白そう!というモチベーションで作るのも楽しい。自由に作ろう。

小さなゲームを作ること、それ自身が楽しいのだ

小さなゲームとは何か。スモールゲームマニフェスト(宣言書) 1 によれば、1プレイが10分以内に終わる、ブラウザなどで手軽に遊べるゲームを指す。

その定義で言うと、私は小さなゲームをすでに350個以上 2 作っていることになる。1年間で139個作ったこともある 3 。無類の小さなゲーム好きだ。

小さなゲームの何が良いって、短時間で作れるのが良い。速くて2時間、ちょっと苦戦しても10時間くらいではできるだろう。アートワークなどを凝り始めるといくらでも時間はかけられるが、ここでは1週間に1つゲームを作る、Game a week 4 のような取り組みでできる規模の、開発者目線でも小さなゲームとしたい。

短時間で作れるということは、いろんなアイデアを簡単に試すことができるということだ。「ヘンテコにおもしろい小さなゲームを作ろう」 5 というエッセイを、「ゲームクリエイターが知るべき97のこと2」という本に寄稿したのはだいぶ昔の2013年のことだが、そのころから私はちょっと変わったゲームを、いろいろ作って試してみるのが好きなのだ。

なぜ小さなゲームを作るのか。それは小さなゲームを作ることが、より大規模で完成度の高いゲームを作るための準備として大切である、のような話がよくある。ちょっと前に、初めてゲームを作る人向けのアドバイスとして、まず小さなゲームを作れという意見が圧倒的に多いという記事 6 があった。

「小規模でシンプルなもので構わないから、とにかく完成させリリースするんだ」とアドバイスする。そうした経験を重ねることで、開発のプロセスやツールの扱いに慣れていくとのこと。

'Make and release lots of small games before making a big one'というブログ記事 7 でも、大きなゲームを作る前に多くの小さなゲームを作る重要性を述べている。

最初のゲームとして大きなゲームにいきなり飛び込むのは、モチベーションを失い、そのゲームを最後までやり遂げることができなかったり、何年もかけて作ったものを見るのも嫌になったりすることにつながる。

でもそれだけじゃないんだ。小さなゲームには小さなゲームにしかない、ある種の魅力がある。そう私は思っている。

'How To Make Good Small Games'というブログ記事 8 がある。この記事では、小さなゲームでも優れたものはあり、それをどうやって作るかについて述べている。

このマニフェストのようなものである「優れたスモールゲームの作り方」は、この視点(小さなゲームは簡単な気晴らしにしかならず、「本物の」ゲームと同列に考えるべきではない)と折り合いをつけようとする試みである。それは12の考えに分かれており、主に難解な創造的理論(なぜ私は小さなゲームが好きなのか、なぜ私は小さなゲームを作るのが好きなのか)と、少し実践的なアドバイスで構成されている。あなたに「小さなゲームを作ろう」と言っても、最初から小さなゲームも良いものになると信じていないのであれば、あなたが本当に作りたいゲームを作る前にやらなければならない宿題だとしか聞こえないだろう。

12の考えとは以下の内容だ。

  1. ゲームの質はその規模とは無関係だ:小規模なゲームは作るのが簡単なだけでなく、うまく作るのも簡単である。ゲームが大きければ大きいほど、ゲーム内で気にかけなければならない部分が多くなり、失敗する可能性も高くなる。

  2. ゲームの質はその感情的な広がりとは無関係だ:短編小説が長大な小説や叙事詩とは機能が異なるのと同じように、小規模ゲームでは「成功」を構成する条件が異なる。

  3. ゲームは自らの成功の条件を定義する:あるがままを受け入れる。そして、そのあるがままが良いかどうかを判断する。

  4. ゲームはその約束を果たすことで成功する:新しいキャラクター、新しいメカニクスの登場はすべて約束だ。面白いアイデアを導入してすぐに放棄するのではなく、そのアイデアが発展し、ゲーム全体の展開に関わるものであることを約束する。

  5. 小さな約束をしたほうがゲームは成功しやすい:メカニクス、敵、アセット、キャラクター、ステージを少なくする。3つのアイデアを導入し、満足のいくクライマックスへと発展させるのは、10や100のアイデアよりも簡単だ。

  6. 面白く楽しい方法で約束を果たす:何があなたを笑顔にするのか?自分らしいゲームを作るという、あなたの個人的なスタイルが発揮される場所だ。

  7. 約束を過剰に果たさないこと:ゲームは長すぎることなく、適切なタイミングで終わること。

  8. フォームファクターはゲームの約束事の一部だ:プレイヤーに与える情報を少なくし、ゲームを起動してすぐにプレイを始められるようにすることで、プレイヤーの期待をかわす。

  9. ゲームを完成させてからリリースすること:「体験版」と銘打ったり、サブタイトルに「プロローグ」と入れたりしてリリースする前に、なぜゲームが完成する前にリリースしたいのか、自問するべき。

  10. 連作は近道ではない:ゲームをエピソードごとに2回以上に分けて、長い期間にわたってリリースすること。これはほとんど常に悪いアイデアだ。

  11. 流行る流行らないを心配する必要はない:ゲームで小さく具体的な目標を追求することは、小さく具体的な観客を呼び込むことでもある。

  12. 良いものは十分良い:自分が満足できるゲーム、心の底から良いと思えるゲームをコンスタントに作れるようになれば、大多数のゲーム開発者よりも何光年も先に進んでいることになる。

ちなみにこの記事には13個目があって、それは'Have fun :)'だ。新しいメカニクスを考えて、それを自分らしい方法でゲームにする。その過程が楽しいから、小さなゲームを作るのだ。それが一定数の人に届いて楽しんでもらえれば、それはさらに嬉しい。

小さなゲームを作ることは、ゲーム開発のスキルアップの文脈で語られることが多い。だけど、いろんなゲームのアイデアを考えて、実験して、うまくいったいかなかったと一喜一憂して、たまにみんなにお披露目する。そういったプロセスそれ自身が楽しめるに越したことはないよね。


1.

Manifesto Jamという、まずマニフェストを書いてからゲームを投稿しろという、特殊なGame Jam向けに書かれた、小さなゲームのマニフェスト

Small Games should be 10 minutes or less and it's best if they're playable in a web browser.

2.

JavaScriptのゲーム今は亡きFlashのゲーム、合わせて350個以上ある。

3.

4.

5.

6.

7.

It's here because, jumping straight into a big game as your "first" game is exactly how you end up losing motivation and never finishing that game, or ending up with something that ate years of your life that you can't even stand looking at anymore.

8.

This manifesto of sorts, “How to Make Good Small Games”, is an attempt to meet this perspective halfway. It’s divided into twelve thoughts, made up mostly of esoteric creative theory (why do I like small games? why do I like making small games?), and hopefully a little actionable advice. I can tell you “scope small uwu”, but if you don’t believe small games can be good in the first place, all you’ll hear is a homework assignment you have to do before you can make the games you really care about.

コードを実行できるようになったChatGPTなら直接ジェネレーティブアートを生成できるのでは?

ChatGPTのCode Interpreter機能によって、チャットの中でプログラムを実行してその結果を表示することが可能になった。

じゃあ前にやったChatGPTにジェネレーティブアートを作ってもらう試み、プログラムコードではなくその結果の画像をいきなり作ってもらえるのでは?

プロンプトを以下に変えた。

I want you to act as a generative art programmer.
Conceive an unprecedented abstract and geometric graphics piece,
centered around the theme of "[Theme name]". 
Consider using noise, mathematical functions or fractals to achieve this task.
Generate and interpret the code and show me the outputed graphics.

テーマ名:colorful wavesの結果は以下。

テーマ名:recursive life formsの結果は以下。

うーん、テーマに沿った何かを出してはくれるけど、ジェネレーティブアートっぽいかと言われると、どうだろう。あまりそんな感じはしない。

原因は明らかで、Matplotlib使ってグラフィックスを生成しているんだよね。

Let's use Python with libraries like numpy for the mathematical part and
matplotlib for the graphics part.

現状のCode InterpreterPython+限られたライブラリしか実行できないので、p5.jsのようなジェネレーティブアート向けライブラリを使った出力はできない。グラフを作成するなど、Code Interpreterが想定しているコードはうまく実行できるが、それ以外の用途向けには実行可能な言語やライブラリの充実を待つしかないね。ジェネレーティブアート用ライブラリだけでなく、SuperColliderみたいなアルゴリズム作曲言語とかも動かせるようになるといいな。

簡単なファンタジーコンソールを作ってみて非実在マシンの妄想を形にしよう

ファンタジーコンソールは、こんなゲーム機があったら面白いなという開発者の妄想を具現化したものだ。実在しなかった別のゲームボーイファミコンを勝手に考えてPC上で実装して遊ぶ、それがファンタジーコンソール。

ファンタジーコンソールの代表例はなんといってもPICO-8だ。128x128ドットの画面、4音同時再生、256個の8x8スプライトを持ち、Luaでの開発環境やドット絵エディタ、音楽エディタ、マップエディタなどを含むとてもリッチなマシンだ。

ちょっと前にPICO-8 Education Edition: for Webというのがリリースされ、Webブラウザ上からも手軽に試せるようになった。

コンソール(Video game console = ゲーム機)という名前にもかかわらず、ファンタジーコンソールは開発環境を内包した作りになっていることが多い。どちらかというとMSXのようなマイコンファミリーベーシックっぽいものになっている。Switch用のBASICであるプチコンもファンタジーコンソールの一種といえよう。

PICO-8レベルのファンタジーコンソールを作るのはとても大変だ。でも自分でもファンタジーコンソールを作ってみたい。ならば思いっきり仕様を絞る必要がある。例えばそうカセットビジョンみたいに、と言うのはカセットビジョンに失礼だ。カセットビジョンはドットの代わりに三角形などのキャラクタが表示できたり、ちゃんとスプライトを持っていたり、パドルコントローラが付いていたり、結構リッチなのだ。

もっと限られた仕様、ごく小さな画面、単純な音出力、簡素な入力手段しか持たないファンタジーコンソールを目指した結果、PEEKPOKEというファンタジーコンソールを作ってみた。

PCやスマホのブラウザで遊べます(下の画面をクリック)。

BOMB SNAKE

サンプルのスネークゲーム。上下左右 or WASDキーで蛇を動かして赤い爆弾を取って。スマホでも画面下のバーチャルパッドで操作できる。

PEEKPOKE memory map

PEEKPOKEではpeek命令とpoke命令しかマシンの制御に使えない。32x30ドット8色の画面と8x5のテキスト画面、7つのキー入力、単音ブザーのみ、という限定された機能を、メモリから操作できるメモリマップドI/Oです。開発環境は入ってません。普通にJavaScriptで書きます

コンソール独自の機能はすべてメモリに押し込んだうえで、開発環境はJavaScriptに丸投げしたので、作りはかなり簡単にできた。作れるゲームもかなり簡単なものに限られるが、ぎりぎりファンタジーコンソールを名乗れるのではないか。まあファンタジーコンソールに厳密な定義が無いから言える話でもある。あと起動時にスプラッシュスクリーンを入れると、なんとなくファンタジーコンソールっぽくなる。

開発環境抜きであればファンタジーコンソールを作る手間はだいぶ削減できるので、何か面白いスペックのコンソールを妄想して作ってみるのも楽しいかも。今回作ったものはだいぶ素直なアーキテクチャになったけど、もっとユニークな、それこそカセットビジョンのグラフィックスのような、独特の機能を持つコンソールを考えてみるのも良さそう。

Twitterがインターネットから切り離されてしまったが、だからといっていまさらブログ+RSSには戻れないので困った

ツイートやタイムラインが、Twitterにログインしないと見られなくなった。

前からログアウトした状態での検索ができなくなっていたが、これで本格的にTwitterはlogin wallの向こう側へ行ってしまい、インターネットから切り離されてしまった。上の埋め込みツイートだって今は見えているが、この調子だといつ見えなくなってもおかしくない。

インターネット上にログを残す用途にTwitterが使えなくなった今、代替手段として何があるだろう。昔に立ち戻るのであれば、ミニでない普通のブログに記録し、RSSリーダなどのアグリゲータで更新情報を得る、という方法になる。

ただもうSNSにどっぷりと浸かってしまった私にはこの方法は面倒くさすぎる。ちょっとした情報をいちいちブログに起こすのも面倒、RSSのリストを整備するのも面倒、リンク先のブログにいちいち飛ぶのも面倒、ブログにコメントを残すのはハードルが高い、リツイートはできない。

ログとアグリゲートを同時に扱うことで得られるSNSの利便性を、分散型のログと個人ごとのアグリゲータで実現するのは色々と難しそうだ。ただSNSがクローズドになっていっている今、オープンなSNS代替として、SNSと同等の使い勝手を目指したブログ+アグリゲータが出てきたりしたら面白いのだが。

(追記)

ログアウト時にコンテンツが見えないのは「一時的な緊急措置」とのこと。

ChatGPTは新しいゲームを作ることができるのか

ChatGPTはいろんなことができるが、私が興味があるのは、ChatGPTは私のためにアクションミニゲームを作ってくれるのか、ということだ。

コンピュータに自動的にアクションミニゲームを作ってもらうための試みは、だいぶ前にやった。

ChatGPTの登場によって、今度は大規模言語モデルを使うという新しいアプローチが手軽に試せるようになった。モデルに新しいゲームのアイデアを考えてもらい、そのアイデアを実現するソースコードを実装してもらえばゲームの出来上がりだ。

だが、少なくとも現状のChatGPT(今のところ私はGPT-3.5でしか試していないが)では以下の問題があるように思える。

ChatGPTに新しいゲームのアイデアを考えさせるのは難しい

ChatGPTは与えられた問に対して愚直に正しい答えを返すので、単に新しいアクションミニゲームのアイデアを教えて、と聞いても当たり障りのない凡庸なアイデアが返ってくる。


I want you to act as a game designer. Show me ideas for new action mini-games.


Sure, here are a few ideas for action mini-games:

  1. Time Attack: In this game, the player has to race against the clock to reach the end of a level. The catch is that the clock constantly ticks down and the player must collect time bonuses along the way to keep the clock running. The player must also avoid obstacles and enemies that can slow them down or cost them precious seconds.

...


なので、こういった新しい観点から今までにないゲームを考えて、のようなプロンプトの工夫が必要だ。

ミニゲームメカニクス群をプロンプトで与えて、それらを組み合わせるように指示したり、

ロジックパズルのように決まったルールの枠組みの中で新しいルールを考えさせたり。

このような工夫で、ある程度はChatGPTにありきたりではないゲームを考えさせることができる。ただ、このようにして返ってきたアイデアはまだぼんやりとしていて、ブレーンストーミングの元ネタにはなるが、ここから具体的なゲームのルール、アルゴリズムまで到達させることは難しい。

より詳細なアルゴリズムにするために、以下のようなプロンプトで、そのゲームの疑似コードを書いてもらうことはできる。


I want you to act as a game programmer. Write a pseudo code outlining the detailed algorithm representing the rules of the following game:

Game 2: Pinball Panic

Selected tags: player: circle, weapon: bounce, field: pins, on pressed: shoot

Description: In this game, the player controls a circular character that bounces around a pinball-like field. The player can shoot projectiles by pressing the button, which bounce off the pins and destroy enemies. The objective is to survive as long as possible while racking up points by destroying enemies and collecting power-ups.


でもこのようにして出てくるコードにはあまり具体性が無く、実装可能な解像度までは遠い。

ChatGPTは新しいアルゴリズムを実装するのは不得意

別の問題として、ChatGPTは既存のアルゴリズムを様々なプログラミング言語で実装するのは得意だが、前例の無い新しいアルゴリズムをコードにするのは不得意なのでは、という点がある。

この記事には、可能であればなるべく火を通らないように目的地までのパスを探索する、というアルゴリズムをChatGPTに書かせようとしたがうまくいかなかった、ということが書いてある。一般的なA*の探索アルゴリズムのコードであればChatGPTは難なく出力するが、それをアレンジした要求をするとうまく答えられなくなるという例だ。

ChatGPTはユーザーの要求を解釈してそれに合致する既存コードを持ってくることや、それに対する追加要求に応じてコードを書き換える、といったことは得意だ。だが、今までに無いアルゴリズムやルールを含むコードを生成する能力がどの程度あるのかは未知数だ。

今までにない簡単なゲームの例として、crisp-game-libで自作したゲームの一つであるPIN CLIMBを、なんとかしてChatGPTに書かせられないかということを試していた。

上記のゲーム実装方法を説明する文章を元に、以下のプロンプトでゲームのアルゴリズムを示す疑似コードを作成し、


I want you to act as a game programmer. Write a pseudo code outlining the detailed algorithm for the following game inside one unique code block. Do not write explanations.
# Characters
- bar
- pins
# Controls
- The bar stretches as long as the button is held down and shrinks to a default length when the button is released.
# Rules
- One end of the bar is fixed to the pin and the other end rotates around the pin.
- The game screen scrolls down so that the bar is positioned slightly above the bottom edge of the screen.
- Pins appear at random locations at the top edge of the screen after each scrolling of a certain distance.
- When the bar catches on another pin, the bar is fixed to that pin.
# Initial state
- Pins are placed in about 10 random positions on the screen, and the bar is fixed to the bottom pin.


その後、以下のプロンプトで具体的なPhaserソースコードにする、ということを試した。Phaserを選んだのは、JavaScriptベースのゲームライブラリで一番Web上に情報が豊富なのはPhaserだろうという予測の元だ。


Implement the game using the HTML5 game framework "Phaser 3" without using external resources such as image files or audio files. Just show me the JavaScript source code.


結果としてはうまくいかなかった。最初の疑似コード時点で十分な情報量があるか怪しいものが出てくるし、そこからPhaserへの変換もあまりうまくいかない。

疑似コードを挟まず、ピンを書く、スクロールさせる、ひもを回す、のようにステップバイステップで指示して直接ソースコードを書かせても、ひもが他のピンに当たるとそのピンへ固定される、のあたりでうまくいかなくなる。まあここの実装難度が高いのは分かる。回転する矩形の当たり判定を取るのも、当たったあとにそのピンへ固定するのも、両方とも処理としては特殊なので、この辺が限界と言われても納得はできる。

プロンプトの工夫でこれらの課題を乗り越えられる?

分からない。

ゲームのアイデア発想はなるべく自由に、それをルールや実装へ落とすところは具体的に、みたいなことをプロンプトでうまく制御するのはかなり難しいのでは、となんとなく思う。あとモデルの限界はプロンプトでは乗り越えられない。

GPT-ほにゃらら になればこの辺の問題は解決される?

分からない。

画像生成AIの急激な改善を見ていると、半年後にはこの辺の問題は解決するのかもしれない。モデルの規模で乗り越えられる課題なのか、そもそもアプローチとして筋悪なのか、どちらかは現時点では不明だ。

今でもできる他のアプローチがあるのでは?

分からない。

ポンとかブロック崩しとか、既存のゲームのコードをまず提示させて、そこから対話的に新しい要素を加えていく、みたいな方法は今でもうまくいくのかも。その場合、どのくらいの新しさなら許容されるのか、どの程度細切れに指示するのが効率が良いのか、などのプロンプトエンジニアリングが必要そう。

そうやってゲームを作るのが直接コードを書くのに比べて効率良いかと問われると、おそらく悪いので、これは効率性の問題ではなく、ChatGPTを使ってゲームを作るという縛りプレイとしての楽しさを追い求めることになるね。「AIにゲームを作らせるゲーム」という新しいゲームを、旬のうちにいろいろ試したいところだ。