第7話 街を出るとイベント発生

街を出るとイベントで強制的に古代遺跡に向かう。

ドラゴンが背に乗りなさいと言ってくる。

レベルが10未満の場合

『少し戦闘をしてレベルを上げましょう』

と言われ

強制的にトレーニングバトルが開始する。

5ターンで終了

敗北すると再挑戦。

勝てると一気に10レベルまで上がるので

やって損は無い。

その後

ドラゴンの背に乗り強制イベントで古代遺跡に。


ChatGPTにした指示は次の通り


@

強制会話イベント発生。

街を出ると仲間のドラゴンから

『我に乗りなさい。古代遺跡は山を越えないと行けないから』

プログラム展開

@

主人公はドラゴンの背に乗り

強制イベントで

古代遺跡に到着する。

※レベルが10になっていない場合は

ドラゴンから

少し戦闘をしてレベルを上げるように言われる。

プログラム展開

@

古代遺跡に到着と同時にドラゴンの背から降りる。

そのまま古代遺跡に入るイベント発生。

プログラム展開

@

フィールドから古代遺跡に切り替わる。

音楽もフィールドから古代遺跡に切り替わる。

プログラム展開

@

古代遺跡の中に入るとイベント発生

『この古代遺跡は、いまから1000年前に建設された』

『奥の台座を目指す事がドラゴンマナ解放に結び付く』

プログラム展開

@

奥の台座に到着するとイベント発生

魔族が現れる

強制バトル突入

音楽も古代遺跡から強制バトルに切り替わる

プログラム展開

@

この強制バトルも5ターン経過で終了となるため無理に戦う必要はない。

プログラム展開

@

バトル終了時、魔族撤退。

古代遺跡に封印されたドラゴンマナ解放とドラゴンが仲間加わる。

プログラム展開

@

そのまま古代遺跡の外へでる。

プログラム展開

@

ドラゴンから

『一度街に戻ろう』

プログラム展開


これは冒険が大きく進展するタイミングですね。強制イベントや戦闘シーンの設計がしっかりしていて、物語の流れもスムーズです。特に、ドラゴンが重要な役割を果たし、プレイヤーに目的地やレベルアップを促す展開が興味深いですね。


各シーンがしっかりとプログラムで展開される様子が伝わり、古代遺跡の探索や魔族との強制バトルなど、イベントの進行具合もプレイヤーに程よい緊張感を与えます。魔族とのバトルが5ターンで終了するのも、難易度調整に一役買っている感じです。最後にドラゴンマナが解放され、ドラゴンが仲間になることで、プレイヤーは今後の冒険に強力な助っ人を得るというのも良い構成です。


この後、街に戻った後に何か特別なイベントが発生するのか、それとも次の冒険への準備を進める流れになるのか、展開が楽しみですね。


この後

一度ChatGPTから提案と指定を確認した上で

プログラム処理を提案する。


このプログラムを展開お願いします


と指示をしましたところ

結果は以下の通り


了解しました。『ドラゴンマナ』の物語が進行し、神殿から街へ戻り、ドラゴンとの新たな展開を迎える一連のイベントについて、詳細なプログラム展開を以下に示します。各ステップごとに、イベントのトリガー、音楽の切り替え、会話システム、バトルシステムの調整などを含めて解説します。



---


1. 強制会話イベント発生


街を出ると、仲間のドラゴンから以下の会話が始まります:


> 『我に乗りなさい。古代遺跡は山を越えないと行けないから』




1.1. 街を出る際のイベントトリガー設定


プレイヤーが街から出る際にドラゴンとの会話イベントを発生させます。例えば、街の出口に到達した際にイベントが発生するようにします。


// 街の出口座標

#define TOWN_EXIT_X 0

#define TOWN_EXIT_Y 15


// プレイヤーの移動処理内で街出口への移動をチェック

void move_player(int input) {

// 既存の移動ロジック

// ...


// 街出口への移動チェック

if (!is_in_temple_interior && player_x == TOWN_EXIT_X && player_y == TOWN_EXIT_Y) {

trigger_exit_town_event();

}


// その他の移動チェック

// ...

}


