楽にDxLibを使うためのテンプレ


よく使う処理をテンプレにする

ループ処理

namespace System {
    bool Update() { return (DxLib::ScreenFlip() != -1 && DxLib::ClearDrawScreen() != -1 && DxLib::ProcessMessage() != -1); }
}

Update()関数で画面の更新・画面消去・メッセージ処理をします。
ループ処理をいちいち書くのは面倒なのでまとめました。

Siv3Dライクな書き方をしています。

前処理

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    //初期化前に書く処理
    DxLib::ChangeWindowMode(TRUE);

    //初期化
    if (DxLib::DxLib_Init() == -1) return -1;

    //初期化後に書く処理
    DxLib::SetDrawScreen(DX_SCREEN_BACK);

    Main();
    return DxLib::DxLib_End();
}

メイン関数(の役割を担う関数)をvoid Main()に移しました。
int WINAPI WinMain 関数はプログラム開始時の前処理を書く場所として使用します。

上記のサンプルコードでは最低限使用する関数のみが書かれています。
実際に使用するときは"画面サイズ変更"関数"や"タイトル変更"関数を加えます。

メイン処理

void Main() {

    //メインループ
    while (System::Update()) {}

}

メインの処理はvoid Main()に書きます。
while (System::Update())で簡単にメインループが使用できます。

テンプレ完成

Source.cpp
#include "DxLib.h"

//ループ
namespace System {
    bool Update() { return (DxLib::ScreenFlip() != -1 && DxLib::ClearDrawScreen() != -1 && DxLib::ProcessMessage() != -1); }
}

void Main();

//前処理を書く場所
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    //初期化前に書く処理
    DxLib::ChangeWindowMode(TRUE);

    //初期化
    if (DxLib::DxLib_Init() == -1) return -1;

    //初期化後に書く処理
    DxLib::SetDrawScreen(DX_SCREEN_BACK);

    Main();
    return DxLib::DxLib_End();
}

//メイン関数
void Main() {

    //メインループ
    while (System::Update()) {}

}
コメント無し版
#include "DxLib.h"

namespace System {
    bool Update() { return (DxLib::ScreenFlip() != -1 && DxLib::ClearDrawScreen() != -1 && DxLib::ProcessMessage() != -1); }
}

void Main();

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    DxLib::ChangeWindowMode(TRUE);
    if (DxLib::DxLib_Init() == -1) return -1;
    DxLib::SetDrawScreen(DX_SCREEN_BACK);
    Main();
    return DxLib::DxLib_End();
}

void Main() {

    while (System::Update()) {}

}
C++17サンプル
#include <DxLib.h>

namespace System {
    bool Update() { return (DxLib::ScreenFlip() != -1 && DxLib::ClearDrawScreen() != -1 && DxLib::ProcessMessage() != -1); }
}

void Main();

int WINAPI WinMain([[maybe_unused]]HINSTANCE hInstance, [[maybe_unused]]HINSTANCE hPrevInstance, [[maybe_unused]]LPSTR lpCmdLine, [[maybe_unused]]int nCmdShow)
{
    DxLib::SetOutApplicationLogValidFlag(FALSE);
    DxLib::ChangeWindowMode(TRUE);
    DxLib::SetGraphMode(512, 512, 32);
    if (DxLib::DxLib_Init() == -1) return -1;
    DxLib::SetDrawScreen(DX_SCREEN_BACK);
    DxLib::SetMainWindowText("Sample");
    Main();
    return DxLib::DxLib_End();
}

void Main() {

    while (System::Update()) {

    }

}
楽ちん版
#include "DxLib.h"

namespace System {
    bool Update() { return (DxLib::ScreenFlip() != -1 && DxLib::ClearDrawScreen() != -1 && DxLib::ProcessMessage() != -1); }
}

void Main();

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    DxLib::SetOutApplicationLogValidFlag(FALSE);
    DxLib::ChangeWindowMode(TRUE);
    DxLib::SetGraphMode(512, 512, 32);
    DxLib::SetMainWindowText("Sample");
    if (DxLib::DxLib_Init() == -1) return -1;
    DxLib::SetDrawScreen(DX_SCREEN_BACK);
    Main();
    return DxLib::DxLib_End();
}

void Main() {

    while (System::Update()) {



    }

}

ソースコードのライセンス

These codes are licensed under CC0.

ソースコードは自由に使用してください。