当ページのリンクには広告が含まれています。

ゲーム開発で挫折した人必見!生成AI ChatGPT&VBAでプチゲーム開発しませんか?(第2話)

当ページのリンクには広告が含まれています。
  • URLをコピーしました!

※2023/5/4追記 タイトル変更しました。

軽い気持ちで始めた生成AI ChatGPTのVBAゲーム開発入門~RPGゲームを作ってみよう!~ですが、想像以上にハードルが高くて、

残念パパ

やめときゃ良かったな

…と、絶賛後悔中です。

残念パパ

公開中だけになっ…!

はいはい、茶番はこのくらいにして前回の続きです。

前回はChatGPTにプロンプトを入れて、メイン部分のソースを出力してもらいました。

第一話を少し戻して、プロンプト制作前に行ったゲーム完成予想図の作成と下準備、最後にChatGPTから出力されたソースの概要を解説したいと思います。

目次

VBAでつくるRPGの完成イメージを共有!

まずはゴールを設定します。

そのために当方はゲームの完成予想図を作成してみました。

ゲームの画面イメージ

エクセルマクロで作るRPGの画面イメージはこちらです。

折角、エクセルを使うのでワークシートを全力で使う構造にします。

ゲームの全体像

10×10のセルを上下左右キーで移動。移動先のセルにイベントがあるとメッセージが表示される仕組みです。

一度通った場所はセルの色が変わり足跡がわかるようにします。

フィールド外のセルにはプレイヤーのHPと鍵の所持を表示するセルと、ゲーム開始ボタンを配置します。

まず、これが見た目の仕様です。

イベントはセルではなく配列に設置

イベントはセルに直接セットしません。

配列にセットします。

セルにイベントをセットしたほうが構造は単純なんですが、イベントの内容が見えちゃうと興ざめですからね。

つまり、セルを移動すると配列側も移動する仕組みにする必要があります。

鍵と扉は配列に一つだけ設定して、扉を開けたらクリアです。

セルにセットされるイベントを分類すると以下のような感じです。

イベント種類内容
アイテム回復薬、剣、鍵入手の処理
敵とたたかう敵・プレイヤーの攻撃
プレイヤー敗北・勝利
その他イベント落とし穴
扉を開けられない
ゲーム終了クリア
ゲームオーバー
【表】イベントの種類

上記の表を元にさらに細分化して、イベントを洗い出しました。

アイテムボックスにアイテムを保持…は少し手間がかかるので、回復アイテム・剣・鍵の3択にしてさらに回復アイテムや剣は拾った瞬間に使われてしまう仕組みにしました。

ゲーム性を保持しつつできるだけ単純化してみたのですが、…地味にイベント多いなw

メッセージは全11パターンは必要でした。

余談ですが、仕事で仕様書を書いているような…暗い気持ちになってました…。

考えるのやめた…。

まぁ、完成予想図は伝わったと思います。

因みにゲームの画面イメージを作ると言語化しやすいです。

手書きでもいいので、まずは完成予想図を作りましょう。

言語化できないとプロンプトを伝えられないですからね。

前回の記事で当方が配布しているInocchi Questはこの仕組みよりもっと複雑です。

Inocch Questを解説したら本1冊は確定なので、皆さんは簡略化版でご容赦ください…。

エクセルでRPGゲーム開発の下準備

さて、前に進んでいる感は欲しいですよね。なので、今回は下準備をしたいと思います。

EXCELを起動して、画面イメージと同じような画面を作成してください。

順序 編集箇所作業内容
ワークシート「Sheet1」を使うこと
行1~10の高さ「46.5」にすること
列A~Jの幅
「8.38」にすること
A1~J10範囲セルを青に塗る
L2セル「HP」と記述
M2セル「10」と記述
L3セル鍵と記述
M3セルなしと記述
L2~M3範囲罫線を引く
作業順序

見た目の色とか罫線は好みでいいです。

セルの位置だけは厳密に守ってください。ここ守らないと後で面倒なことになります。

後、最後にボタンを配置します。

STEP
開発(※)>挿入>ボタンの順にクリックします。

※「開発タブ」が表示されない方は…
[ ファイル ] タブで、[ オプション] > [ リボンのカスタマイズ] に移動します。
[リボンのユーザー設定] および [メイン タブ] の下の [開発] チェック ボックスをオンにします。

詳細はMicrosoft公式サイトをご参照ください

STEP

ボタンを配置します。

ボタンコントロールをクリックすると、セルの上で範囲指定ができるようになるので、適当な大きさの四角を作ります。

次にマクロ登録画面が表示されるので、マクロ名を「GameStart」とか、分かりやすい名前にして、OKをクリック。