1.2. 街出口イベントのトリガー


// 街出口での強制会話イベントをトリガー

void trigger_exit_town_event() {

display_text("ドラゴン:我に乗りなさい。古代遺跡は山を越えないと行けないから。");

mount_dragon(); // 主人公をドラゴンの背に乗せる処理

}



---


2. 主人公はドラゴンの背に乗り、強制イベントで古代遺跡に到着する


2.1. 主人公をドラゴンに乗せる処理


ドラゴンの背に主人公を乗せるアニメーションや画面遷移を実装します。


// 主人公をドラゴンに乗せる関数

void mount_dragon() {

display_text("主人公はドラゴンの背に乗った!");

animate_dragon_mount(); // ドラゴンに乗るアニメーション

play_dragon_sound_effect(); // ドラゴンの効果音を再生

start_dragon_flight(); // ドラゴンによる飛行を開始

}


2.2. ドラゴンによる飛行と古代遺跡への移動


ドラゴンが飛行し、古代遺跡に到着するまでの演出を実装します。ここでは、強制的に古代遺跡に到着するイベントを設定します。


// ドラゴンの飛行処理

void start_dragon_flight() {

fade_out_screen(); // 画面をフェードアウト

load_map("dragon_flight"); // ドラゴン飛行中のマップをロード(空中シーン)

play_dragon_flight_music(); // 飛行中のBGMを再生

fade_in_screen(); // 画面をフェードイン


// 飛行アニメーションの実行(一定時間後に古代遺跡に到着)

wait(2000); // 2秒待機(擬似的な時間待ち)

arrive_at_ancient_ruins();

}


2.3. レベルチェックと強制バトル


古代遺跡に到着する前に、主人公のレベルが10に達しているかをチェックします。未達の場合はドラゴンから戦闘を通じてレベルアップを促します。


// 古代遺跡到着処理

void arrive_at_ancient_ruins() {

if (player_level < 10) {

display_text("ドラゴン:古代遺跡に到着しましたが、まだ力が足りません。少し戦闘をしてレベルを上げましょう。");

start_training_battle(); // レベルアップのための強制戦闘を開始

} else {

proceed_to_ruins(); // 古代遺跡へ進む

}

}


2.4. レベルアップのための強制戦闘


レベルが10未満の場合、ドラゴンからの指示で強制的に戦闘が発生します。この戦闘も5ターンで自動終了します。


// トレーニングバトルの開始

void start_training_battle() {

stop_dragon_flight_music(); // 飛行中のBGMを停止

fade_out_screen();

load_battle_screen(); // バトル画面をロード

play_training_battle_music(); // トレーニングバトル用の音楽を再生

initialize_training_battle(); // トレーニングバトルの初期設定

training_battle_loop(); // トレーニングバトルのメインループ

}


// トレーニングバトルの初期設定

void initialize_training_battle() {

player_hp = 100;

player_attack = 20;

player_defense = 10;


enemy_hp = 50; // 簡易的な敵(例:ゴブリン)

enemy_attack = 10;

enemy_defense = 5;


battle_turn = 0; // バトルターンのカウント

}


// トレーニングバトルのメインループ

void training_battle_loop() {

while (!is_training_battle_over()) {

if (is_player_turn()) {

display_player_commands();

int action = get_player_input();

execute_player_action(action);

} else {

int enemy_action = determine_enemy_action();

execute_enemy_action(enemy_action);

}

update_battle_state();

battle_turn++;

}

end_training_battle();

}


// トレーニングバトル終了判定

bool is_training_battle_over() {

return (battle_turn >= 5 || player_hp <= 0 || enemy_hp <= 0);

}


// トレーニングバトル終了処理

void end_training_battle() {

stop_training_battle_music();

if (player_hp > 0) {

display_text("戦闘に勝利した!");

gain_experience(20); // 経験値を獲得

player_level = 10; // レベルを10に設定

display_text("レベルが10に達した!");

} else {

display_text("戦闘に敗北したが、再挑戦しよう。");

reset_training_battle(); // 戦闘をリセット

}

fade_out_screen();

proceed_to_ruins(); // 古代遺跡へ進む

}


