#include "DxLib.h"
#include <cstdlib> // abs()を使用する

const int WIDTH = 960, HEIGHT = 640; // ウィンドウの幅と高さのピクセル数

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    // ＤＸライブラリを使用する準備
    SetWindowText("ゲーム開発のアルゴリズム"); // ウィンドウのタイトル
    SetGraphMode(WIDTH, HEIGHT, 32); // ウィンドウの大きさとカラービット数の指定
    ChangeWindowMode(TRUE); // ウィンドウモードで起動
    if (DxLib_Init() == -1) return -1; // ライブラリ初期化 エラーが起きたら終了
    SetBackgroundColor(0, 0, 0); // 背景色の指定
    SetDrawScreen(DX_SCREEN_BACK); // 描画面を裏画面にする

    int rx = 0, ry = 0; // 赤い矩形の中心座標を代入する変数
    const int WIDTH_R = 200;  // 赤い矩形の幅
    const int HEIGHT_R = 100; // 赤い矩形の高さ
    int bx = WIDTH / 2, by = HEIGHT / 2; // 青い矩形の中心座標を代入する変数
    const int WIDTH_B = 200;  // 青い矩形の幅
    const int HEIGHT_B = 300; // 青い矩形の高さ

    while (true) { // メインループ
        ClearDrawScreen(); // 画面をクリアする

        // カーソルキーで赤い矩形を移動する
        if (CheckHitKey(KEY_INPUT_UP) && ry > 0) ry -= 10;        // 上キー
        if (CheckHitKey(KEY_INPUT_DOWN) && ry < HEIGHT) ry += 10; // 下キー
        if (CheckHitKey(KEY_INPUT_LEFT) && rx > 0) rx -= 10;      // 左キー
        if (CheckHitKey(KEY_INPUT_RIGHT) && rx < WIDTH) rx += 10; // 右キー

        int col = 0xff0000; // 赤い色の値 16進数
        int dx = std::abs(rx - bx); // x軸方向の距離を求める
        int dy = std::abs(ry - by); // y軸方向の距離を求める
        // 矩形が接触すれば白い色の値を代入
        if (dx <= (WIDTH_R + WIDTH_B) / 2 && dy <= (HEIGHT_R + HEIGHT_B) / 2) col = 0xffffff;
        DrawBox(rx - WIDTH_R / 2, ry - HEIGHT_R / 2, rx + WIDTH_R / 2, ry + HEIGHT_R / 2, col, TRUE); // 赤い矩形を描く
        DrawBox(bx - WIDTH_B / 2, by - HEIGHT_B / 2, bx + WIDTH_B / 2, by + HEIGHT_B / 2, 0x0000ff, TRUE); // 青い矩形を描く

        ScreenFlip(); // 裏画面の内容を表画面に反映させる
        WaitTimer(33); // 一定時間待つ
        if (ProcessMessage() == -1) break; // Windowsから情報を受け取りエラーが起きたら終了
        if (CheckHitKey(KEY_INPUT_ESCAPE) == 1) break; // ESCキーが押されたら終了
    }

    DxLib_End(); // ＤＸライブラリ使用の終了処理
    return 0; // ソフトの終了
}