最後にボタンが表示されたら、ボタンをダブルクリックすると名前の変更が可能になるので、「ゲームスタート」等の文言に変えておいてください。

これで準備完了です。

完成!

まずは見た目から入るのが鉄則です。

前に進まないと飽きちゃいますからね~。

ChatGPTが出力したソース構造

ChatGPTに伝えたプロンプトは1章のゲームの画面イメージを言語化した結果なんですよね。

改めて、ChatGPTに伝えたプロンプトを以下に書いておきます。

1セル60×60px、10×10セルの中をキャラクターが移動できるRPG。
セルにはランダムに「敵」「アイテム」「落とし穴」「1つの扉」が配置されます。
キャラクターのHPは10です。

扉をあけるとクリアです。
扉をあけるためには鍵が必要です。
アイテムはHPの回復する「回復薬」、攻撃力の上がる「剣」、扉を開けることができる「鍵」のいずれかが入っています。
落とし穴はHPが3減少します。

これをVBAで生成してください。

今更ですが、言語化が足りないなぁと思いました。

言っても仕方ないのでこちらをベースにChatGPTが出力したソースを解説したいと思います。

…改めて見るとかなり修正必要ですw。

以下、メインコード全体
Option Explicit
' グリッドの幅と高さを定義
Const GRID_WIDTH As Integer = 10
Const GRID_HEIGHT As Integer = 10
' グリッドのセルごとに定義する内容
Enum GridCell
    Empty
    Enemy
    Item
    Pitfall
    Door
End Enum
' キャラクターの初期位置
Dim playerX As Integer
Dim playerY As Integer
' キャラクターの状態
Dim playerHP As Integer
Dim playerHasKey As Boolean
Dim playerAttackPower As Integer
' グリッドの内容を保持する配列
Dim grid(GRID_WIDTH, GRID_HEIGHT) As GridCell
' 初期化処理
Sub Init()
    ' グリッドの内容をランダムに設定
    Dim x As Integer, y As Integer
    For x = 1 To GRID_WIDTH
        For y = 1 To GRID_HEIGHT
            Dim randValue As Integer
            randValue = Int(Rnd() * 4) ' 0-3のランダムな整数を生成
            grid(x, y) = randValue
        Next y
    Next x
    
    ' キャラクターの初期位置を設定
    playerX = 1
    playerY = 1
    
    ' キャラクターの初期状態を設定
    playerHP = 10
    playerHasKey = False
    playerAttackPower = 1
End Sub
' キャラクターの移動
Sub MovePlayer(dx As Integer, dy As Integer)
    ' 移動先の座標を計算
    Dim newX As Integer
    newX = playerX + dx
    If newX < 1 Or newX > GRID_WIDTH Then
        ' 移動先がグリッド外なら何もしない
        Exit Sub
    End If
    Dim newY As Integer
    newY = playerY + dy
    If newY < 1 Or newY > GRID_HEIGHT Then
        ' 移動先がグリッド外なら何もしない
        Exit Sub
    End If
    
    ' 移動先のセルの内容によって処理を分岐
    Select Case grid(newX, newY)
        Case GridCell.Empty
            ' 空のセルなら何もしない
        Case GridCell.Enemy
            ' 敵がいるセルなら攻撃する
            AttackEnemy()
        Case GridCell.Item
            ' アイテムがあるセルなら取得する
            PickupItem()
        Case GridCell.Pitfall
            ' 落とし穴があるセルならダメージを受ける
            TakeDamage(3)
        Case GridCell.Door
            ' 扉があるセルなら鍵を持っているか確認して開ける
            If playerHasKey Then
                ' 扉を開けてクリア
         MsgBox "クリア!"
          Else
              MsgBox "鍵が必要です。"
        End If
End Select
' 移動先に移動する
playerX = newX
playerY = newY
End Sub
' 敵と戦う
Sub AttackEnemy()
' 敵にダメージを与える
' この部分は実装してください
End Sub
' アイテムを取得する
Sub PickupItem()
' アイテムの種類に応じて効果を適用する
' この部分は実装してください
End Sub
' ダメージを受ける
Sub TakeDamage(damage As Integer)
' ダメージを受けてHPを減らす
playerHP = playerHP - damage
If playerHP <= 0 Then
' HPが0以下になったらゲームオーバー
MsgBox "ゲームオーバー"
End If
End Sub
' 初期化
Randomize ' 乱数の初期化
Init()
' キャラクターを右に移動
MovePlayer(1, 0)
' キャラクターを下に移動
MovePlayer(0, 1)

さて、このソースコードを大雑把に読み解くと、こんな構造になっています。

とりあえず、これをプロシージャ(※小さなプログラムの塊)単位で説明します。