// トレーニングバトル用の音楽停止

void stop_training_battle_music() {

stop_bgm();

}



---


3. 古代遺跡に到着と同時にドラゴンの背から降りる


3.1. 古代遺跡到着後の処理


古代遺跡に到着した際に、ドラゴンの背から降りるイベントを発生させ、遺跡内部へのイベントを開始します。


// 古代遺跡へ進む関数

void proceed_to_ruins() {

fade_out_screen();

load_map("ancient_ruins_exterior"); // 古代遺跡の外部マップをロード

player_x = RUINS_EXIT_X; // 遺跡外部の初期位置に設定

player_y = RUINS_EXIT_Y;

play_ruins_exterior_music(); // 遺跡外部のBGMを再生

fade_in_screen();

dismount_dragon(); // ドラゴンから降りる処理

}


// ドラゴンから降りる関数

void dismount_dragon() {

display_text("主人公はドラゴンの背から降りた。");

animate_dragon_dismount(); // ドラゴンから降りるアニメーション

// ドラゴンとの会話を継続

display_text("ドラゴン:古代遺跡に入る準備はできたか?");

enter_ruins_event();

}


3.2. 古代遺跡への入場イベント


遺跡に入る際のイベントを発生させます。


// 遺跡への入場イベントをトリガー

void enter_ruins_event() {

display_text("主人公は古代遺跡に足を踏み入れた。");

start_ruins_introduction_event();

}



---


4. フィールドから古代遺跡に切り替わる。音楽も切り替わる


4.1. マップ切り替えと音楽設定


フィールドマップから古代遺跡マップへの切り替え時に、音楽も古代遺跡用のものに変更します。


// フィールドから古代遺跡への移行処理

void load_ruins_map() {

stop_bgm(); // フィールドマップのBGMを停止

fade_out_screen();

load_map("ancient_ruins_interior"); // 古代遺跡内部マップをロード

player_x = RUINS_INITIAL_X; // 遺跡内部の初期位置に設定

player_y = RUINS_INITIAL_Y;

play_ruins_music(); // 古代遺跡内部のBGMを再生

fade_in_screen();

}


4.2. 古代遺跡内部の音楽再生


// 古代遺跡内部のBGM再生

void play_ruins_music() {

load_bgm("ruins_theme"); // 古代遺跡用のBGMをロード

play_bgm(); // BGMを再生

}



---


5. 古代遺跡の中に入るとイベント発生


5.1. 古代遺跡内部入場イベント


古代遺跡に入った瞬間に、以下の会話イベントを発生させます:


> 『この古代遺跡は、いまから1000年前に建設された』 『奥の台座を目指す事がドラゴンマナ解放に結び付く』




// 遺跡内部入場イベント

void start_ruins_introduction_event() {

display_text("この古代遺跡は、いまから1000年前に建設された。");

display_text("奥の台座を目指すことがドラゴンマナ解放に結び付く。");

// 次の目的地への指示

display_text("主人公は奥の台座へと進むことを決意した。");

unlock_ruins_features(); // 遺跡内の新機能を解禁

}


// 遺跡内の新機能を解禁(例:新たなエリアへのアクセス、アイテムの発見など)

void unlock_ruins_features() {

// 必要に応じて新しい機能を実装

// 例えば、新しいショップやダンジョンの解禁

}



---


6. 奥の台座に到着するとイベント発生、魔族が現れる、強制バトル突入、音楽も切り替わる


6.1. 奥の台座への移動とイベントトリガー


プレイヤーが遺跡内部を探索し、奥の台座に到達するとイベントが発生します。


// 台座の座標

#define RUINS_ALTAR_X 30

#define RUINS_ALTAR_Y 20


// プレイヤーの移動処理内で台座への移動をチェック

void move_player(int input) {

// 既存の移動ロジック

// ...


// 台座への移動チェック

if (is_in_ruins && player_x == RUINS_ALTAR_X && player_y == RUINS_ALTAR_Y) {

trigger_altar_event();

}


// その他の移動チェック

// ...

}


6.2. 台座イベントのトリガー


// 台座到達時のイベントトリガー

