


ゲームは作れたが、メニューの作り方が分からない!そんな質問が多かったので今回はメニューの作り方を紹介します。
今回のメニュー画面の作り方は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」変数が今どのシーンなのかという状態を持っています。
この値を変更することでメインループから分岐する処理を制御しています。
今回はすべて一つのファイルに書きましたが、実際はMenuやGameの中身が膨大な大きさになるはずです。
従ってファイル分割を適切に行わないととても読めたコードになりません。
そこで、次の節で、メニュー部、ゲーム部、設定部、そしてシーン管理部に分けてみましょう。
- Remical Soft -