非エンジニアがChatGPTでゲームを作ってみた

イントロダクション

自社の課題を解決するチャットボットをお探しですか?
FirstContactならあなたの課題に合わせたオーダーメイドチャットボットが作れます!
⇒「FirstContact」の資料を見てみる

ChatGPTに0からゲームを作ってもらうとどうなる?
知見がなくても、ChatGPTでゲームが作れるって本当?

こんにちは、バイタリフィでディレクターをしている岡澤と申します。

突然ですがみなさんは「ChatGPTでゲームが作れる」という話を聞いたことはありますか?

噂で聞いたことはあるが、実際作れるのかは不明…

という方も多いのではないでしょうか。

そこで本記事では、ゲーム制作知識0の非エンジニアである僕がこの噂を検証。
ChatGPTで簡易的なゲームが作れるかどうか」を試していきます

ChatGPTの活用事例に興味ある方はぜひ最後までご一読ください。

※なお、本記事はGPT3.5を用いて作成しています。

執筆者プロフィール
名前:岡澤(株式会社バイタリフィディレクター )
経歴:半導体製造のプロセスエンジニアとして勤務した後、バイタリフィへジョイン。ゲーム制作知識0の非エンジニア。

 

「チャットボットの導入を検討しているけど、実際に触ってみてから考えたい…」というあなたへ
⇒FirstContactを“20日間無料”で試してみる

ChatGPTとは?

まずは今回の主役である「ChatGPTとは何か?」

そもそも理解ができていないという方は、ChatGPTの基礎を学べる記事をご一読ください。

⇒ChatGPTのお役立ち資料を無料でダウンロードする

【本題】ChatGPTを用いてゲームを作ってみた

今回本記事では、以下流れでゲーム制作をしていきます。

  • 手順①ゲーム制作におすすめの言語をChatGPTに聞いてみる
  • 手順②教えてもらった言語をもとに、どんなゲームが作れるのか?ChatGPTに聞いてみる
  • 手順③教えてもらったゲームは本当に作れるのか?ChatGPTに聞いてみる
  • 手順④ゲーム制作着手、まずはChatGPTの指示通りに作業環境を用意してみる
  • 手順⑤ゲーム制作本番、ChatGPTの指示通りにゲームを作ってみる
  • 手順⑥ゲーム完成、ちゃんとできているか?確認する
  • 手順⑦ゲームを楽しむ

では、実際に検証していきます。

手順①ゲーム制作におすすめの言語をChatGPTに聞いてみる

まず最初の手順は、ChatGPTの条件を決めるところから始めます。

条件を決めずに進めると、制作に何年もかかるような大規模なテーマを提案される可能性があります。こうなるといつまで経ってもゲームが完成しない恐れがあるので…まずはしっかり条件を固めることが大切です。

ということで、早速条件を決めていきます。

今回は素人ながらに考えついた「言語」で条件を設定していきます。

どんな言語で作成したらいいのか?教えてChatGPTさん!

複数の言語が返ってきました。

今回は簡易的なゲームを作成することを目標としているため、ChatGPTの回答を参考に「Python」を選んでいきます。

手順②教えてもらった言語をもとに、どんなゲームが作れるのか?ChatGPTに聞いてみる

では次は、どんなゲームが作れるのか?

手順①を踏まえてChatGPTに聞いていきます。

教えてChatGPTさん!

タイピングゲーム、マインスイーパー、ブロック崩し、ジャンプゲームといった回答が返ってきました。

僕にとってはどれも懐かしく面白いゲームです。

そしてこの中だと「マインスイーパー」の名前は知っていますが、ルールは詳しく知りません。

マインスイーパーとは、Microsoft Windowsに最初にバンドルされた、ボード上のマインを避けながら、地雷のないすべてのマスを開示するパズルゲーム…

つまり、マス目を開いていき地雷以外の全てのマスを開くことができるとクリア。逆に地雷を開いてしまうとゲームオーバーになる”パズルゲーム”。ということですね。

なるほど、内容は理解できました!

手順③教えてもらったゲームは本当に作れるのか?ChatGPTに聞いてみる

手順①②を経て現時点で濃厚なのは「Pythonでマインスイーパーを作成する」です。

しかしそもそも、本当に作れるのか?

コードまで教えてくれたら作れる可能性が高いため、ChatGPTに確認していきます。教えてChatGPTさん!