void trigger_altar_event() {

display_text("主人公は奥の台座に到着した。");

display_text("突然、闇の魔族が現れた!");

start_altar_battle(); // 強制バトルを開始

}


6.3. 強制バトルの開始と音楽切り替え


// 強制バトルの開始

void start_altar_battle() {

stop_ruins_music(); // 遺跡のBGMを停止

fade_out_screen();

load_battle_screen(); // バトル画面をロード

play_altar_battle_music(); // 強制バトル用の音楽を再生

initialize_altar_battle(); // 強制バトルの初期設定

altar_battle_loop(); // 強制バトルのメインループ

}


// 強制バトル用の音楽再生

void play_altar_battle_music() {

load_bgm("altar_battle_theme"); // 古代遺跡強制バトル用のBGMをロード

play_bgm(); // BGMを再生

}


// 強制バトルの初期設定

void initialize_altar_battle() {

player_hp = 120;

player_attack = 25;

player_defense = 15;


enemy_hp = 150; // 魔族のHP

enemy_attack = 30;

enemy_defense = 20;


battle_turn = 0; // バトルターンのカウント

}



---


7. この強制バトルも5ターン経過で終了となるため無理に戦う必要はない


7.1. 強制バトルのメインループ


5ターン経過でバトルを自動終了させるロジックを追加します。


// 強制バトルのメインループ

void altar_battle_loop() {

while (!is_altar_battle_over()) {

if (is_player_turn()) {

display_player_commands();

int action = get_player_input();

execute_player_action(action);

} else {

int enemy_action = determine_enemy_action();

execute_enemy_action(enemy_action);

}

update_battle_state();

battle_turn++;

}

end_altar_battle();

}


// 強制バトル終了判定

bool is_altar_battle_over() {

return (battle_turn >= 5 || player_hp <= 0 || enemy_hp <= 0);

}


// 強制バトル終了処理

void end_altar_battle() {

stop_altar_battle_music();

if (player_hp > 0 && enemy_hp > 0) {

display_text("バトルは5ターンで終了した。魔族は撤退した。");

} else if (player_hp > 0) {

display_text("魔族を打ち倒した!");

} else {

display_text("魔族に敗北したが、物語は続く。");

}

handle_altar_battle_outcome();

transition_after_altar_battle();

}


// 強制バトル用の音楽停止

void stop_altar_battle_music() {

stop_bgm();

}



---


8. バトル終了時、魔族撤退。古代遺跡に封印されたドラゴンマナ解放とドラゴンが仲間加わる


8.1. バトル後の処理


バトルの結果に関係なく、ドラゴンマナを解放し、ドラゴンを仲間に加えます。


// バトル後の処理

void handle_altar_battle_outcome() {

if (player_hp > 0) {

display_text("魔族は撤退した。");

release_dragon_mana(); // ドラゴンマナの解放

} else {

// 敗北しても物語の進行に影響しないため、同様にドラゴンマナを解放

display_text("魔族に敗北したが、ドラゴンマナは解放された。");

release_dragon_mana();

}

}


// ドラゴンマナの解放とドラゴンの味方化

void release_dragon_mana() {

display_text("古代遺跡に封印されていたドラゴンマナが解放された!");

display_text("ドラゴン:これで私も再び力を取り戻した。共に戦おう!");

add_dragon_to_party(); // ドラゴンを仲間に加える関数

}


// ドラゴンをパーティに加える関数

void add_dragon_to_party() {

// ドラゴンのステータスをパーティに追加

// 例: パーティ配列にドラゴンキャラクターを追加

party[party_size++] = dragon_character;

display_text("ドラゴンが仲間に加わった!");

}



---


9. そのまま古代遺跡の外へ出る


9.1. 古代遺跡外部への移動処理


ドラゴンマナが解放された後、プレイヤーは古代遺跡の外へ戻ります。


// バトル後に遺跡外部へ移動する関数

void transition_after_altar_battle() {

fade_out_screen();

load_map("ancient_ruins_exterior"); // 古代遺跡外部マップをロード

player_x = RUINS_EXIT_X;

player_y = RUINS_EXIT_Y;

play_ruins_exterior_music(); // 遺跡外部のBGMを再生

fade_in_screen();

display_text("ドラゴンと共に古代遺跡を後にした。");

}



