忍者ブログ

リリカルリミテッド

リリカルリミテッドが販売しているゲームやイラスト集のサポート用のブログです。

シーンベースとシーンタイトルの解説

#include <stdio.h>
#include <windows.h>
#include <math.h>
#include "scene.h"
#include "DxLib.h"
#include "MyLib.h"

//#define INFO_HP_SX 112
//---------------------------------------------------------------------------
//グローバル変数
//---------------------------------------------------------------------------
bool CLOSE_FLAG = false;
SceneBase* SCENE, * NEXT_SCENE;
//---------------------------------------------------------------------------
//このファイルでしか使えない静的変数
//---------------------------------------------------------------------------
static int GHANDLE1[256];//マップ描画用のタイル画像
static int GHANDLE_CHAR[1024];//キャラクター描画用のタイル画像

//---------------------------------------------------------------------------
//外部参照変数
//---------------------------------------------------------------------------
extern unsigned char MAPDATA[64][64];
extern unsigned char MAPDATA2[64][64];
extern unsigned char CHAR_DATA[64][64];
extern unsigned char CHAR_HIT_DATA[64][64];//キャラクターの当たり判定用
extern unsigned char DEAD_SPACE_DATA[64][64];

extern int GAME_VARIABLES[100];
extern int HANDLE1;
extern int MAP_X, MAP_Y, POS_X, POS_Y;
extern int MOVE_STEP;

extern int CHR_POS;
extern int NPC_MAX;

extern int NPC_movement_weight;

extern struct GAME_ACTOR actor[5];
extern struct GAME_ACTOR actor_base;
extern struct GAME_ACTOR actor_base2;
extern struct GAME_ACTOR actor_base3;
extern struct GAME_ACTOR actor_base4;
extern struct GAME_PARTY game_party[5];
extern struct GAME_CHARACTER npc[32];

//-------------------------------------------------------------
// シーンの基本クラス
//-------------------------------------------------------------
SceneBase::SceneBase() {
    //Info_Window = &win3;//基本クラスのポインタに代入
}

SceneBase::~SceneBase() {

}

void SceneBase::start() {
    //Info_Window->visible = false;//infoウィンドウ非表示
}

void SceneBase::main() {
    int code;

    start();
    do {
        update();
        code = WaitTimer(1);//ウェイト0.1秒
        // ウインドウの閉じるボタンが押されたかどうかを取得する
        if (GetWindowUserCloseFlag(false) != 0) {//フォームのクローズボタンが押されたらCLOSE_FLAG=true
            CLOSE_FLAG = true;
        }
    } while ((SCENE == NEXT_SCENE) && (!CLOSE_FLAG) && (code == 0));
    //if (CLOSE_FLAG) {
        transition(0, 0);//フェードアウト
    //}
}

void SceneBase::update() {

}

//-------------------------------------------------------------
// タイトルクラス
//-------------------------------------------------------------
Title::Title() {
    //タイトルの背景グラフィックをメモリへの読みこみ
    GHandle = LoadGraph(".\\picture\\Title.bmp");

    Command_Window = &win;//基本クラスのポインタに代入
}

Title::~Title() {
    // 読み込んだ画像のグラフィックハンドルを削除
    DeleteGraph(GHandle);
}

void Title::start() {
    BGM_Manage(3);
    logo_draw();//リリカルリミテッドのロゴ描画

    BGM_Manage(1);//タイトルBGM
    //waip(Bitmap);//読み込んだビットマップを表示画面にワイプ表示する
    // 作成した裏画像を描画対象にする
    set_draw_screen_back();
    // 画面左上に描画します(『DrawGraph』を使用)
    DrawGraph(0, 0, GHandle, FALSE);
    transition(1, 0);//フェードイン
    Command_Window->set(320 - 80, 360, 160, 104);
}

void Title::main() {
    int code;

    start();
    do {
        update();
        code = WaitTimer(1);//ウェイト0.1秒
        // ウインドウの閉じるボタンが押されたかどうかを取得する
        if (GetWindowUserCloseFlag(false) != 0) {//フォームのクローズボタンが押されたらCLOSE_FLAG=true
            CLOSE_FLAG = true;
        }
    } while ((SCENE == NEXT_SCENE) && (!CLOSE_FLAG) && (code == 0));
    //if (CLOSE_FLAG) {
        transition(0, 0);//フェードアウト
    //}
}

