ゲームプログラムの設計について、クラスやソースファイルに分けて作るゲームの設計そのものがわからないのです。

「計算」と「描画」の二つに分けるということは調べてわかったのですが、それをどのようにしてプログラムとして組むのかがわかりません。今は「とりあえず動けばいい」という感じで組んでいますが、もう少しちゃんと組もうとするとどうすればいいのか教えてくれますでしょうか？

```

    #include "DxLib.h"
    #include "math.h"
    //#include <iostream>
    constexpr double PI = 3.141592654;
    constexpr double radian = PI / 180.0;
    int Key[256];
    int gpUpdateKey()
    {
        char tmpkey[256];
        GetHitKeyStateAll(tmpkey);
        for (int i = 0; i < 256; i++)
        {
            if (tmpkey[i] != 0) {
                Key[i]++;
            }
            else {
                Key[i] = 0;
            }
        }
        return 0;
    }
    
    /*ハンドル*/
    //x:48  y : 64
    //ウインドウサイズ x:640 y:480
    //int pos_x = (640 / 2) - (48 / 2);
    //int pos_y = (480 / 2) - (64 / 2);
    
    int pos_x = 200;
    int pos_y = 380;
    
    int x = pos_x;
    int y = pos_y;
    int Select = 0;
    
    int Count = 0;
    int color;
    int hResource;
    int hBall;
    int hCharacter[16];
    
    int xx = pos_x;
    int yy = pos_y;
    
    typedef struct
    {
        int x;
        int y;
        char name[128];
    }Menu_t;
    
    Menu_t SelectMenu[3] = {
        {200,50,"ゲーム開始"},
        {100,100,"コンテニュー"},
        {100,150,"終了"},
    };
    
    /*計算*/
    void Calc();
    void Calc() {
    
    }
    
    void end() {
    
    }
    
    int WINAPI WinMain(HINSTANCE hInstanve, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        ChangeWindowMode(true), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
        color = GetColor(0, 255, 0);
        hResource = LoadGraph("Resource.png");
        hBall = LoadGraph("Ball.png");
        hCharacter[16] = { 0 };
        int hBlock = LoadGraph("Block.png");
        LoadDivGraph("char.png", 16, 4, 4, 32, 32, hCharacter);
        int color = GetColor(255,255,255);
    
        int direction = 1;
        double angle = PI * 2 / 8;
        while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0) {
    
            DrawGraph(pos_x, pos_y, hBlock, TRUE);
    
        //  pos_x += 2 * cos(0.0174533 * 30);
        //  pos_y -= 2 * sin(0.0174533 * 30);
    
            pos_x += 2 * cos(radian * 30);
            pos_y -= 2 * sin(radian * 30);
    
            DrawFormatString(0,0,color,"pos_x:%d",pos_x);
            DrawFormatString(0,15, color,"pos_y:%d", pos_y);
            if (CheckHitKey(KEY_INPUT_ESCAPE) == 1 || CheckHitKey(KEY_INPUT_RETURN) == 1) {
                return -1;
            }
        }
        WaitKey();
        return 0;
    }
    
```
CC BY-SA 4.0
2018-10-09T11:44:55.127
49112
2018-10-10T04:49:25.000
2018-10-10T04:49:25.000
3060
question
c++
ゲームプログラミング設計について知りたい