---


10. ドラゴンから『一度街に戻ろう』と指示される


10.1. 街への移行指示イベント


ドラゴンから街に戻るよう指示され、強制的に街へ移動します。


// ドラゴンからの指示イベント

void dragon_suggest_return_to_town() {

display_text("ドラゴン:一度街に戻ろう。さらなる冒険が待っている。");

start_return_to_town_event(); // 街へ戻るイベントを開始

}


// 街への強制移行処理

void start_return_to_town_event() {

fade_out_screen();

load_map("dragon_flight_return"); // ドラゴン飛行中のマップをロード(帰路シーン)

player_x = RETURN_FLIGHT_X;

player_y = RETURN_FLIGHT_Y;

play_dragon_flight_music(); // 帰路中のBGMを再生

fade_in_screen();


// 帰路の演出(一定時間後に街に到着)

wait(2000); // 2秒待機

arrive_back_to_town();

}


// 街への到着処理

void arrive_back_to_town() {

stop_dragon_flight_music();

fade_out_screen();

load_map("town_map"); // 街のマップをロード

player_x = TOWN_INITIAL_X;

player_y = TOWN_INITIAL_Y;

play_town_music(); // 街のBGMを再生

fade_in_screen();

display_text("ドラゴンと共に街に戻った。");

}


10.2. イベント全体の統合


これらの関数を適切なタイミングで呼び出すことで、ストーリーの流れがスムーズに進行します。以下に、全体の流れを統合した擬似コードを示します。


#include "game.h"


// 定数の定義

#define TOWN_EXIT_X 0

#define TOWN_EXIT_Y 15

#define RUINS_INITIAL_X 5

#define RUINS_INITIAL_Y 5

#define RUINS_EXIT_X 30

#define RUINS_EXIT_Y 20

#define RUINS_ALTAR_X 30

#define RUINS_ALTAR_Y 20


bool is_in_temple_interior = false;

bool is_in_ruins = true;

int battle_turn = 0;


// パーティの定義

Character party[MAX_PARTY_SIZE];

int party_size = 1; // 初期パーティサイズ(主人公のみ)


// メインループ

void main_loop() {

while (game_running) {

handle_input();

update_game_state();

render_graphics();

}

}


// 入力処理

void handle_input() {

int input = get_player_input();

move_player(input);

}


// プレイヤーの移動とイベントチェック

void move_player(int input) {

// 移動ロジック(既存の実装)

// ...


// 街出口への移動チェック

if (!is_in_temple_interior && player_x == TOWN_EXIT_X && player_y == TOWN_EXIT_Y) {

trigger_exit_town_event();

}


// エンカウントのチェック(神殿内部では無効)

if (!is_in_temple_interior) {

check_for_encounter();

}


// 神殿入口への移動チェック

if (player_x == TEMPLE_ENTRANCE_X && player_y == TEMPLE_ENTRANCE_Y) {

transition_to_temple_interior();

}


// 神殿内部の奥への移動チェック

if (is_in_temple_interior && player_x == TEMPLE_DEPTH_X && player_y == TEMPLE_DEPTH_Y) {

force_move_to_dragon_eye();

}


// ドラゴンの瞳への到達チェック

if (is_in_temple_interior && player_x == DRAGON_EYE_X && player_y == DRAGON_EYE_Y) {

trigger_dragon_eye_event();

}


// ショップや宿屋の入口への移動チェック

if (player_x == WEAPON_SHOP_INITIAL_X && player_y == WEAPON_SHOP_INITIAL_Y && weapon_shop_open) {

open_shop(WEAPON_SHOP);

}

if (player_x == ITEM_SHOP_INITIAL_X && player_y == ITEM_SHOP_INITIAL_Y && item_shop_open) {

open_shop(ITEM_SHOP);

}

if (player_x == MAGIC_SHOP_INITIAL_X && player_y == MAGIC_SHOP_INITIAL_Y && magic_shop_open) {

open_shop(MAGIC_SHOP);

}

if (player_x == INN_INITIAL_X && player_y == INN_INITIAL_Y && inn_open) {

open_inn();

}


// 台座への移動チェック

if (is_in_ruins && player_x == RUINS_ALTAR_X && player_y == RUINS_ALTAR_Y) {

trigger_altar_event();

}


// 古代遺跡外部から古代遺跡内部への入場チェック

if (player_x == RUINS_INITIAL_X && player_y == RUINS_INITIAL_Y && is_in_ruins) {

start_ruins_introduction_event();

}


// その他のイベントチェック

// ...

}