void Title::update() {
    // 作成した裏画像を描画対象にする
    set_draw_screen_back();
    // 画面を初期化
    ClearDrawScreen();
    // 画面左上にタイトル画像を描画します(『DrawGraph』を使用)
    DrawGraph(0, 0, GHandle, FALSE);
    //ウィンドウ表示
    Command_Window->set(320 - 80, 360, 160, 104);
    Command_Window->update();

    //インプットトリガー
    if (get_button() == 1) {
        switch (Command_Window->index) {
        case 0:
            //ゲームパーティーの初期化 v1~v3 0..3
            game_party_settings_actor_to_party(0, 1, 2, 3, true, true);
           
            //SaveEnemyData();//エネミーデータの構造体を保存
            MakeLevelUpList();//レベルアップ経験値リスト作成

            game_variables_initialization();//ゲーム変数の初期化

            NEXT_SCENE = new Map;//基本クラスのポインタに代入
            SEPlay(0);//決定
            break;
        case 1:
            SEPlay(0);//決定
            //SaveEnemyData();//エネミーデータの構造体を保存
            MakeLevelUpList();//レベルアップ経験値リスト作成

            //LOAD_FILE_MODE = 1;//Title画面に戻る
            //NEXT_SCENE = new GLoadFile;//基本クラスのポインタに代入
            break;
        case 2:
            SEPlay(0);//決定
            // DXライブラリ使用の終了処理
            CLOSE_FLAG = true;            // ソフトの終了
            break;
        }
    }

    //表示スクリーンにコピー
    set_draw_screen_front();
    // 描画対象画像を画面いっぱいに拡大して描画する
    DrawRectGraph(0, 0, 0, 0, 640, 480, HANDLE1, FALSE, FALSE);

    if (get_button() == 15) {//F5
        Screen_size_change();//スクリーンサイズ変更
    }
}
void Title::logo_draw() {
    return;
    //擬似ラスタースクロール
    double vibration = 0.2;
    double v_width = 256.0;
    double offset_x, offset_y, i = 160.0;
    double gap[100];
    double j;
    int k;
    int GrHandle;

    GrHandle = LoadGraph(".\\picture\\logo.bmp");

    for (k = 0; k <= 256; k++) {
        // 作成した裏画像を描画対象にする
        set_draw_screen_back();
        // 画面を初期化
        ClearDrawScreen();
        for (j = 0; j <= 64; j += 1.0) {
            gap[(int)j] = v_width * sin(vibration * double(j + i));
            offset_x = (640 / 2) - (256 / 2);
            offset_y = (480 / 2) - (64 / 2);
            // 透過色処理あり、反転処理なしで描画
            DrawRectGraph((int)(gap[(int)j] + offset_x), (int)(j + offset_y), 0, (int)j, 256, 1, GrHandle, TRUE, FALSE);
            ProcessMessage();
        }
        i -= 2.5;   //スピード
        vibration += 0.0001;         //振動数
        v_width -= 1.0;               //振れ幅
        //表示スクリーンにコピー
        set_draw_screen_front();
        // 描画対象画像を画面いっぱいに拡大して描画する
        DrawRectGraph(0, 0, 0, 0, 640, 480, HANDLE1, FALSE, FALSE);
        WaitTimer(1);
    }
    
    //完成画像表示
    // 作成した裏画像を描画対象にする
    set_draw_screen_back();
    // 画面を初期化
    ClearDrawScreen();
    DrawRectGraph((640 / 2) - (256 / 2), (480 / 2) - (64 / 2), 0, 0, 256, 64, GrHandle, TRUE, FALSE);
    //表示スクリーンにコピー
    set_draw_screen_front();
    // 描画対象画像を画面いっぱいに拡大して描画する
    DrawRectGraph(0, 0, 0, 0, 640, 480, HANDLE1, FALSE, FALSE);
    // ここで3秒まつ
    WaitTimer(1000);
    
    //文字表示
    // 描画する文字列の文字セットを変更します
    ChangeFont("MS ゴシック");
    // フォントのタイプをエッジつきアンチエイリアスフォントに変更
    ChangeFontType(DX_FONTTYPE_ANTIALIASING);
    // 描画する文字列の太さを設定
    SetFontThickness(1);
    // 描画する文字列のサイズを設定
    SetFontSize(18);
    unsigned int Cr;
    // 白色の値を取得
    Cr = GetColor(255, 255, 255);

    // 作成した裏画像を描画対象にする
    set_draw_screen_back();
    // 画面を初期化
    ClearDrawScreen();
    // 文字列の描画
    DrawString((640 / 2) - (240 / 2), (480 / 2) - (32 / 2), "Music T.M.BACH", Cr);
    //表示スクリーンにコピー
    set_draw_screen_front();
    // 描画対象画像を画面いっぱいに拡大して描画する
    DrawRectGraph(0, 0, 0, 0, 640, 480, HANDLE1, FALSE, FALSE);
    // ここで3秒まつ
    WaitTimer(2000);

    // 作成した裏画像を描画対象にする
    set_draw_screen_back();
    // 画面を初期化
    ClearDrawScreen();
    // 文字列の描画
    DrawString((640 / 2) - (240 / 2), (480 / 2) - (32 / 2), "Program Tomomi", Cr);
    //表示スクリーンにコピー
    set_draw_screen_front();
    // 描画対象画像を画面いっぱいに拡大して描画する
    DrawRectGraph(0, 0, 0, 0, 640, 480, HANDLE1, FALSE, FALSE);
    // ここで3秒まつ
    WaitTimer(2000);
    // 読み込んだ画像のグラフィックハンドルを削除
    DeleteGraph(GrHandle);
}


これを作るのに、RGSSをかなり参考にしました。
「バルキリーの冒険」で、すでに実装していたんですけど。
Visual Studioに開発環境を変えて、コードを書き直しました。

今のところあまり大きなバグは出ていないです。
PR

コメント

プロフィール

HN:
朋美姫
年齢:
30
性別:
女性
誕生日:
1993/07/07
職業:
ゲームクリエイター
趣味:
ゲーム キャンプ

P R