基本のゲームループ+class

Listing. 1: 基本のゲームループ+class
"theMain.cpp
#include "DxLib.h"
#include "Input.h"
 
 
namespace
{
	const int WIN_WIDTH = 1024;
	const int WIN_HEIGHT = 768;
	int crrTime;
	int prevTime;
}
 
class Game
{
	enum GAMESTATE//ゲームシーケンス(タイトル、プレイ画面、ゲームオーバー)
	{
		TITLE, PLAY, GAMEOVER, MAXSTATE
	};//各状態で、スペースキーを押したら次の状態に移動する
public:
	Game();//コンストラクタ 初期化用関数
	~Game();//デストラクタ   削除用関数
	GAMESTATE stat;
	void Init();
	void Update();
	//各状態のアップデート関数
	void UpdateTitle();
	void UpdatePlay();
	void UpdateGameOver();
	void Draw();
	//各状態の描画関数
	void DrawTitle();
	void DrawPlay();
	void DrawGameOver();
};
 
Game::Game()
{
}
 
Game::~Game()
{
}
 
void Game::Init()
{
	stat = GAMESTATE::TITLE;//かっこいい
}
 
void Game::Update()//毎フレームのデータ更新処理
{
	if (stat == GAMESTATE::TITLE)
	{
		UpdateTitle();
	}
	else if (stat == GAMESTATE::PLAY)
	{
		UpdatePlay();
	}
	else if (stat == GAMESTATE::GAMEOVER)
	{
		UpdateGameOver();
	}
}
 
void Game::UpdateTitle()
{
	if (Input::IsKeyDown(KEY_INPUT_SPACE))
	{
		stat = GAMESTATE::PLAY;
	}
}
 
void Game::UpdatePlay()
{
	if (Input::IsKeyDown(KEY_INPUT_SPACE))
	{
		stat = GAMESTATE::GAMEOVER;
	}
}
 
void Game::UpdateGameOver()
{
	if (Input::IsKeyDown(KEY_INPUT_SPACE))
	{
		stat = GAMESTATE::TITLE;
	}
}
 
void Game::Draw()
{
	if (stat == GAMESTATE::TITLE)
	{
		DrawTitle();
	}
	else if (stat == GAMESTATE::PLAY)
	{
		DrawPlay();
	}
	else if (stat == GAMESTATE::GAMEOVER)
	{
		DrawGameOver();
	}
}
 
void Game::DrawTitle()
{
	DrawString(100, 100, "TITLE", GetColor(0,0,0));
}
 
void Game::DrawPlay()
{
	DrawString(100, 100, "PLAY", GetColor(0, 0, 0));
}
 
void Game::DrawGameOver()
{
	DrawString(100, 100, "GAMEOVER", GetColor(0, 0, 0));
}
 
 
 
//
//void Init();
//void Update(float dTime);
//void Draw(float dTime);
 
 
void DxInit()
{
	ChangeWindowMode(true);
	SetWindowSizeChangeEnableFlag(false, false);
	SetMainWindowText("TITLE");
	SetGraphMode(WIN_WIDTH, WIN_HEIGHT, 32);
	SetWindowSizeExtendRate(1.0);
	SetBackgroundColor(255, 250, 205);
 
	// DXライブラリ初期化処理
	if (DxLib_Init() == -1)
	{
		DxLib_End();
	}
 
	SetDrawScreen(DX_SCREEN_BACK);
}
 
 
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)
{
	DxInit();
	prevTime = GetNowCount();
	Game game;
 
	game.Init();
 
	while (true)
	{
		ClearDrawScreen();
		Input::KeyStateUpdate();
		//ここにやりたい処理を書く
		crrTime = GetNowCount();
		float deltaTime = (crrTime - prevTime) / 1000.0;//フレーム間時間(s)
 
		game.Update();
		game.Draw();
 
 
		DrawFormatString(20, 50, GetColor(0, 0, 0), "%lf", deltaTime);
		ScreenFlip();
		WaitTimer(16);
 
		prevTime = crrTime;
		if (ProcessMessage() == -1)
			break;
		if (CheckHitKey(KEY_INPUT_ESCAPE) == 1)
			break;
	}
 
	DxLib_End();
	return 0;
}