// 街出口での強制会話イベントをトリガー

void trigger_exit_town_event() {

display_text("ドラゴン:我に乗りなさい。古代遺跡は山を越えないと行けないから。");

mount_dragon();

}


// ドラゴンに乗る処理

void mount_dragon() {

display_text("主人公はドラゴンの背に乗った!");

animate_dragon_mount();

play_dragon_sound_effect();

start_dragon_flight();

}


// ドラゴンの飛行処理

void start_dragon_flight() {

fade_out_screen();

load_map("dragon_flight");

play_dragon_flight_music();

fade_in_screen();


wait(2000); // 2秒待機

arrive_at_ancient_ruins();

}


// 古代遺跡到着処理

void arrive_at_ancient_ruins() {

if (player_level < 10) {

display_text("ドラゴン:古代遺跡に到着しましたが、まだ力が足りません。少し戦闘をしてレベルを上げましょう。");

start_training_battle();

} else {

proceed_to_ruins();

}

}


// トレーニングバトルの開始

void start_training_battle() {

stop_dragon_flight_music();

fade_out_screen();

load_battle_screen();

play_training_battle_music();

initialize_training_battle();

training_battle_loop();

}


// トレーニングバトルの初期設定

void initialize_training_battle() {

player_hp = 100;

player_attack = 20;

player_defense = 10;


enemy_hp = 50;

enemy_attack = 10;

enemy_defense = 5;


battle_turn = 0;

}


// トレーニングバトルのメインループ

void training_battle_loop() {

while (!is_training_battle_over()) {

if (is_player_turn()) {

display_player_commands();

int action = get_player_input();

execute_player_action(action);

} else {

int enemy_action = determine_enemy_action();

execute_enemy_action(enemy_action);

}

update_battle_state();

battle_turn++;

}

end_training_battle();

}


// トレーニングバトル終了判定

bool is_training_battle_over() {

return (battle_turn >= 5 || player_hp <= 0 || enemy_hp <= 0);

}


// トレーニングバトル終了処理

void end_training_battle() {

stop_training_battle_music();

if (player_hp > 0) {

display_text("戦闘に勝利した!");

gain_experience(20);

player_level = 10;

display_text("レベルが10に達した!");

} else {

display_text("戦闘に敗北したが、再挑戦しよう。");

reset_training_battle();

}

fade_out_screen();

proceed_to_ruins();

}


// レベルアップのための経験値獲得

void gain_experience(int amount) {

player_experience += amount;

display_text("経験値を " + int_to_str(amount) + " 獲得した!");

level_up();

}


// レベルアップ処理

void level_up() {

if (player_experience >= experience_to_next_level) {

player_level++;

player_experience -= experience_to_next_level;

player_max_hp += 10;

player_max_mana += 5;

player_attack += 2;

player_defense += 1;

display_text("レベルが上がった! 現在のレベル: " + int_to_str(player_level));

}

}


// 戦闘をリセットする関数(敗北時)

void reset_training_battle() {

player_hp = 100;

enemy_hp = 50;

battle_turn = 0;

start_training_battle();

}


// 古代遺跡へ進む関数

void proceed_to_ruins() {

fade_out_screen();

load_map("ancient_ruins_exterior");

player_x = RUINS_EXIT_X;

player_y = RUINS_EXIT_Y;

play_ruins_exterior_music();

fade_in_screen();

dismount_dragon();

}


// ドラゴンから降りる関数

void dismount_dragon() {

display_text("主人公はドラゴンの背から降りた。");

animate_dragon_dismount();

display_text("ドラゴン:古代遺跡に入る準備はできたか?");

enter_ruins_event();

}