↓出てきたコードはこちら

import random
import tkinter as tk

class MineSweeper:
    def __init__(self, master, size=10, bombs=10):
        self.master = master
        self.size = size
        self.bombs = bombs
        self.buttons = []
        self.board = []
        self.flags = 0
        self.create_board()
        self.create_gui()

    def create_board(self):
        self.board = [[0 for _ in range(self.size)] for _ in range(self.size)]
        bombs_placed = 0
        while bombs_placed < self.bombs:
            x = random.randint(0, self.size-1)
            y = random.randint(0, self.size-1)
            if self.board[x][y] != 9:
                self.board[x][y] = 9
                bombs_placed += 1
        for i in range(self.size):
            for j in range(self.size):
                if self.board[i][j] != 9:
                    bomb_count = 0
                    for a in range(-1, 2):
                        for b in range(-1, 2):
                            if 0 <= i+a < self.size and 0 <= j+b < self.size and self.board[i+a][j+b] == 9:
                                bomb_count += 1
                    self.board[i][j] = bomb_count

    def create_gui(self):
        self.master.title("Minesweeper")
        for i in range(self.size):
            row = []
            for j in range(self.size):
                button = tk.Button(self.master, width=2, font=("Arial", 10), bg="#c0c0c0", command=lambda i=i, j=j:self.on_click(i, j))
                button.grid(row=i, column=j)
                row.append(button)
            self.buttons.append(row)

    def on_click(self, i, j):
        if self.board[i][j] == 9:
            self.buttons[i][j].config(bg="red", text="*", relief="sunken", state="disabled")
            self.game_over()
        elif self.board[i][j] == 0:
            self.flood_fill(i, j)
        else:
            self.buttons[i][j].config(text=self.board[i][j], relief="sunken", state="disabled")
        self.check_win()

    def flood_fill(self, i, j):
        if 0 <= i < self.size and 0 <= j < self.size and self.buttons[i][j]["state"] != "disabled":
            self.buttons[i][j].config(text=self.board[i][j], relief="sunken", state="disabled")
            if self.board[i][j] == 0:
                for a in range(-1, 2):
                    for b in range(-1, 2):
                        self.flood_fill(i+a, j+b)

    def game_over(self):
        for i in range(self.size):
            for j in range(self.size):
                if self.board[i][j] == 9:
                    self.buttons[i][j].config(text="*", state="disabled")
                else:
                    self.buttons[i][j].config(state="disabled")

    def check_win(self):
        total_flags = 0
        for i in range(self

なんとかコードが出てきました。

しかし「self…」以降、中途半端に回答が終わっています。

この続きも回答してもらいましょう。

↓出てきたコードはこちら

 for i in range(self.size):
            for j in range(self.size):
                if self.buttons[i][j]["state"] == "disabled":
                    total_flags += 1
        if total_flags == self.size*self.size:
            self.game_over()
            self.master.title("Minesweeper - You win!")
            messagebox.showinfo("Game Over", "You win!")
        elif total_flags == self.bombs:
            self.master.title(f"Minesweeper - {total_flags}/{self.bombs} flags")
            messagebox.showinfo("Flagged Mines", f"You have flagged all {total_flags} mines!")
        else:
            self.master.title(f"Minesweeper - {total_flags}/{self.bombs} flags")

    def toggle_flag(self, i, j):
        if self.buttons[i][j]["text"] == "F":
            self.buttons[i][j].config(text="", bg="#c0c0c0")
            self.flags -= 1
        else:
            self.buttons[i][j].config(text="F", bg="yellow")
            self.flags += 1
        self.check_win()

    def on_right_click(self, event, i, j):
        self.toggle_flag(i, j)
        return "break"

続きの内容をしっかり教えてくれました(しかも、コードの詳しい説明つきで)。

手順④ゲーム制作着手、まずはChatGPTの指示通りに作業環境を用意してみる

「手順③で出てきたコードを使えば、マインスイーパーを作れるはず」

しかし、どこにどうやってコードを書けばいいのか?

ということで、ChatGPTに作業環境も聞いてみます

作業環境の入手方法付きで、しっかり回答してくれました。

では実際にインストールしていきます。

1,Pythonの公式ページからダウンロード

2,統合開発環境のVScodeをダウンロードし、pythonライブラリと日本語化ライブラリのダウンロード

インストール無事終了。

(エンジニアみたいな画面が出てきました…笑)

手順⑤ゲーム制作本番、ChatGPTの指示通りにゲームを作ってみる

作業環境を用意できたところで、次はChatGPTが教えてくれたコードを貼り付けていきます。

しかし、実行しても動きません。

よく見るとエラーメッセージが2つ出ているみたいです。

読み方はよくわかりませんが、おそらく79・82行目の「messagebox」が定義されていない様子。

使えないということか?

一抹の不安がよぎります。

とりあえずこの部分を直せるか?ChatGPTに聞いてみることにしました。

※コードは省略します

出てきた回答結果はこちら↓

※コードは省略します

違いを探してみると最初の方に「import」の行が追加されています。

では、追加してから実行‥‥

(あれ?)

エラーコードが出ていないにも関わらず、マインスイーパーの画面が出てきません。

間違ってはいないけど、GUIを表示するコードが足りないということなのか?

ChatGPTに再度確認してみた結果…↓

※コードは省略します
※コードは省略します

「最後に追加で3行入力すれば表示される」という回答を得られました。

では、追加して実行してみましょう。

マインスイーパーの画面登場

お!できました!成功です!

何度かエラー対応はありましたが、言語の設定からコードの生成、作業環境の用意までChatGPTの指導の下ゲームを作ることができました。

これで「ChatGPTでゲームが作れる」という噂は正しいと分かりました

手順⑥ゲーム完成、ちゃんとできているか?確認する

「ゲームができたら遊んでみよう!」ということで、実際に遊んでクリアしてみます。

クリア後の画面もしっかり用意されています。

OKを押してみます。

なるほど。

爆弾の場所が*で表示されており、答え合わせができるようになっているみたいです。

(あれ? )

最後に触ったマスは爆弾マークのはず…

これはもしかしたら

負けたのに「YouWin!」と表示されてしまっている様子です。

これは、直さないといけないですね、直して!ChatGPTさん!

※コードは省略

コードを省略して帰ってくるようになりました。

追加されたところを入力して実行してみます。

問題なく表示はされました。

ではさっきの検証を行うべく、負けてみます。

ちゃんと負け画面になりました。

OKを押してみます。

(あれ?)

負けても「You Win!」が表示される問題は直っていない様子です。

マインスイーパーを完成させるには勝った時は勝利画面・負けた時は負け画面が出てくるように修正してもらう必要があります

ということで、

ChatGPTに直してもらいます。

※コードは省略

しっかり修正箇所を教えてくれました。やはり質問の仕方も大事みたいです。

(最初から修正箇所のみを聞いてればよかったですね…笑)

手順⑦ゲームを楽しむ

では、先程ChatGPTから教えてもらった修正を実行してみます。

問題なく実行できました。

では負けてみましょう。

(最後の検証になることを祈って)

ここまでは問題ないです。

OKを押してみます。

ついに勝利画面が表示されなくなりました!

成功です!

では逆に、勝利画面もみてみます。

ちゃんと表示されました。

これでOKを押して答え合わせができたら完成です。

完成しました!

まだ、改善の余地はたくさんありますが簡易的なマインスイーパーのゲームを制作することができました。

最後に

いかがだったでしょうか?

ほぼ全ての流れはChatGPTで作成できることがわかりました。

ChatGPTが100パーセントの回答を返してくれる訳ではありませんが、作り手がアシストすることにより正解へと近づいて行くこともわかりました。

今回は作成することを目的とした為、実際のコードはどんな意味なのか?なぜ動作するのか?は深掘りしませんでしたが、そのわからない点もChatGPTを使うことによって言語学習も同時に進めることができるようになると思われます。

ぜひ皆さんもChatGPTを活用してアプリを作ってみてはいかがでしょうか?

CVR向上・改善におすすめのAIチャットボット!

では最後にはじめてチャットボットを触る方にもおすすめのAIチャットボットを紹介させていただきます。近年話題のChatGPTとの連携プランも完備されているAIチャットボットです。ぜひチェックしてみてください。

AIチャットボット「FirstContact」
名称FirstContact
運営会社Web制作やアプリ開発事業を行う
株式会社バイタリフィ
初期費用無料
月額費用有人対応プラン:2,980円
AI自動応答プラン:15,000円~
特徴操作しやすい管理画面。LINEやFacebook、Chatworkなど、様々な外部ツールとの連携可。AIチャットボットサービスの中でも低コストで導入しやすい。機械学習の代行やレクチャー、外部システムとの連携開発もオプションで対応可。

FirstContactのサービス資料を請求する

おすすめポイント

FirstContactのおすすめポイントをご紹介させていただきます。

1. AIチャットボットなのに導入しやすい価格帯

市場に出回るAIチャットボットの費用が初期費用、月額費用共に高値がついている中、弊社提供中のAIチャットボット「FirstContact」は初期費用0円、月額1.5万円からご利用いただくことが可能です。AIチャットボットを使ってみたいけど、費用面が懸念で…という方にもご安心してご利用いただけます。

FirstContactの費用・料金・コスト

FirstContactのサービス資料を請求する

2. 手厚いサポート体制のご提供

FirstContactは、低コストで導入できるだけでなくサポート体制も充実しています。導入後に結果が出せるよう、専属チームを設置。課題解決への最適な提案を行わせていただきます。

チャットボットのサポート

FirstContactのサービス資料を請求する

3. 難易度の高いシナリオ構築を簡単に行える充実の機能

FirstContactは、はじめての導入時に高いハードルを感じがちなシナリオ作成もExcelで行うことが可能です。使い馴染みのあるExcelを利用することで、シナリオ入力が簡単に行えたり、シナリオの一連の流れが分かりやすく可視化されたりするので、はじめての方でもご安心してご利用いただけます(Excelは用途にあわせて複数のテンプレートもご用意しております)。

FirstContactのシナリオ構築

また、専門のエンジニアがご要望のヒアリングからご提案・構築まで全ての作業を代行するフルオーダーメイド構築も承っております。これまで培ってきた様々な事例をもとに最適なシナリオ構築を行わせていただきます。

FirstContactのサービス資料を請求する

4. フリーワードへの高い対応力!

FirstContactはAI搭載型チャットボットのため、LINE単体の応答と比較しフリーワードへの対応力が高くなります。そのため、会話の中から重要な情報を取得し相手に会う会話を選択したり、直前の会話と関連のある内容をこれまでの会話から組み立て出力することができます。

またFirstContactは、言葉のゆらぎに強みをもった「IBM社のWatsonAPI」を採用しています。言葉のゆらぎとは、一つの意味を成す言葉が複数存在(例:お金=費用・コスト・料金・マネー・金額など)することを指し、表記ゆれと言われることもあります。

会話APIのイメージ

多くの人が利用するチャットボットであれば、言葉のゆらぎは比較的起こりやすいです。しかし「IBM社のWatsonAPI」 を採用したFirstContactであれば、類似した表現の言葉でも意味を理解し適した回答を行うことができます。これにより、幅広いユーザー対応を実現できます。

FirstContactのサービス資料を請求する

5. AIと有人対応の切り替えが簡単!

FirstContactは、有人対応無人対応、両方に特化したチャットボットです。

AI対応と有人対応はボタン一つで切り替えることが可能で、かつ、個別にAI対応、有人対応の設定も変えられるようになっているので、簡単操作でご利用いただけます。

切り替えも簡単

FirstContactのサービス資料を請求する

チャットボットサービスなら、FirstContactにおまかせ!

FirstContactを提供する弊社株式会社バイタリフィは、Web制作やアプリ開発、システム開発を行う開発会社です。開発会社だからこそできる、拡張性のあるカスタマイズ開発に強みをもっています。また、分析画面も常設しており手軽にチャットボットの状態を確認できるようになっています。シンプルな作りなので、チャットボットをはじめて触る方からも「触りやすい」と好評を得ています。

FirstContact

「CVR改善に効果的なチャットボットはないかな」「CVR向上させる機能を備えたチャットボットを探している」など、チャットボットを通じたCVR向上を検討中の方ぜひお気軽にお問い合わせいただけますと幸いです!

お問い合わせはこちらから

PS:そもそもチャットボットって何?と疑問に感じる方は「【重要】最低限覚えておきたいチャットボットとは?~チャットボットの最新事例紹介やAIとの違いも~」をご一読ください。チャットボットの基礎的な知識を網羅的に学べる記事となっています。