図:モジュールとプロシージャ
モジュールとプロシージャの説明

ということで、今回はここまで!

えっ!?説明これだけ?

いえいえ、そんなことありません。後3話くらい続きそうなので、ゆっくりやりましょう

次回は「プロシージャ単位で説明」と「とりあえず動かしてみる!」の二本立てでお送りしたいと思います。

この記事が気に入ったら
フォローしてね!

シェアお願いします!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメント一覧 (89件)

  • I believe everything published was very reasonable. But, what about this?

    what if you composed a catchier post title? I mean, I don’t wish to tell you
    how to run your blog, but what if you added a title to maybe get a person’s attention? I mean ChatGPTのVBAゲーム開発入門~RPGゲームを作ってみよう!~(第2話) | 残念パパとひまつぶし is kinda boring.
    You might glance at Yahoo’s home page and watch how they create article titles to get people interested.

    You might try adding a video or a related pic or two to grab people interested about what you’ve written. Just
    my opinion, it would bring your website a little bit more interesting.

    • Thank you for your comment.
      I do feel that the title is not quite right now. That’s one of the reasons why I’ve actually changed the title once already.
      I couldn’t think of a title that is moderately short and conveys “Game Development with ChatGPT” well…
      But since you pointed it out, I’ll think about the title one more time.

  • I am now not positive where you’re getting your info, however good topic.

    I needs to spend some time learning more or figuring out more.

    Thanks for excellent information I used to be looking for this information for
    my mission.

    • Thanks for your comments, I am working daily on bringing EXCEL VBA closer to game completion step by step using ChatGPT. Thanks to you, the number of EXCEL files increases with each article, and it is very difficult to manage the versions and create explanatory diagrams.
      Please subscribe as the articles will continue for a while yet.

  • Nice post. I learn something new and challenging on sites I stumbleupon every day. It will always be helpful to read content from other writers and practice a little something from their websites.

    • Thank you. I will do my best to provide you with the highest quality articles possible!

  • We are a group of volunteers and starting a new scheme in our community. Your web site provided us with valuable information to work on. You have done an impressive job and our whole community will be grateful to you.

  • This is the right blog for anybody who would like to find out about this topic. You realize so much its almost hard to argue with you (not that I personally would want toHaHa). You definitely put a brand new spin on a topic that has been written about for many years. Great stuff, just excellent!

  • I do agree with all the ideas you have introduced on your post. They are very convincing and will definitely work. Still, the posts are too quick for newbies. May you please prolong them a bit from next time? Thank you for the post.

  • My spouse and I absolutely love your blog and find the majority of your post’s to be exactly what I’m looking for. Do you offer guest writers to write content for yourself? I wouldn’t mind composing a post or elaborating on a few of the subjects you write in relation to here. Again, awesome weblog!

  • If some one desires expert view about blogging and site-building after that i advise him/her to visit this website, Keep up the nice job.

  • You really make it seem so easy with your presentation but I find this topic to be really something which I think I would never understand. It seems too complicated and very broad for me. I am looking forward for your next post, I will try to get the hang of it!

    • am really struggling to write this post.
      I will do my best to make the content easier to understand.

  • Hello there! I know this is kinda off topic but I was wondering which blog platform are you using for this site? I’m getting tired of WordPress because I’ve had issues with hackers and I’m looking at options for another platform. I would be great if you could point me in the direction of a good platform.

    • Thank you for your inquiry. but,
      This site is also made with WordPress. Unfortunately, I can’t give you good advice.

  • If you wish for to improve your experience only keep visiting this web site and be updated with the most recent news posted here.

  • What’s up i am kavin, its my first time to commenting anywhere, when i read this post i thought i could also make comment due to this sensible article.

  • Hey there! Someone in my Myspace group shared this site with us so I came to look it over. I’m definitely enjoying the information. I’m book-marking and will be tweeting this to my followers! Exceptional blog and outstanding style and design.

  • Hey there! I’ve been following your site for a long time now and finally got the bravery to go ahead and give you a shout out from Dallas Tx! Just wanted to mention keep up the excellent job!

  • whoah this blog is wonderful i love reading your articles. Stay up the good work! You recognize, many individuals are searching around for this info, you can help them greatly.

  • Hey there, I think your blog might be having browser compatibility issues. When I look at your blog site in Firefox, it looks fine but when opening in Internet Explorer, it has some overlapping. I just wanted to give you a quick heads up! Other then that, awesome blog!

    • Sorry, Internet Explorer is not supported. IE is no longer supported by Microsoft, so if possible, I would be happy if you could view it with Edge, Chrome, or FireFox.

  • Hello just wanted to give you a quick heads up. The text in your content seem to be running off the screen in Internet explorer. I’m not sure if this is a format issue or something to do with internet browser compatibility but I thought I’d post to let you know. The layout look great though! Hope you get the problem solved soon. Kudos

    • Internet Explorer is not supported. If it’s about Microsoft Edge, it’s a big problem and I’d like to solve it. thank you for contacting.

    • thank you for reading. I will explain the unknown points in order from now on, so please wait. Episode 3 has already been released, so please take a look.

  • Hey there! Quick question that’s entirely off topic. Do you know how to make your site mobile friendly? My site looks weird when viewing from my iphone4. I’m trying to find a theme or plugin that might be able to correct this problem. If you have any suggestions, please share. Appreciate it!

    • It may be because iPhone 4 is an OS whose support has already ended. After that, if you use the latest version of WordPress and the latest theme, you don’t need to do anything special because it is equipped with responsive support (a function that automatically adjusts the layout according to the resolution size of smartphones, PCs, tablets, etc.).

      By the way, I’m using a theme called WordPress Theme SWELL」.

    • Writing a blog takes about 3-8 hours. The appearance uses “WordPress Theme SWELL” of WordPress. Thanks to that, the appearance adjustment is about pasting the image and adjusting it a little.

  • Hi to all, how is all, I think every one is getting more from this website, and your views are nice for new people.

  • I read this article fully regarding the comparison of most up-to-date and previous technologies, it’s awesome article.

  • Hi fantastic blog! Does running a blog like this take a massive amount work? I have very little expertise in programming but I was hoping to start my own blog soon. Anyway, if you have any suggestions or tips for new blog owners please share. I know this is off topic but I just had to ask. Cheers!

    • Thank you for your comment.
      The amount of effort a blog takes varies from person to person. I spend a lot of time writing articles. However, if you are new to blogging, it is important to keep writing articles regardless of appearance. If you continue to write a lot of articles and start adjusting the appearance after accumulating know-how, you will be able to efficiently write articles that are excellent in both appearance and content.

      I know it’s hard, but I’m rooting for you.

  • This design is wicked! You most certainly know how to keep a reader entertained. Between your wit and your videos, I was almost moved to start my own blog (well, almost…HaHa!) Fantastic job. I really enjoyed what you had to say, and more than that, how you presented it. Too cool!

    • thank you. I think the WordPress theme is better than my ability. But I’m happy to hear that.

  • Hi, constantly i used to check blog posts here
    in the early hours in the break of day, for the reason that
    i love to gain knowledge of more and more.

  • Greetings from Colorado! I’m bored to death at work so I decided to check out your website on my iphone during lunch break. I enjoy the info you present here and can’t wait to take a look when I get home. I’m shocked at how quick your blog loaded on my mobile .. I’m not even using WIFI, just 3G .. Anyhow, good site!

  • Thanks for ones marvelous posting! I actually enjoyed reading it, you may be a great author.I will make certain to bookmark your blog and will often come back in the future. I want to encourage continue your great posts, have a nice morning!

  • I absolutely love your blog and find most of your post’s to be what precisely I’m looking for. Does one offer guest writers to write content available for you? I wouldn’t mind publishing a post or elaborating on many of the subjects you write related to here. Again, awesome weblog!

    • Thank you for always reading my articles.
      I am very happy to be asked to write an article.
      But I can only write articles in Japanese, so I don’t think I can live up to expectations.

  • I’m now not sure where you are getting your info, however good topic. I needs to spend a while learning more or understanding more. Thank you for fantastic information I used to be in search of this information for my mission.

  • I’m now not positive where you are getting your info, however good topic. I needs to spend a while learning more or working out more. Thank you for great information I used to be on the lookout for this information for my mission.

  • Excellent post. I used to be checking continuously this blog and I am inspired! Very useful information particularly the final part 🙂 I deal with such info a lot. I used to be seeking this particular info for a long timelong time. Thank you and good luck.

  • Thank you for any other magnificent article. Where else may anyone get that kind of information in such a perfect method of writing? I have a presentation next week, and I am at the look for such information.

  • you are in reality a just right webmaster. The web site loading velocity is incredible. It sort of feels that you are doing any unique trick. Also, The contents are masterpiece. you have performed a fantastic activity in this matter!

  • I am really loving the theme/design of your weblog. Do you ever run into any web browser compatibility problems? A handful of my blog visitors have complained about my website not operating correctly in Explorer but looks great in Safari. Do you have any ideas to help fix this issue?

    • Probably Internet Explorer is the culprit. Since it does not support HTML5, I think that it will not be displayed correctly no matter how hard I try.
      How about trying to induce people to view it in a next-generation browser such as Chrome or Edge?

目次