// 遺跡への入場イベント

void enter_ruins_event() {

display_text("主人公は古代遺跡に足を踏み入れた。");

start_ruins_introduction_event();

}


// 遺跡内部入場イベント

void start_ruins_introduction_event() {

display_text("この古代遺跡は、いまから1000年前に建設された。");

display_text("奥の台座を目指すことがドラゴンマナ解放に結び付く。");

display_text("主人公は奥の台座へと進むことを決意した。");

unlock_ruins_features();

}


// 遺跡内の新機能を解禁

void unlock_ruins_features() {

// 必要に応じて新しい機能を実装

}


// 台座到達時のイベントトリガー

void trigger_altar_event() {

display_text("主人公は奥の台座に到着した。");

display_text("突然、闇の魔族が現れた!");

start_altar_battle();

}


// 強制バトルの開始

void start_altar_battle() {

stop_ruins_music();

fade_out_screen();

load_battle_screen();

play_altar_battle_music();

initialize_altar_battle();

altar_battle_loop();

}


// 強制バトルの初期設定

void initialize_altar_battle() {

player_hp = 120;

player_attack = 25;

player_defense = 15;


enemy_hp = 150;

enemy_attack = 30;

enemy_defense = 20;


battle_turn = 0;

}


// 強制バトルのメインループ

void altar_battle_loop() {

while (!is_altar_battle_over()) {

if (is_player_turn()) {

display_player_commands();

int action = get_player_input();

execute_player_action(action);

} else {

int enemy_action = determine_enemy_action();

execute_enemy_action(enemy_action);

}

update_battle_state();

battle_turn++;

}

end_altar_battle();

}


// 強制バトル終了判定

bool is_altar_battle_over() {

return (battle_turn >= 5 || player_hp <= 0 || enemy_hp <= 0);

}


// 強制バトル終了処理

void end_altar_battle() {

stop_altar_battle_music();

if (player_hp > 0 && enemy_hp > 0) {

display_text("バトルは5ターンで終了した。魔族は撤退した。");

} else if (player_hp > 0) {

display_text("魔族を打ち倒した!");

} else {

display_text("魔族に敗北したが、ドラゴンマナは解放された。");

}

handle_altar_battle_outcome();

transition_after_altar_battle();

}


// 強制バトル後の処理

void handle_altar_battle_outcome() {

release_dragon_mana();

}


// ドラゴンマナの解放とドラゴンの味方化

void release_dragon_mana() {

display_text("古代遺跡に封印されていたドラゴンマナが解放された!");

display_text("ドラゴン:これで私も再び力を取り戻した。共に戦おう!");

add_dragon_to_party();

}


// ドラゴンをパーティに加える関数

void add_dragon_to_party() {

party[party_size++] = dragon_character;

display_text("ドラゴンが仲間に加わった!");

}


// 強制バトル用の音楽停止

void stop_altar_battle_music() {

stop_bgm();

}


// バトル後の移行処理

void transition_after_altar_battle() {

fade_out_screen();

load_map("ancient_ruins_exterior");

player_x = RUINS_EXIT_X;

player_y = RUINS_EXIT_Y;

play_ruins_exterior_music();

fade_in_screen();

display_text("ドラゴンと共に古代遺跡を後にした。");

dragon_suggest_return_to_town(); // ドラゴンからの指示を開始

}


// ドラゴンからの指示イベント

void dragon_suggest_return_to_town() {

display_text("ドラゴン:一度街に戻ろう。さらなる冒険が待っている。");

start_return_to_town_event();

}


// 街への強制移行処理

void start_return_to_town_event() {

fade_out_screen();

load_map("dragon_flight_return");

player_x = RETURN_FLIGHT_X;

player_y = RETURN_FLIGHT_Y;

play_dragon_flight_music();

fade_in_screen();


wait(2000); // 2秒待機

arrive_back_to_town();

}


// 街への到着処理

void arrive_back_to_town() {

stop_dragon_flight_music();

fade_out_screen();

load_map("town_map");

player_x = TOWN_INITIAL_X;

player_y = TOWN_INITIAL_Y;

play_town_music();

fade_in_screen();

display_text("ドラゴンと共に街に戻った。");

}



