Gpt4oを駆使して完全素人でポケモン風RPGを作ってみた! バトルシーン編


はじめに

はじめましてAKです(改名しました(笑))!
本日で24回目の日記になります。 
GPT4oがすごい!ということで、現在ポケモン風RPGができるかを検証中です。
現在バトルシーンを作成中です。

今日の目的
★技を表示する
★経験値を実装すること

1.進捗状況

まずは進捗状況ですが、簡単なバトルであれば開始できるようになったというところです。※音がめっちゃ小さいです。
ポケモン模倣ゲーム制作 #Godot #勉強 #devlog (youtube.com)


2.技の表示

現状はこうげきしか押せません。
ポケモンといえば「多彩な技で相手をどう攻略するか」というのも醍醐味の一つ。
そこで今回は技を表示するようにしてみます!!

技グリッドの追加

まずはUIノードにグリッドを追加します。
ただ、現状の設定ではボタンの大きさが文字の大きさによってきめられてしまっている状況です。

そこでGPT4oに尋ねることに。
以下抜粋です。

雑に質問
サイズはLayoutのCustom Minimum Size
技のサイズを変更

なるほど、上記のように最小サイズを指定すればいけそう。
GPT4oありがとう。(笑)

次に例のごとく、signal機能を用いてボタン押下時にbutton_upのsignalがUIで発動するようにします。
そしてfight_buttonのコードをコピペします。

skill1ボタンのsignalを追加

流れとしてはこうげき押下→コメント非表示と技表示→技押下→コメントの表示とダメージ計算というかんじです。
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")	

できました!
うれしい。

こうげきボタンを押下


技1ボタンを押下


以前の攻撃処理を実行


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

ここでの役割はメッセージの表示と経験値取得処理ぐらいにしておきます。

経験値取得処理

できた!しかし、これはただコメントを出しているだけなので実際の経験値取得処理はまた次回実装します、、!

それでは本日はここまでとします。
もしこの記事がいいね!と思ったら、ぜひいいねボタンやコメント頂けますと大変励みになります。
それではまた次回もよろしくお願いします。


この記事が気に入ったらサポートをしてみませんか?