Gpt4oを駆使して完全素人でポケモン風RPGを作ってみた! バトルシーン編
はじめに
はじめましてAKです(改名しました(笑))!
本日で24回目の日記になります。
GPT4oがすごい!ということで、現在ポケモン風RPGができるかを検証中です。
現在バトルシーンを作成中です。
今日の目的
★技を表示する
★経験値を実装すること
1.進捗状況
まずは進捗状況ですが、簡単なバトルであれば開始できるようになったというところです。※音がめっちゃ小さいです。
ポケモン模倣ゲーム制作 #Godot #勉強 #devlog (youtube.com)
2.技の表示
現状はこうげきしか押せません。
ポケモンといえば「多彩な技で相手をどう攻略するか」というのも醍醐味の一つ。
そこで今回は技を表示するようにしてみます!!
![](https://assets.st-note.com/img/1718500861436-0hyzBm6cJo.png)
まずはUIノードにグリッドを追加します。
ただ、現状の設定ではボタンの大きさが文字の大きさによってきめられてしまっている状況です。
そこでGPT4oに尋ねることに。
以下抜粋です。
![](https://assets.st-note.com/img/1718501572694-0pzGvSnC9n.png?width=800)
![](https://assets.st-note.com/img/1718501431690-9cOVvefjD7.png?width=800)
![](https://assets.st-note.com/img/1718501611961-kb0tsKba34.png)
なるほど、上記のように最小サイズを指定すればいけそう。
GPT4oありがとう。(笑)
次に例のごとく、signal機能を用いてボタン押下時にbutton_upのsignalがUIで発動するようにします。
そしてfight_buttonのコードをコピペします。
![](https://assets.st-note.com/img/1718502059417-aWJMBPsxdn.png?width=800)
流れとしてはこうげき押下→コメント非表示と技表示→技押下→コメントの表示とダメージ計算というかんじです。
func _on_fight_button_up(): こうげきボタン押下処理
func _on_skill_1_button_up(): 技ボタン押下処理
func _on_fight_button_up():
if turn_queue.is_player_turn:
# Attckプロパティを取得して出力
player_button_GridContainer.hide()
$SkillMenu/GridContainer.visible = true
$"../Background/AnyUI/PlayerSelectUI/UIMessage".visible = false
func _on_skill_1_button_up():
if turn_queue.is_player_turn:
# Attckプロパティを取得して出力
$"../Background/AnyUI/PlayerSelectUI/UIMessage".visible = true
player_skillbutton_GridContainer.hide()
await get_tree().create_timer(0.5).timeout
damage_calculator.calculate_damage(get_status.player_attack_value,get_status.enemy_defence_value)
get_status.get_hp()
get_status.get_dead_flg()
if not get_status.enemy_dead_flg:
turn_queue.change_turn()
else:
print("cnnnot press")
できました!
うれしい。
![](https://assets.st-note.com/img/1718503569917-KTfJKFu66L.png?width=800)
![](https://assets.st-note.com/img/1718503578328-GVJpuETo7D.png?width=800)
![](https://assets.st-note.com/img/1718503587639-cJxgTDmFAy.png?width=800)
3.経験値の実装
経験値はモンスターを倒したときにもらえるため、相手のHP0処理時に実行されるという設計で考えます。
get_dead_flg(): deadフラグ取得
現在は野生のポケモンとのバトルを想定しているため、相手のHPを1回0にすれば戦闘終了ノードを起動しています。
しかし、実際のポケモンでは当然2匹以上と戦闘することがあります。
そのため、ゲームエンド処理をコピーして片方を経験値処理、もう片方をゲームエンド処理にします。
さらにゲームエンド処理は全てのポケモンが倒されたらという条件に変更する必要があります。
ひとまず、経験値処理を実装します。
extends Node
@onready var get_status = $"../GetStatus"
@onready var ui_message_controller = $"../UIMessageController"
func _process(_delta):
# 毎フレーム game_set 関数を呼び出して GameOver ノードの状態をチェック
get_status.get_dead_flg()
view_message()
get_Exp()
func view_message():
if get_status.player_dead_flg:
ui_message_controller.player_deade__message()
elif get_status.enemy_dead_flg:
ui_message_controller.enemy_dead_message()
func get_Exp():
if get_status.enemy_dead_flg:
ui_message_controller.get_Exp_message()
await get_tree().create_timer(2.0).timeout
ここでの役割はメッセージの表示と経験値取得処理ぐらいにしておきます。
![](https://assets.st-note.com/img/1718505653792-7Co8hKJ1me.png?width=800)
できた!しかし、これはただコメントを出しているだけなので実際の経験値取得処理はまた次回実装します、、!
それでは本日はここまでとします。
もしこの記事がいいね!と思ったら、ぜひいいねボタンやコメント頂けますと大変励みになります。
それではまた次回もよろしくお願いします。
この記事が気に入ったらサポートをしてみませんか?