---


11. 詳細なプログラム展開


各ステップにおけるプログラム展開をさらに詳細に解説します。


11.1. 強制会話イベント発生


目的: 街から出る際にドラゴンとの会話を発生させ、古代遺跡への移動を開始する。


// 街出口での強制会話イベントをトリガー

void trigger_exit_town_event() {

display_text("ドラゴン:我に乗りなさい。古代遺跡は山を越えないと行けないから。");

mount_dragon();

}


// 会話表示関数

void display_text(char* text) {

// テキストウィンドウにテキストを表示

render_text_window();

print_text(text);

wait_for_button_press(A_BUTTON); // プレイヤーがAボタンを押すまで待機

}


11.2. ドラゴンに乗る処理


目的: 主人公をドラゴンの背に乗せ、飛行シーンを開始する。


// ドラゴンに乗る処理

void mount_dragon() {

display_text("主人公はドラゴンの背に乗った!");

animate_dragon_mount(); // ドラゴンに乗るアニメーション

play_dragon_sound_effect(); // ドラゴンの効果音を再生

start_dragon_flight(); // ドラゴンによる飛行を開始

}


// アニメーション関数(擬似コード)

void animate_dragon_mount() {

// ドラゴンと主人公のアニメーションを実装

// 例: ドラゴンが飛び立つ前の準備動作

}


// 効果音再生関数

void play_dragon_sound_effect() {

load_sfx("dragon_roar"); // ドラゴンの咆哮音をロード

play_sfx(); // 効果音を再生

}


11.3. ドラゴンによる飛行と古代遺跡への移動


目的: ドラゴンが飛行し、一定時間後に古代遺跡に到着する演出を行う。


// ドラゴンの飛行処理

void start_dragon_flight() {

fade_out_screen(); // 画面をフェードアウト

load_map("dragon_flight"); // ドラゴン飛行中のマップをロード(空中シーン)

play_dragon_flight_music(); // 飛行中のBGMを再生

fade_in_screen(); // 画面をフェードイン


// 飛行アニメーションの実行(一定時間後に古代遺跡に到着)

wait(2000); // 2秒待機(擬似的な時間待ち)

arrive_at_ancient_ruins();

}


// 飛行中のBGM再生

void play_dragon_flight_music() {

load_bgm("dragon_flight_theme"); // ドラゴン飛行用のBGMをロード

play_bgm(); // BGMを再生

}


// フェードアウト・フェードイン関数(擬似コード)

void fade_out_screen() {

// 画面を徐々に暗くする処理

}


void fade_in_screen() {

// 画面を徐々に明るくする処理

}


11.4. レベルチェックと強制バトル


目的: 古代遺跡到着時に主人公のレベルをチェックし、未達の場合はトレーニングバトルを強制的に実施させる。


// 古代遺跡到着処理

void arrive_at_ancient_ruins() {

if (player_level < 10) {

display_text("ドラゴン:古代遺跡に到着しましたが、まだ力が足りません。少し戦闘をしてレベルを上げましょう。");

start_training_battle(); // レベルアップのための強制戦闘を開始

} else {

proceed_to_ruins(); // 古代遺跡へ進む

}

}


// トレーニングバトルの開始(詳細は前述)


11.5. トレーニングバトルの実装


目的: 主人公のレベルを10に上げるための簡易戦闘を実装します。この戦闘は5ターンで自動終了します。


// トレーニングバトルの開始(詳細は前述)

void start_training_battle() {

// 既に定義済み

}


// バトルループや終了処理も前述


11.6. レベルアップの実装


目的: トレーニングバトルに勝利すると経験値を獲得し、レベルアップします。


// レベルアップ関数(前述)

void level_up() {

if (player_experience >= experience_to_next_level) {

player_level++;

player_experience -= experience_to_next_level;

player_max_hp += 10;

player_max_mana += 5;

player_attack += 2;

player_defense += 1;

display_text("レベルが上がった! 現在のレベル: " + int_to_str(player_level));

}

}



---


次の話で

もう一度

プログラム展開をします。

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る