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

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 RADIUS_R = 80; // 赤い円の半径
    int bx = WIDTH / 2, by = HEIGHT / 2; // 青い円の中心座標を代入する変数
    const int RADIUS_B = 120; // 青い円の半径

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

        int mouse_x, mouse_y; // マウスポインタの座標を代入する変数
        GetMousePoint(&mouse_x, &mouse_y); // 座標を変数に代入
        rx = mouse_x; // 赤い円の座標の変数にマウスポインタの座標を代入
        ry = mouse_y; // この代入により円をマウスで動かせる

        int col = 0xff0000; // 赤い色の値 16進数
        // 2つの円の中心間の距離を求める
        int dis = std::sqrt((rx - bx) * (rx - bx) + (ry - by) * (ry - by));
        if (dis <= RADIUS_R + RADIUS_B) col = 0xffffff; // 接触した時、白い色の値 16進数を代入

        DrawCircle(rx, ry, RADIUS_R, col, TRUE);      // 赤い円を描く
        DrawCircle(bx, by, RADIUS_B, 0x0000ff, TRUE); // 青い円を描く

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

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