第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));
}
}
---
次の話で
もう一度
プログラム展開をします。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます