ホームへ戻る

 sp3章 メニュー画面の作り方.1

 ゲームは作れたが、メニューの作り方が分からない!そんな質問が多かったので今回はメニューの作り方を紹介します。

今回のメニュー画面の作り方は3節構成(全5節)で紹介します。

 .1 で簡単な最小限なコードでメニューをまず作ってみます。

 .2 でそれをファイル分割して中規模以上のゲーム開発にも対応できるようにします。

 .3 でロード・破棄の仕組みも入れて完成です。

それでは、1章の内容に入っていきます。

まず、ごく簡単な作りでメニュー画面の基礎を作ってみましょう。

こんな感じでメインループの中から、現在何の画面(シーン)なのかという情報を元に処理を分岐させてみましょう。


#include "DxLib.h"

typedef enum {
    eScene_Menu,    //メニュー画面
    eScene_Game,    //ゲーム画面
    eScene_Config,  //設定画面
} eScene ;

static int Scene = eScene_Menu;    //現在の画面(シーン)

//シーンを更新する
void UpdateScene(){
    DrawString(0,20,"Gキーでゲーム画面、Cキーで設定、Mキーでメニュー画面になります。",GetColor(255,255,255));
    if(CheckHitKey(KEY_INPUT_G)!=0){
        Scene = eScene_Game;
    }
    if(CheckHitKey(KEY_INPUT_C)!=0){
        Scene = eScene_Config;
    }
    if(CheckHitKey(KEY_INPUT_M)!=0){
        Scene = eScene_Menu;
    }
}

//メニュー画面
void Menu(){
    DrawString(0,0,"メニュー画面です。",GetColor(255,255,255));
}

//ゲーム画面
void Game(){
    DrawString(0,0,"ゲーム画面です。",GetColor(255,255,255));
}

//設定画面
void Config(){
    DrawString(0,0,"設定画面です。",GetColor(255,255,255));
}

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){

            switch(Scene){//現在のシーンにあった処理をする
            case eScene_Menu://現在のシーンがメニューなら
                Menu();//メニュー画面
                break;
            case eScene_Game://現在のシーンがゲームなら
                Game();//ゲーム画面
                break;
            case eScene_Config://現在のシーンが設定なら
                Config();//設定画面
                break;
            }
        
            UpdateScene();//シーンを更新する

        }
        
        DxLib_End(); // DXライブラリ終了処理
        return 0;
} 

# 「static」と先頭についている変数はこのソースファイルからしかアクセスできないことを意味します。

「Scene」変数が今どのシーンなのかという状態を持っています。

この値を変更することでメインループから分岐する処理を制御しています。

本プログラムのプロジェクト一式はこちらからDLできます。

今回はすべて一つのファイルに書きましたが、実際はMenuやGameの中身が膨大な大きさになるはずです

従ってファイル分割を適切に行わないととても読めたコードになりません。

そこで、次の節で、メニュー部、ゲーム部、設定部、そしてシーン管理部に分けてみましょう。

→分からないことがあれば掲示板で質問して下さい


- Remical Soft -