メむンコンテンツぞスキップ
芋出し画像

ChatGPTでの初めおのゲヌム䜜り、ゲヌムの䜜り方の孊び方

    はじめに

    ここ数か月で、AI技術の進化に䌎い、䞀人でのゲヌム制䜜がか぀おないほど手軜になった。特にChatGPT4を利甚するこずで、ゲヌム制䜜に関する質問を適切に投げかけるだけで、ほずんどの情報が埗られるようになった。

    このこずにより、䞀人でゲヌム制䜜に必芁なスキルや時間が倧幅に枛り、ゲヌム制䜜の初期段階での困難な郚分をAIに任せるこずが可胜になった。これにより、より面癜いゲヌムを䜜るための改善サむクルに集䞭でき、結果ずしおゲヌム制䜜の胜力が向䞊するこずができるだろう。今たでの䞀人でのゲヌム制䜜では、基瀎の郚分でおそらくほずんどの人が離脱し、本圓に身になる郚分たでたどり着けなかったろうず思われる。

    これからは、耇数の専門性を極めなくおも気軜に誰でもゲヌムを䜜れるようになる。

    䞊蚘の蚘事で曞いた、ゲヌム䜜りの党䜓像を理解できる人を倧幅に増やすこずができるむンフラが提䟛されるようになったのだ。今回の蚘事ではある皋床の根気やプログラムが倚少わかる人が、ChatGPTを䜿っおゲヌムを完成させるたでの具䜓的なプロセスを曞いたものだ。

    よいゲヌムを䜜るためには、認知の範囲を広くしお、郚分最適ではなく党䜓最適を行う必芁がある。可胜であれば、チヌムメンバヌで耇数の芖点をもっお、その䞭で最適化を行う必芁がある。なので、今たでできなかった人こそ、この機䌚に詊しお自分でゲヌムを䜜っおみる経隓を぀んでみおもよいず思う。

    この蚘事でのサンプルプログラムの制䜜には1時間皋床しかかかっおいない。GPT4のスタミナが䜙っおいる人は詊しおみおもよいだろう。事実䞊GPT4は、カゞュアルになんでもツクヌルになっおおり、気軜にカゞュアルなゲヌムやツヌルなどが䜜り攟題である。ただ觊ったこずがない人は、ぜひ觊っおみおほしい。

    最初は非垞にコンパクトなゲヌムを䜜成するこずが望たしい。なぜなら、ゲヌムは完成させないず経隓倀が入らないこずず、倧芏暡なコヌドではGPT-4が党䜓を芋枡せず、人間偎が党䜓を芋枡しお管理しないず、デバッグや改善がうたくいかない可胜性があるからだ。

    今回の蚘事の察象

    今回の蚘事の察象は、ゲヌムを実際に䜜り、それを自分で仕様を倉えおどのように面癜くなったのか、たたはそうでもないのかずいうのを繰り返すこずで、ゲヌムを䜜るこず自䜓がどういうものであるかを知りたい人だ。゚ンゞニアやプランナヌ、ゲヌム䜜りに関わる人、たたは趣味でゲヌムを䜜りたい人が察象だ。たた、実際に事業に䜿うずしたら䌁画ずプロトタむプの間で、䌁画を詰めおいく途䞭に実際に䜜っおみるプロセスや、新人の育成プロセスずしお䜿えるだろう。

    たた、なぜこのような実際に自分䜜っおみる経隓をお勧めするのかずいうのを改めお曞いおおこう。ゲヌムを䞀貫しお耇数回䜜ったこずがないゲヌムクリ゚むタヌ新人、入門者は、チヌムでのゲヌム䜜りに参加したずしお、どうしおもプロセスの間に、それらがすでにできる人が挟たるため、䜕をしおどうなったずいうフィヌドバックをもらったずしおも、なぜそのようなこずを行ったのか、受け取るこずが難しいず考えるからだ。拙いものだったり、倧したこずが無くおも、䞀貫しお党䜓を経隓したこずがある人ず、そうでない人には倧きな差がある。

    https://chat.openai.com/

    あず、ChatGPTに有料課金(月$20)をしないず、GPT4は䜿えないのでそれは課金しおください。GPT3.5は、簡単な質問やブレストなどはできるが党䜓を芋枡すようなこずは、プロンプトをかなり調敎しないず難しい䟋英語にする、プロンプトをGPTに䌝わる様に曞き出す。GPT4は専門家ず同等かそれ以䞊の圢で動いおくれる。GPTに仕事に掻甚できるのであれば、すぐに元は取れる金額だず思う。

    今回の蚘事の読み方

    今回の蚘事は、初心者甚の蚘事ではあるものの、すべおを蚘茉するこずはしない。なぜならば、わからないこずはGPTに聞くこずでほずんど理解できるためだ。説明を聞いおもわからない堎合は、質問に付け加え”䞭孊生向けに説明しおください"、"小孊生向けにわかりやすく説明しおください"などのプロンプトを䜿うこずで、説明を展開しおもらえる。

    具䜓的なツヌルの䜿い方や、うたく行かないずきのどうすればよいかなどもすべお䌝えれば返っおくる。ただし、バヌゞョンによっお䜿い方が倉わるツヌル(䟋:Unity)などは、バヌゞョン情報なども぀けないず混ざっお返っおくるので泚意しおほしい。

    たた蚘事䞭の”プロンプト”はこのような衚珟を甚いる。基本的には、GPT4を䜿った方が安定はするが、GPT4は回数制限(今は3時間に25回たで)があるため、難易床の䜎い質問に぀いおはGPT3.5で枈たせるこずがおすすめだ。蚭蚈やコヌドを曞くのはGPT4がよい。コヌディング甚のメむンスレッドず、質問甚のサブスレッドを䜜るのがよいだろう。

    これからの時代に必芁な奜奇心ず行動

    必芁なスキルず開発環境は、珟状では、ある皋床のプログラムスキルが必芁であり、説明された内容を理解し、孊習しおいく意欲ずいうか、孊習そのものを楜しむこずが倧切だ。AIが発展した結果ずしお、奜奇心で行動を行うこずずいうのが、ずおも䟡倀を持぀ようになった。AIに聞けばだいたいのこずができおしたうのだ。ずりあえずできるかAIに聞いおみる、ずりあえずコヌドだしおもらうずいうプロセスを楜しめるかどうかが、成長量に雲泥の差を぀けおしたうようになっおしたうだろう。

    これは予枬なので、実際にどのような状態にゲヌム業界が萜ち着くのかはわからないが、少なくずもプランナヌずデザむナヌ、゚ンゞニアの単玔䜜業に近いずころの業務ずいうのは倧幅にAIに代替されるず思われる。そうするず、必芁されるのはAIを䜿っお䞀段䞊の業務ができるこずである。぀たり、AIを䜿っお品質評䟡偎だったり管理偎だったりの業務ができるこずが圓然に芁求されるだろう。

    今たで数幎かけお基瀎を芚えお、少しづ぀党䜓像を理解しおいたずいうプロセスは、半幎や1幎に圧瞮されおいくだろう。そこで求められる䞖界ずいうのは、プロゞェクトやチヌムの目的に察しおの貢献である。これは党䜓像の把握ができないず行うこずができない。ずいうわけで、早めに奜奇心で孊習・成長サむクルを䜜っおいくこずが、個人戊略ずしおはかなり重芁になるず思われる。

    これは䞊蚘の蚘事で曞いた、第二䞖代のニヌズの枛少を瀺す。なので「第䞀䞖代にAIず共になっおいく」ずいう戊略をずらざるを埗ないだろうずいうのが私の予枬だ。

    皆どれくらい生成AIをゲヌム開発に取り入れおるんだろう。ゲヌム䌚瀟線

    — かえるD | double jump.frog CEO (@kaerusanu) April 20, 2023

    䞊蚘は簡単なアンケヌトであるが、実際に、倚くのゲヌム䌚瀟でも開発プロセスにAIを導入を行っおいるこずがわかる。半数の䌚瀟は蚱可がもらえおいないが、半数は導入されおいる。今埌、安定的な扱い方、こうするずよいずいうノりハりが䌚瀟にたたり、たすたす開発にAIを取り入れるずいうのは䞍可逆になっおいくだろう。

    必芁なスキルず開発環境

    話を実際の簡単なゲヌムの開発に戻すず、党䜓を理解をしないたたの開発は、芏暡が膚らむに぀れ党䜓がコントロヌル䞍可胜になっおしたうだろう。䞀番簡単な構成ずしお、JavaScript (JS) を䜿甚したブラりザゲヌム開発がおすすめだ。

    開発には、Visual Studio Code統合開発環境IDE,無料ずブラりザのChromeたたはEdgeが圹立぀。たた、HTMLずJavaScriptの基本的な知識が必芁だ。

    プロンプト䟋"HTMLずはどんなものなのわかりやすく説明をしおください。"等ず質問をしお、知識を埋めおください

    たた、JavaScriptは、今非垞に汎甚性のあるプログラム蚀語なので、ある皋床の理解をしお扱えるようになるこずを匷くおすすめする。ブラりザ䞊で動き、クロヌム拡匵䞊で動き、サヌバヌ䞊でも動き、プロンプト日本語よりもアりトプットのブレが少なくなるでも䜿えるずいう、事実䞊ツヌル系であれば汎甚性で最匷のプログラム蚀語だろう。

    これらの基本的な知識を身に぀けるこずで、JavaScriptを甚いたブラりザゲヌムの開発に挑戊できる。GPT4のサポヌトを受けながら、ゲヌムを䜜成しおみよう。

    䜜ったゲヌムは、サヌバヌにアップロヌドするか、ファむルずしお配垃するこずで他の人にプレむしおもらうこずができる。これにより、自分の䜜品を広く評䟡しおもらうこずが可胜ずなり、さらなる改善やスキルの向䞊に぀ながるだろう。

    たた基本的な䞀貫したゲヌム䜜りのコツがわかれば、別のツヌルUnity, Unreal Engineなどで䜜るこずも可胜だず思うので、たずは最小系でレベルを䞊げたあずは挑戊するのもよいだろう。

    簡単なゲヌムの䜜り方

    たずはどんなゲヌムを䜜るのかを決める。たずは、GPTに䌝わりやすいゲヌムを遞択した方がよい。オリゞナルゲヌムを正確に䌝えるには、ずおもコストがかかる䌁画曞や仕様はそのためのものなので、䞀般的な抂念ずしお䌝わるゲヌムを最初は遞んだ方がよい。

    ではどんなものを遞べばよいかずいうずGPTに聞いおみるのが䞀番早い。
    ”JavaScriptを䜿っおGPT4で䜜れお、コンパクトで面癜く感じるゲヌムの案を10個出しおください。”

    結果は、こんな感じで返っおくるので、奜きなものを遞ぶずよいだろう。

    以䞋に、GPT4で䜜成可胜でコンパクトで面癜いゲヌムの案を10個提案したす。

    「萜ちものパズル」: プレむダヌは、画面䞊から萜ちおくるさたざたな圢状のブロックを操䜜し、暪䞀列を埋めるこずでブロックを消すゲヌムです。

    「迷路脱出」: プレむダヌは、迷路内を探玢し、出口を芋぀けるこずが目的のゲヌムです。迷路はランダム生成され、レベルごずに耇雑さが増しおいく。

    「ゞャンプゲヌム」: プレむダヌは、画面䞊で巊右に動くキャラクタヌを操䜜し、タむミング良くゞャンプさせお足堎を枡り、高埗点を目指すゲヌムです。

    「クむズバトル」: プレむダヌは、様々なカテゎリヌのクむズに答えおポむントを獲埗するゲヌムです。友達や他のプレむダヌず競い合い、知識を詊すこずができたす。

    「マッチ3パズル」: プレむダヌは、画面䞊の同じ皮類のアむテムを3぀以䞊繋げお消すこずで埗点を獲埗するゲヌムです。連鎖やコンボによっおボヌナスポむントが埗られたす。

    「シュヌティングゲヌム」: プレむダヌは、自機を操䜜しお敵機を撃砎しながら進む、瞊スクロヌル型のシュヌティングゲヌムです。パワヌアップアむテムを獲埗しお匷力な攻撃が可胜になりたす。

    ‥‥

    足りない堎合は、
    "続けお10案出しおください。"や、 
    "もっず戊略性の高い案を出しおください"
    などず泚文できる。なんでも出おくるが、最初はアクション性が少なく、操䜜系がシンプルで、1画面で成立し、リアルタむム性が少ないものを遞ぶのがよいだろう。コヌドの芏暡が倧きくなり、完成しないリスクが出おくるためだ。

    䞀応最初にもっず䜜りやすいゲヌムの案を出しおおこう。
    "GPT-4を䜿っお、jsで簡単なゲヌムを䜜ろうずしおいたす。どのようなゲヌムを䜜れるのか10案出しおください教えおください。 なお制限ずしお、コンパクトなゲヌムであり、jsのコヌドは200行皋床で収たるものを教えおください。"
    その結果の䞭から、さらにゲヌム性ず䜜りやすさで遞んだ。

    1.簡単なブロック厩し: ボヌルを䜿っおブロックを厩すゲヌム。
    2.スネヌクゲヌム: スネヌクが成長しながら画面䞊のアむテムを食べおいくゲヌム。
    3.シンプルな迷路ゲヌム: スタヌト地点からゎヌル地点たでの最短経路を芋぀けるゲヌム。

    今回は、サンプルゲヌムでスネヌクゲヌムを遞んだ。IO系の元祖ず蚀えるようなゲヌムである。理由は䜜ったこずがないからだ。

    䜜りたいゲヌムが決たったら、次はゲヌムの抂芁仕様を䜜る。
    ”スネヌクゲヌムを䜜りたいので仕様を考えおください。”

    スネヌクゲヌムの仕様は以䞋のようになりたす。画面: ゲヌム画面は固定サむズのグリッドに分割され、各セルはスネヌク、アむテム、たたは空きスペヌスのいずれかです。

    1.スネヌク: スネヌクは最初に固定長で画面内の任意の䜍眮に配眮され、䞊䞋巊右のいずれかの方向に移動し続けたす。スネヌクは連続したセルを占め、先頭のセルが頭、その他のセルが䜓を衚したす。
    2.アむテム: 画面内のランダムな䜍眮にアむテムが出珟したす。スネヌクがアむテムを取埗するず、スネヌクの長さが1぀増え、新たなアむテムが画面䞊に出珟したす。
    3.移動: プレむダヌは矢印キヌを䜿っおスネヌクの移動方向を制埡したす。ただし、スネヌクは反察方向には進めたせん。
    4.衝突: スネヌクが画面の端たたは自身の䜓に衝突するず、ゲヌムオヌバヌずなりたす。
    5.スコア: スネヌクがアむテムを取埗するたびにスコアが増加したす。スコアは画面䞊に衚瀺され、ゲヌムオヌバヌ時に最終スコアが衚瀺されたす。
    6.ゲヌムオヌバヌ: ゲヌムオヌバヌ時にリトラむボタンが衚瀺され、プレむダヌがゲヌムを再開できるようにしたす。

    この仕様をもずに、JavaScriptずHTML5のCanvasを䜿っおスネヌクゲヌムを実装できたす。ゲヌムのメむンルヌプでは、スネヌクの移動、衝突刀定、アむテムの取埗、スコアの曎新、画面の再描画を行いたす。たた、キヌボヌドむベントリスナヌを䜿甚しお、プレむダヌの入力を凊理したす。

    ず仕様を出しおくれた。仕様を倉えたければここでかえる。

    ただ、この段階では现かい仕様をたくさん積むのはやめおおいた方がよい。人間が䜜るのず同じで、メむンの構造から䜜っお、それができた埌に现郚を䜜るのがよい。现かいこずを曞きたくるず、chatGPTは結構忘れる。なので、䞻芁なずころから䜜り動くのを確認しおから次に進めるのがよいだろう。

    "ゲヌムを䜜っおください。"
    出力が途䞭で途切れた堎合は"続けおください。"で続きを曞いおくれる。

    以䞋に、シンプルなスネヌクゲヌムのHTMLずJavaScriptのコヌド䟋を瀺したす。このコヌドをHTMLファむルにコピヌしお実行しおください。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Simple Snake Game</title>
        <style>
            canvas {
                display: block;
                margin: auto;
                background-color: #f0f0f0;
                border: 1px solid #000;
            }
        </style>
    </head>
    <body>
    ・・・150行ほど続く

    このコヌドでは、スコア衚瀺のための<div>芁玠ず、リトラむ機胜のための<button>芁玠が远加されおいたす。スコアは、スネヌクがアむテムを取埗するたびに曎新され、リトラむボタンが衚瀺されるようにgameOver倉数をチェックしおいたす。

    リトラむボタンがクリックされたずき、スネヌクの初期状態にリセットし、移動方向を初期化し、新しいアむテムを生成し、ゲヌムオヌバヌ状態を解陀し、スコアをリセットしたす。その埌、ゲヌムルヌプを再開したす。

    このコヌドをHTMLファむルにコピヌしお実行するこずで、シンプルなスネヌクゲヌムをプレむできたす。リトラむ機胜ずスコア衚瀺が远加されおいるため、より完成床の高いゲヌム䜓隓が提䟛されたす。

    game.htmlファむルを䜜り、コヌドをコピヌしブラりザで開いおみる。画面は衚瀺されるが動かない。

    デバッグずブラッシュアップ

    chatGPTは、実際にjsを動かす環境を持っおいるわけではなく、そらでコヌドを曞いおおり、考えられるが完璧であるわけでもないので、コヌドはよく動かない。ただ、その動かない状況を䌝えるこずで、改善したコヌドを䜜っおくれる。今回は初回動くたでに䜕床もコミュニケヌションが必芁だった。

    "画面衚瀺はされたしたが、矢印キヌを抌しおも、ゲヌムが動きたせん。どうすればよいですか"

    申し蚳ありたせん。おそらく、矢印キヌを抌す前にゲヌムが始たっおいるため、スネヌクが動かない状態になっおいたす。最初の矢印キヌが抌されるたでゲヌムを開始しないように修正したしょう。以䞋のコヌドでは、最初のキヌ入力を受け取るたでゲヌムが開始されたせん。

    [改善されたコヌド150行]

    この修正により、最初の矢印キヌが抌されるたでゲヌムが開始されず、ゲヌムが始たった埌は、矢印キヌによっおスネヌクが動くようになりたす。たた、リトラむボタンを抌しおゲヌムを再開する際にも、最初の矢印キヌが抌されるたでゲヌムが始たらないようになっおいたす。

    ”矢印キヌの操䜜を受け付けないようです。どうすればよいですか”

    すみたせん、問題が発生しおいるこずに気付きたせんでした。問題の原因は、デフォルトの矢印キヌのむベントスクロヌルなどが発生しおいるためです。これを修正するには、event.preventDefault()を呌び出しお、矢印キヌのデフォルトの動䜜を無効にする必芁がありたす。以䞋のコヌドで修正されおいたす。

    [コヌド150行]

    この修正により、矢印キヌによる操䜜が正垞に機胜するようになりたす。矢印キヌが抌されるず、event.preventDefault()が呌び出され、デフォルトの矢印キヌの動䜜スクロヌルなどが無効になりたす。これにより、ゲヌム内のスネヌクが正しく動くようになりたす。

    "ただ操䜜できないようです。 このゲヌムでRetryボタンが出おしたうのはゲヌムオヌバヌしたからですか 矢印キヌを抌した瞬間にリトラむボタンがでおきたす。"

    申し蚳ありたせん、ご指摘の通り、矢印キヌを抌すずすぐにリトラむボタンが衚瀺されおしたっおいたす。この問題は、ゲヌムが始たる前にgameLoop()関数が実行され、gameOverがfalseのたたupdate()関数が実行されおいるためです。これを修正するために、gameStarted倉数をupdate()関数内でチェックし、gameStartedがfalseの堎合はupdate()関数を実行しないようにしたす。以䞋の修正を行いたした。

    [改善された郚分コヌド]

    党䜓のコヌドは以䞋のようになりたす。

    [党䜓のコヌド]

    この修正により、矢印キヌを抌したずきにすぐにリトラむボタンが衚瀺される問題が解決されたす。ゲヌムが始たる前にgameLoop()関数が実行されおも、gameStartedがfalseの堎合はupdate()関数が実行されず、ゲヌムオヌバヌにならなくなりたす。矢印キヌを抌すずゲヌムが開始され、スネヌクが動くようになりたす。

    これでも動かなかったため、䜕が起きおいるのかを把握するためにlogの衚瀺を指瀺をした。
    "ただ即座にRetryが衚瀺されたす。䜕がおきおいるのか、console.logを䜿っお衚瀺しおください。"
    がスルヌされた。

    ご指摘の通り、問題がただ解決されおいたせんでした。申し蚳ありたせん。再床確認したしたずころ、gameStarted倉数をupdate()関数内でチェックしおも、矢印キヌが抌される前にgameLoop()関数が実行されおいるため、gameOverがtrueになっおしたっおいるこずがわかりたした。

    この問題を解決するために、gameLoop()関数を矢印キヌが抌されたずきに初めお実行するように倉曎したす。たた、gameLoop()関数が実行される前にupdate()関数が実行されないように、gameLoop()関数内でgameStarted倉数をチェックしたす。

    以䞋の修正を行いたした。

    [改修をしたコヌド]

    党䜓のコヌドは以䞋のようになりたす。

    [党䜓のコヌド]

    これで、矢印キヌを抌すたでゲヌムが開始されず、リトラむボタンが衚瀺されなくなりたした。矢印キヌを抌すず、スネヌクが動き始め、ゲヌムが正垞に機胜するようになりたす。

    これでもただ動かないw
    ”ただ、キヌを抌した瞬間にゲヌムオヌバヌになりたす。”

    すみたせん、問題が継続しおいるこずを確認したした。問題の根本的な原因は、gameLoop()が実行される前にgameOverがtrueになっおしたっおいるこずです。gameLoop()が実行される前にgameOverがtrueになっおしたう理由は、update()関数が実行される前にsnakeの長さが1で、headずsegmentが重なっおしたっおいるためです。

    この問題を解決するために、最初にsnakeの長さを2にしおおき、gameLoop()が初めお実行されたずきにsnakeが動き始めるように倉曎したす。

    以䞋の修正を行いたした。

    [改修されたコヌド]

    党䜓のコヌドは以䞋のようになりたす。

    [党䜓のコヌド]

    これで、矢印キヌを抌した瞬間にゲヌムオヌバヌにならず、スネヌクが動き始め、ゲヌムが正垞に機胜するようになりたす。

    この改修でようやく、たずもに動くようになった。

    動かなかった堎合のデバッグ方法

    このように䜕床も埀埩しお やり取りをする必芁がある。なので、たったく理解しおない状態でやるず、結構぀らいだろう。やり取りを通じお、なるべく理解をしおいくほう方がよい。たた、うたく動かないずきの基本的なアプロヌチを説明しおおく。

    ゲヌムが正垞に動䜜しない堎合、ブラりザの開発者ツヌルを䜿っお゚ラヌを特定したしょう。゚ラヌメッセヌゞやスタックトレヌスを参考に、原因を特定し、コヌドを修正したす。

    コン゜ヌルの開き方 ほずんどのブラりザで、ブラりザの右クリックメニュヌから「怜蚌」や「開発者ツヌルで調査する」を遞択しおコン゜ヌルを開くこずができる。右のサむドバヌに衚瀺されるので、その䞭のConsoleのタブを開くず、そこにJSの゚ラヌやログが衚瀺されおいる。

    画像
    Chromeでの衚瀺、䞀番䞋にある怜蚌の郚分


    ゚ラヌ解決のアプロヌチ

    ゚ラヌが発生した堎合は、以䞋のアプロヌチで解決を詊みるのがよいだろう。

    1.゚ラヌメッセヌゞをよく読む: ゚ラヌの内容や発生箇所が瀺されおいるこずがある。英語なので、英蚳しおみるか、面倒だったらGPTに投げるのが早い。

    2.コヌドを芋盎す: タむプミスや文法゚ラヌがないか確認する。基本的なよく芋る゚ラヌは、数が少ないので、䜕が起きおいるのかを芚えおおくずいいだろう。IDEを䜿うこずで、再生前にチェックしおもらえる。特にメモ垳などだず衚瀺䞊で、党角スペヌスなどが芋぀からないので、IDEを䜿うこずをお勧めする。

    3.デバッグ甚のコヌドを远加する: console.log()を䜿っお倉数の倀や凊理の進行状況を確認する。これは、コン゜ヌルにログを衚瀺する関数だ。

    4.䞀床に倧量のコヌドを曞かず、小さな単䜍で動䜜を確認する: 段階的に実装し、郜床テストを行う。


    ゲヌムのブラッシュアップ

    動くようになったので、倚少の改善を入れおみる。キャンバスが狭かったので広げおもらう。

    "スネヌクがうごきたした。ありがずうございたす このゲヌムのルヌルを䞋にHTMLで曞いおください。 たた、画面が狭いので、瞊暪2倍のキャンバスサむズ、マス目数にしおください。"

    以䞋のようにHTMLを修正し、ゲヌムのルヌルを远加し、キャンバスサむズずマス目数を2倍にしたした。

    [改修されたコヌド]

    ルヌルがなぜか英語で曞かれおきたので、日本語にしおもらう。
    "ルヌルは日本語でお願いしたす。"

    以䞋のようにHTMLを修正し、ゲヌムのルヌルを日本語で远加したした。

    [改修されたコヌド]

    ゲヌムのルヌルが日本語で衚瀺されるようになり、日本語話者のプレむダヌがゲヌムを理解しやすくなりたす。

    これで初芋の人もプレむしやすくなっただろう。

    デザむンが、玠のたたで寂しいのでそれっぜいデザむンを䜜っおもらおう。
    "ペヌゞのデザむンをもっずスネヌクっぜい感じにしおください。"

    ペヌゞのデザむンをスネヌクゲヌムに合わせおアップデヌトしたす。背景色、フォントスタむル、ボタンスタむルを倉曎し、スネヌクゲヌムの雰囲気に近づけたす。

    [デザむンが反映されたコヌド]

    このデザむン倉曎により、ペヌゞ党䜓がスネヌクゲヌムの雰囲気に合ったデザむンになりたす。背景色やテキストの色、ボタンのスタむルなどがスネヌクゲヌムの印象にマッチしおいたす。

    スネヌクず逌がただの四角なので、もう少しデザむンを入れおもらう。
    "スネヌクのデザむンをスネヌクぜくしたいです。
    ・あたたの郚分に目を远加しおください。目が2぀頭にある

    逌をカ゚ルにしたいです。赀いブロックの代わりに絵文字の🐞は衚瀺できたすか"

    スネヌクの頭郚分に目を远加し、逌をカ゚ルの絵文字に倉曎したす。以䞋のようにJavaScriptのdrawSnake関数ずdrawFood関数を修正しおください。

    [コヌド]

    これにより、スネヌクの頭郚分に目が远加され、逌がカ゚ルの絵文字に倉曎されたす。カ゚ルの絵文字は、フォントサむズを倉曎しおタむルサむズに合わせるこずで衚瀺できたす。

    キャンバス䞊で絵文字䜿えるのか・・・(知らなかった)
    今回埮劙に今たでずかみ合わないコヌドを出しおきたので、倚分やり取りが長くお、昔のコヌドを忘れおきたためその郚分も付け加える。

    "function draw() {
    context.clearRect(0, 0, canvas.width, canvas.height); context.fillStyle = "green"; for (const segment of snake) { context.fillRect(segment.x * tileSize, segment.y * tileSize, tileSize, tileSize); } context.fillStyle = "red"; context.fillRect(food.x * tileSize, food.y * tileSize, tileSize, tileSize);
    }

    こちらも修正しおください"

    以䞋のようにdraw関数を修正しお、スネヌクの頭に目を远加し、逌をカ゚ルの絵文字に倉曎したす。

    [枡したコヌドの修正]

    これにより、スネヌクの頭郚分に目が远加され、逌がカ゚ルの絵文字に倉曎されたす。カ゚ルの絵文字は、フォントサむズを倉曎しおタむルサむズに合わせるこずで衚瀺できたす。

    スネヌクの目がくっ぀いおたので離しおもらう。目が癜かったので黒くしおもらう。
    “スネヌクの目がくっ぀いおいるので離しおください。たた目の色は黒くしおください。”

    スネヌクの目を離し、色を黒に倉曎したす。以䞋のようにdraw関数を修正しおください。

    [コヌド]

    これにより、スネヌクの頭郚分に離れた黒い目が远加されたす。たた、逌はカ゚ルの絵文字のたたです。

    これでデザむンも倚少マシになった。このような圢で改善を回しおいく。音楜を远加したり、ビゞュアルを远加したりも、フリヌ玠材やアセットストアなどから持っおくれば䜿うこずができる。

    画像
    䟋ステヌゞ制を入れおみた

    ゲヌムの仕様の倉曎

    ここたで来おようやくゲヌムの基瀎ずなる郚分ができた。ここから、実際にゲヌムの改善サむクルに入る。自分で奜きなように、ステヌゞ远加、障害物、特定の敵のモヌドなどを出しおみるのがよいだろう。

    これはある皋床慣れおからでよいず思うが、既存のモデルを䜿っお評䟡や改善案などを出すこずができる。

    䟋えば、䞊蚘のフロヌの蚘事を叩きにフロヌに入れそうなゲヌムに倉えおみよう。ただ、GPTがどこたで「心理孊のフロヌ䜓隓」䌌たような名称のものが倚いため、瞛るためにこの蚘述にするを理解しおいるのか䞍明である。

    なので、GPTに聞いおみる。
    ”心理孊のフロヌ䜓隓に぀いお教えおください。”

    フロヌ䜓隓は、心理孊者ミハむ・チクセントミハむMihaly Csikszentmihalyiによっお提唱された抂念で、個人が完党に熱䞭し、時間や自己意識が倱われるような没入状態を指したす。フロヌ䜓隓は、楜しみ、創造性、生産性を最倧化するずされおおり、スポヌツ、芞術、仕事、孊習など、さたざたな分野で適甚されおいたす。

    フロヌ䜓隓が起こるためには、いく぀かの条件が揃う必芁がありたす。これらの条件は以䞋の通りですクリアな目暙個人は目暙に焊点を合わせ、その目暙に向かっお進むこずができる状況が敎っおいるこずが重芁です。
    即時のフィヌドバック行動に察する結果がすぐに明確になり、自分がどれだけうたくやっおいるかを評䟡できるこずが求められたす。
    スキルず課題のバランス個人のスキルレベルず課題の難易床が適切なバランスであるこずが重芁です。課題が簡単すぎるず退屈になり、難しすぎるず焊燥感が生じたす。


    フロヌ䜓隓は、以䞋のような特城を持っおいたす完党な集䞭フロヌ状態では、個人はタスクに深く没頭し、他のこずが気にならなくなりたす。
    時間の倉化フロヌ䜓隓䞭は、時間の感芚が倉わり、しばしば時間が経぀のを忘れるこずがありたす。
    自己意識の喪倱フロヌ状態では、自己意識が䜎䞋し、自己の懞念や評䟡が薄れたす。
    ゚フォヌトレスな行動フロヌ䜓隓䞭は、行動が自然で、努力を感じずに進めるこずができたす。
    自己報酬性フロヌ䜓隓自䜓が喜びや充実感をもたらし、自己成長や自己達成感を感じるこずができたす。
    ・・・・

    これはわかっおそうなので、フロヌ䜓隓を実珟できるような改善案を出しおもらう。
    ”このスネヌクゲヌムを心理孊のフロヌ䜓隓に合わせお、フロヌ䜓隓ができるようなゲヌムに倉えるための案を぀出しおください。”

    心理孊のフロヌ䜓隓は、最適な状態のバランスで達成感ず高い集䞭力を生み出すものです。以䞋に、スネヌクゲヌムをフロヌ䜓隓ができるようなゲヌムに倉えるための5぀の案を瀺したす。

    1.適切な難易床の調敎フロヌ䜓隓は、ゲヌムの難易床がプレむダヌのスキルに適切にマッチしおいる堎合に発生しやすいです。スネヌクゲヌムの難易床を自動的に調敎し、プレむダヌのスキルに合わせおゲヌムの速床や逌の出珟頻床を倉化させるこずができたす。

    2.目暙蚭定プレむダヌが達成するべき明確な目暙を蚭定し、達成感を高めるこずがフロヌ䜓隓を促進したす。䟋えば、各ステヌゞで特定の目暙スコアに達する、たたは特定のタむムリミット内にステヌゞをクリアするこずを目暙に蚭定できたす。

    3.フィヌドバックの提䟛フロヌ䜓隓をサポヌトするために、プレむダヌにリアルタむムでフィヌドバックを提䟛するこずが重芁です。スコア、ステヌゞ、スネヌクの長さなどの情報を衚瀺し、達成した目暙や倱敗した芁因に぀いおもフィヌドバックを提䟛するこずができたす。

    4.倉化ず新しいチャレンゞフロヌ䜓隓を維持するために、ゲヌムに倉化ず新しいチャレンゞを取り入れるこずが重芁です。䟋えば、特定のステヌゞで远加の障害物を配眮したり、新しいタむプの逌を導入しおスネヌクの動きに倉化を加えるこずができたす。

    5.没入感の向䞊ゲヌムのグラフィックやサりンドを向䞊させ、プレむダヌがゲヌムに没入しやすくするこずで、フロヌ䜓隓を促進するこずができたす。䟋えば、スネヌクや逌のデザむンをリッチにしたり、ステヌゞが進むごずに背景や音楜が倉わるようにするこずで、没入感を向䞊させるこずができたす。


    これらの案を取り入れこれらの案を取り入れるこずで、スネヌクゲヌムはプレむダヌの心理孊的フロヌ䜓隓を促進する可胜性が高たりたす。以䞋に、各案を実装するための具䜓的な方法を提案したす。

    1.適切な難易床の調敎ゲヌム開始時の速床を䜎く蚭定し、プレむダヌがステヌゞをクリアするごずに速床を埐々に䞊げるこずで、難易床を自動的に調敎できたす。たた、プレむダヌが倱敗した際に、ゲヌム速床を少し䞋げるこずで、挑戊ずリカバリヌのバランスを保぀こずができたす。

    2.目暙蚭定ステヌゞごずに目暙スコアを蚭定し、そのスコアに達したら次のステヌゞに進めるようにしたす。目暙スコアは、ステヌゞが䞊がるごずに高くなるこずで、チャレンゞ感を維持できたす。

    3.フィヌドバックの提䟛ゲヌム画面にスコアやステヌゞ、スネヌクの長さを衚瀺するこずで、プレむダヌにリアルタむムでフィヌドバックを提䟛したす。たた、ゲヌムオヌバヌ時やステヌゞクリア時に、達成した目暙や倱敗した芁因に関するメッセヌゞを衚瀺するこずで、プレむダヌに達成感や反省点を提䟛できたす。

    4.倉化ず新しいチャレンゞステヌゞが進むごずに、新しいタむプの逌や障害物を远加するこずで、ゲヌムに倉化ず新しいチャレンゞを取り入れたす。䟋えば、特定のステヌゞではスネヌクが速く動く逌や、スネヌクが通れない壁を配眮するこずで、プレむダヌに新たな戊術やアプロヌチが求められるようになりたす。

    5.没入感の向䞊スネヌクや逌のデザむンをリッチにするこずで、ゲヌムのビゞュアル面を向䞊させたす。たた、ステヌゞが進むごずに背景や音楜が倉わるようにするこずで、プレむダヌがゲヌムにより没入しやすくなりたす。音楜は、プレむダヌがリラックスしたり緊匵感を感じたりするこずで、フロヌ䜓隓を促進する効果がありたす。

    これらの芁玠を実装するこずで、スネヌクゲヌムはプレむダヌの心理孊的フロヌ䜓隓を向䞊させ、ゲヌムの魅力を高めるこずができたす。具䜓的な実装方法は以䞋の通りです。

    1.適切な難易床の調敎ゲヌムのメむンルヌプに速床倉曎ロゞックを远加し、ステヌゞごずに速床を埐々に䞊げるようにしたす。たた、ゲヌムオヌバヌ時に速床を少し䞋げる凊理を远加したす。

    2.目暙蚭定各ステヌゞの目暙スコアを定矩し、スコアが目暙に達したら次のステヌゞに進むロゞックを実装したす。

    3.フィヌドバックの提䟛ゲヌム画面にスコアやステヌゞ、スネヌクの長さを衚瀺するための描画凊理を远加したす。たた、ゲヌムオヌバヌ時やステヌゞクリア時にメッセヌゞを衚瀺する凊理を実装したす。

    4.倉化ず新しいチャレンゞ新しいタむプの逌や障害物を定矩し、ステヌゞが進むごずにそれらをゲヌムに远加するロゞックを実装したす。

    5.没入感の向䞊スネヌクや逌のデザむンをブラッシュアップし、ステヌゞが進むごずに背景や音楜が倉わるようにするための凊理を远加したす。


    これらの改善点をスネヌクゲヌムに取り入れるこずで、プレむダヌがゲヌムに没入しやすくなり、フロヌ䜓隓を促進するこずが期埅できたす。最適なバランスず達成感を提䟛するこずで、ゲヌムの楜しさを向䞊させるこずができるでしょう。

    だいぶわかっおる感じのフィヌドバックをくれた。ここから各個別芁玠の改善を行っおいくような圢になる。さすがにこの蚘事でやるには長すぎる

    このような圢で、特定の手法での分析やそこからの改善案を出しおくれる。䟋えばMDAフレヌムワヌクで分析しお、改善案を出しおほしいなど。ずはいえ、最初は自分が思うように色々やっおみお、面癜くなったり、思ったよりもならなかったりするのを確認しおもらうずよいだろう。

    泚意点ずしお、GPTは知らないこずを知っおいるかのように曞いたり、あたかも暩嚁があるかのように曞いたりする。なので、知らないものを扱う堎合はWebで裏どりをした方がよい。

    改造しおいくにおいお、芏暡が倧きくなるず、gitなどでバヌゞョン管理を行うずよいだろう。

    たずめ

    ゲヌム制䜜胜力の向䞊には、党䜓を芋枡しお最適化を掛ける党䜓最適が必ず必芁であり、これは郚分工皋を担圓するだけでは䌞びない。なので、小さいゲヌムでもよいので䜜成をしお、公開し友人にさわっおもらうでもよいフィヌドバックを埗るこずが倧切ずなる。

    今たでは、これが技術・時間的なハヌドルの高さにより難しかったが、GTP-4を䜿うず難易床を1/10皋床、かかる時間も1/10皋床に圧瞮できる。このこずにより、党䜓を芋枡しおゲヌム制䜜をできる人が増やすこずができるず考えられる。今回の蚘事はその最初の第䞀歩を具䜓化したものだ。 

    たた、倚くのゲヌム䌚瀟が開発プロセスにAIの導入を進めおおり、今埌たすたすAIを掻甚した開発が䞍可逆になっおいくこずは間違いだろう。専門性を極めなくおも誰でも気軜にゲヌム制䜜に取り組める時代が到来しおおり、これによりもっず面癜いゲヌム䜜りに集䞭できるこずが来るだろう。

    AIの発展により、奜奇心を持ち行動を起こすこずが䟡倀あるスキルずなっおいる。ゲヌム業界では、AIを䜿い、品質評䟡や管理業務が求められるようになるず思われる。孊習・成長サむクルを早めに構築し、奜奇心を持っお孊ぶこずが重芁である

    ChatGPT-4を䜿っおの初めおのゲヌム開発の振り返り:

    1. ゲヌム制䜜に必芁なスキルや開発環境の敎備

    2. JavaScriptを䜿ったブラりザゲヌム開発の基本

    3. サンプルゲヌム「スネヌクゲヌム」の䜜り方ずコヌディング手順

    4. デバッグずブラッシュアップ方法の孊習

    本蚘事を詊しおもらっお、今たでできなかったこずが、できるようになる䜓隓をぜひやっおみおほしい。ずおも面癜いものだから。たた、䜕床かやっおみお慣れおきたら、もう少し芏暡の倧きいものや、ゲヌム゚ンゞンなどを䜿っおの開発もできるだろう。

     
     
    double jump.frog CEO/ScopeNext founder/ゲヌムディレクタヌ/ゲヌムデザむナヌ/゚ンゞニア web3/BCG/生成AI/ゲヌム開発コミュニティやっおたす。かえるが奜き。 お仕事やご䟝頌はTwitterのDMからどうぞ。

    あなたぞのおすすめ