プログラマーの卵の日記

備忘録になってます!小難しそうなことから超簡単なことまでやってます!!

【DxLib】俺が考えた簡単入力(Xbox/Key/Mouse)処理

コード載せるので記事くそ長くなります。

構成


No.1 前座
No.2 キーボード処理
No.3 マウス処理
No.4 Xboxコントローラー処理
No.5 テストのためのmain







    No.1 前座


 DxLibでゲーム作るときにXboxコントローラーの処理だったりキーボードの入力処理だったりマウスの入力処理だったり必要になると思うんですが、
それを出来るだけ使いやすいように作ったものがあるので一つの案として参考にしてみてはどうでしょうという話。
見ればわかるけどめちゃくちゃ静的領域使ってるのでこう改善した方がいいとかあったら助かります。





    No.2 キーボード処理


まぁ欲しいよね、キーボード処理。


#pragma once
#ifndef _INPUTKEY_HPP
#define _INPUTKEY_HPP
#include "DxLib.h"



// キーボードの入力状態
class KeyData
{
private:
	static int m_key[256];		// キーの入力状態格納用変数
	static char m_tmpKey[256];	// 現在のキーの入力状態を格納する

public:
	static void UpDate();			// キー入力の状態更新


	static const int& Get(const int& t_keyCode);		// キー入力状態取得
	static const bool IsCheckEnd();					// 強制終了
};


#endif // !_INPUTKEY_HPP




#include "InputKey.hpp"



/// ------------------------------------------------------------------------------------------------------------

int KeyData::m_key[256];
char KeyData::m_tmpKey[256];



/// ------------------------------------------------------------------------------------------------------------
void KeyData::UpDate()
{
	// 全てのキーの入力状態を得る(押されたら1を出力し、押されていなかったら0を返す
	if (GetHitKeyStateAll(m_tmpKey) == -1) return;


	// 全キー入力処理
	for (int i = 0; i < 256; ++i)
	{
		// 押されていなかったら
		if (m_tmpKey[i] == 0)
		{
			if (m_key[i] < 0)
			{
				m_key[i] = 0;
			}
			else if (m_key[i] > 0)
			{
				m_key[i] = -1;
			}
		}
		// i番のキーコードに対応するキーが押されていたら
		 else if (m_tmpKey[i] == 1)
		{
			m_key[i]++;
		}
	}
}



/// ------------------------------------------------------------------------------------------------------------
const int& KeyData::Get(const int& t_keyCode)
{
	return m_key[t_keyCode];
}



/// ------------------------------------------------------------------------------------------------------------
const bool KeyData::IsCheckEnd()
{
	return m_key[KEY_INPUT_ESCAPE] > 0;
}






    No.3 マウス処理


ツールとか作り出すとマウスの処理欲しくなるので作ってみたっていう話。


#pragma once
#ifndef _INPUTMOUSE_HPP
#define _INPUTMOUSE_HPP
#include "DxLib.h"



// マウス
class MouseData
{
private:
	static int m_mouse[3];
	static int m_mouseInput;
	struct MouseXY
	{
		int x;
		int y;
	};
	static MouseXY m_preMouseArea;
	static MouseXY m_mouseArea;


public:
	//左クリックか右クリックか
	enum class ECLICK { LEFT, RIGHT, CENTER };


	//マウスのクリックの状態を更新する
	static void UpDate();

	//マウスのクリックの状態を返す
	static const int& GetClick(const ECLICK& t_mouseCode);

	// 現在のマウスの位置
	static const MouseXY& GetMouseArea();

	// 直前からどれくらい移動したか
	static const MouseXY GetMouseMoveValue();
};



// マウスホイール
class MouseWheelData
{
private:
	static int m_mouseWheel;
	static int m_oldMouseWheel;


public:
	//マウスのホイールの状態を更新
	static void UpDate();

	//マウスホイールの状態を返す
	static const int& GetMouseWheel();
};


#endif // !_INPUTMOUSE_HPP




#include "InputMouse.hpp"



/// ------------------------------------------------------------------------------------------------------------

int MouseData::m_mouse[3];
int MouseData::m_mouseInput;
MouseData::MouseXY MouseData::m_preMouseArea;
MouseData::MouseXY MouseData::m_mouseArea;



/// ------------------------------------------------------------------------------------------------------------
void MouseData::UpDate()
{
	// PCゲーである以上、マウスのない状態が想定できないのでエラー処理は省く
	m_mouseInput = GetMouseInput();

	m_preMouseArea.x = m_mouseArea.x;
	m_preMouseArea.y = m_mouseArea.y;
	GetMousePoint(&m_mouseArea.x, &m_mouseArea.y);


	for (int i = 0; i != 3; ++i)
	{
		// 押されていなかったら
		if ((m_mouseInput & 1 << i)/* 左は1 / 右は2 / 真ん中は4 */ == 0)
		{
			if (m_mouse[i] < 0)
			{
				m_mouse[i] = 0;
			}
			else if (m_mouse[i] > 0)
			{
				m_mouse[i] = -1;
			}
		}
		// 押されていたら
		else
		{
			m_mouse[i]++;
		}
	}
}



/// ------------------------------------------------------------------------------------------------------------
const int& MouseData::GetClick(const ECLICK& t_mouseCode)
{
	return m_mouse[static_cast(t_mouseCode)];
}



/// ------------------------------------------------------------------------------------------------------------
const MouseData::MouseXY& MouseData::GetMouseArea()
{
	return m_mouseArea;
}



/// ------------------------------------------------------------------------------------------------------------
const MouseData::MouseXY MouseData::GetMouseMoveValue()
{
	return { m_mouseArea.x - m_preMouseArea.x, m_mouseArea.y - m_preMouseArea.y };
}



/// ------------------------------------------------------------------------------------------------------------

int MouseWheelData::m_mouseWheel;
int MouseWheelData::m_oldMouseWheel;



/// ------------------------------------------------------------------------------------------------------------
void MouseWheelData::UpDate()
{
	if (m_oldMouseWheel == m_mouseWheel)
	{
		if (m_mouseWheel != 0) m_mouseWheel = 0;
		return;
	}
	else
	{
		m_oldMouseWheel = m_mouseWheel;
	}


	if (m_oldMouseWheel - m_mouseWheel > 0)
	{
		m_mouseWheel++;
	}
	else if (m_oldMouseWheel - m_mouseWheel < 0)
	{
		m_mouseWheel--;
	}
}



/// ------------------------------------------------------------------------------------------------------------
const int& MouseWheelData::GetMouseWheel()
{
	return m_mouseWheel += GetMouseWheelRotVol();
}






    No.4 Xboxコントローラー処理


Xboxコントローラーの処理はこんな感じ。


#pragma once
#ifndef _INPUTCONTROLLER_HPP
#define _INPUTCONTROLLER_HPP


#include "DxLib.h"
namespace PadStick
{
	const int LEFT_TRIGGER = 0;
	const int RIGHT_TRIGGER = 1;
	const int LEFT_STICK_X = 2;
	const int LEFT_STICK_Y = 3;
	const int RIGHT_STICK_X = 4;
	const int RIGHT_STICK_Y = 5;

	const int STICK_MAX_VALUE = 32767;
	const int STICK_MIN_VALUE = -32768;
}



// ゲームパッドの入力状態
class PadData 
{
private:
	static int m_button[4][16];		// ゲームパッドの入力状態格納用変数
	static int m_stick[4][6];		// ゲームパッドのスティック関連の入力状態収納用変数
	static int m_stickCheck[4][8];	// ゲームパッドのスティックの入力状態収納用変数の最大までの倒しチェック
	static int m_trigger[4][2];		// ゲームパッドのトリガーの入力状態収納用変数


	// ゲームパッドのスティックのデッドゾーン数値を保存
	static short stickLX_DeadZoneMAX;
	static short stickLX_DeadZoneMIN;
	static short stickLY_DeadZoneMAX;
	static short stickLY_DeadZoneMIN;
	static short stickRX_DeadZoneMAX;
	static short stickRX_DeadZoneMIN;
	static short stickRY_DeadZoneMAX;
	static short stickRY_DeadZoneMIN;


	static XINPUT_STATE m_input[4];	// ゲームパッドのナンバー
	static char m_padNum;			// 繋がってるゲームパッドの数


	enum class EStickCheck 
	{
		LEFT_STICK_LEFT, LEFT_STICK_DOWN, RIGHT_STICK_LEFT, RIGHT_STICK_DOWN
		, LEFT_STICK_RIGHT, LEFT_STICK_UP, RIGHT_STICK_RIGHT, RIGHT_STICK_UP
	};



public:
	static void UpDate();		// ゲームパッドの入力の状態更新


	static const int& GetButton(const int& t_code, const int& t_padNum);									// ボタンの入力状態取得
	static const int& GetTrigger(const int& t_code, const int& t_padNum);								// トリガーの取得
	static const int& GetStick(const int& t_code, const int& t_padNum);									// スティックの入力状態取得
	static const int& GetStickCheck(const int& t_code, const int& t_padNum, const bool& t_leftAndDownIsTrue);	// スティックの押し倒し取得


	static const bool IsCheckEnd();																		// 強制終了
	static const char& GetPadNum();																		// 接続されてるゲームパッドの数


	static inline void SetDedZone(const short& t_stickLX_MAX, const short& t_stickLX_MIN, const short& t_stickLY_MAX, const short& t_stickLY_MIN
		, const short& t_stickRX_MAX, const short& t_stickRX_MIN, const short& t_stickRY_MAX, const short& t_stickRY_MIN);					// デッドゾーンの設定
	static inline void SetPadNum();																		// 接続されてるゲームパッドを取得する
};



/// ---------------------------------------------------------------------------------------------------------------------------------------------------------
inline void PadData::SetDedZone(const short& t_stickLX_MAX, const short& t_stickLX_MIN, const short& t_stickLY_MAX, const short& t_stickLY_MIN
	, const short& t_stickRX_MAX, const short& t_stickRX_MIN, const short& t_stickRY_MAX, const short& t_stickRY_MIN)
{
	stickLX_DeadZoneMAX = t_stickLX_MAX;
	stickLX_DeadZoneMIN = t_stickLX_MIN;
	stickLY_DeadZoneMAX = t_stickLY_MAX;
	stickLY_DeadZoneMIN = t_stickLY_MIN;
	stickRX_DeadZoneMAX = t_stickRX_MAX;
	stickRX_DeadZoneMIN = t_stickRX_MIN;
	stickRY_DeadZoneMAX = t_stickRY_MAX;
	stickRY_DeadZoneMIN = t_stickRY_MIN;
}



/// ------------------------------------------------------------------------------------------------------------
inline void PadData::SetPadNum()
{
	if (GetJoypadNum() > 0)
	{
		m_padNum = static_cast(GetJoypadNum());
	}
	else
	{
		m_padNum = -1;
	}
}


#endif // !_INPUTCONTROLLER_HPP




#include "InputPad.hpp"
namespace ps = PadStick;



/// ---------------------------------------------------------------------------------------------------------------------------------------------------------

int PadData::m_button[4][16];

int PadData::m_stick[4][6];
int PadData::m_stickCheck[4][8];
int PadData::m_trigger[4][2];

short PadData::stickLX_DeadZoneMAX = 1000;
short PadData::stickLX_DeadZoneMIN = -1000;
short PadData::stickLY_DeadZoneMAX = 1000;
short PadData::stickLY_DeadZoneMIN = -1000;
short PadData::stickRX_DeadZoneMAX = 1000;
short PadData::stickRX_DeadZoneMIN = -1000;
short PadData::stickRY_DeadZoneMAX = 1000;
short PadData::stickRY_DeadZoneMIN = -1000;

XINPUT_STATE PadData::m_input[4];

char PadData::m_padNum = -1;



/// ---------------------------------------------------------------------------------------------------------------------------------------------------------
void PadData::UpDate()
{
	// ゲームパッドの取得出来ているか
	if (m_padNum == -1) return;


	// ゲームパッドの個数だけ処理
	for (int padNumber = 0; padNumber < static_cast(m_padNum); ++padNumber)
	{
		// 入力状態を取得
		GetJoypadXInputState(padNumber + 1, &m_input[padNumber]);
	


		/// ボタン関係-----------------------------------------------------------
		{
			// 全ボタン入力処理
			for (int j = 0; j < 16; ++j)
			{
				// 押されていなかったら
				if (m_input[padNumber].Buttons[j] == 0)
				{
					if (m_button[padNumber][j] < 0)
					{
						m_button[padNumber][j] = 0;
					}
					else if (m_button[padNumber][j] > 0)
					{
						m_button[padNumber][j] = -1;
					}
				}
				// i番のキーコードに対応するボタンが押されていたら
				else if (m_input[padNumber].Buttons[j] == 1)
				{
					m_button[padNumber][j]++;
				}
			}
		}
		/// ---------------------------------------------------------------------



		/// トリガー関係---------------------------------------------------------
		{
			// トリガーの入力数値を渡す
			m_trigger[padNumber][ps::LEFT_TRIGGER] = m_input[padNumber].LeftTrigger;
			m_trigger[padNumber][ps::RIGHT_TRIGGER] = m_input[padNumber].RightTrigger;
		}
		/// ---------------------------------------------------------------------



		/// スティック入力関係---------------------------------------------------
		{
			/// スティックのデッドゾーンを考慮した入力数値を取得(デッドゾーンは受け付けない値

			// 左スティック左右
			if (m_input[padNumber].ThumbLX > stickLX_DeadZoneMAX || m_input[padNumber].ThumbLX < stickLX_DeadZoneMIN)
			{
				m_stick[padNumber][ps::LEFT_STICK_X] = m_input[padNumber].ThumbLX;
			}
			else
			{
				if (m_stick[padNumber][ps::LEFT_STICK_X] != 0) m_stick[padNumber][ps::LEFT_STICK_X] = 0;
			}

			// 左スティック上下
			if (m_input[padNumber].ThumbLY > stickLY_DeadZoneMAX || m_input[padNumber].ThumbLY < stickLY_DeadZoneMIN)
			{
				m_stick[padNumber][ps::LEFT_STICK_Y] = m_input[padNumber].ThumbLY;
			}
			else
			{
				if (m_stick[padNumber][ps::LEFT_STICK_Y] != 0) m_stick[padNumber][ps::LEFT_STICK_Y] = 0;
			}

			// 右スティック左右
			if (m_input[padNumber].ThumbRX > stickRX_DeadZoneMAX || m_input[padNumber].ThumbRX < stickRX_DeadZoneMIN)
			{
				m_stick[padNumber][ps::RIGHT_STICK_X] = m_input[padNumber].ThumbRX;
			}
			else
			{
				if (m_stick[padNumber][ps::RIGHT_STICK_X] != 0) m_stick[padNumber][ps::RIGHT_STICK_X] = 0;
			}

			// 右スティック上下
			if (m_input[padNumber].ThumbRY > stickRY_DeadZoneMAX || m_input[padNumber].ThumbRY < stickRY_DeadZoneMIN)
			{
				m_stick[padNumber][ps::RIGHT_STICK_Y] = m_input[padNumber].ThumbRY;
			}
			else
			{
				if (m_stick[padNumber][ps::RIGHT_STICK_Y] != 0) m_stick[padNumber][ps::RIGHT_STICK_Y] = 0;
			}
		}
		/// ---------------------------------------------------------------------



		/// スティック押し倒し関係-----------------------------------------------
		{
			// 左スティックを右に押し倒していたら
			if (m_input[padNumber].ThumbLX == ps::STICK_MAX_VALUE)
			{
				m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_RIGHT)]++;
			}
			// 左スティックを左に押し倒していたら
			else if (m_input[padNumber].ThumbLX == ps::STICK_MIN_VALUE)
			{
				m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_LEFT)]++;
			}
			// 左スティックが押し倒されていなかったら
			else
			{
				if (m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_RIGHT)] < 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_RIGHT)] = 0;
				}
				else if (m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_RIGHT)] > 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_RIGHT)] = -1;
				}


				if (m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_LEFT)] < 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_LEFT)] = 0;
				}
				else if (m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_LEFT)] > 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_LEFT)] = -1;
				}
			}


			// 左スティックを上に押し倒していたら
			if (m_input[padNumber].ThumbLY == ps::STICK_MAX_VALUE)
			{
				m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_UP)]++;
			}
			// 左スティックを下に押し倒していたら
			else if (m_input[padNumber].ThumbLY == ps::STICK_MIN_VALUE)
			{
				m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_DOWN)]++;
			}
			// 左スティックが押し倒されていなかったら
			else
			{
				if (m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_UP)] < 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_UP)] = 0;
				}
				else if (m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_UP)] > 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_UP)] = -1;
				}


				if (m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_DOWN)] < 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_DOWN)] = 0;
				}
				else if (m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_DOWN)] > 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::LEFT_STICK_DOWN)] = -1;
				}
			}


			// 右スティックを右に押し倒していたら
			if (m_input[padNumber].ThumbRX == ps::STICK_MAX_VALUE)
			{
				m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_RIGHT)]++;
			}
			// 右スティックを左に押し倒していたら
			else if (m_input[padNumber].ThumbRX == ps::STICK_MIN_VALUE)
			{
				m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_LEFT)]++;
			}
			// 右スティックが押し倒されていなかったら
			else
			{
				if (m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_RIGHT)] < 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_RIGHT)] = 0;
				}
				else if (m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_RIGHT)] > 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_RIGHT)] = -1;
				}


				if (m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_LEFT)] < 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_LEFT)] = 0;
				}
				else if (m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_LEFT)] > 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_LEFT)] = -1;
				}
			}


			// 右スティックを上に押し倒していたら
			if (m_input[padNumber].ThumbRY == ps::STICK_MAX_VALUE)
			{
				m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_UP)]++;
			}
			// 右スティックを下に押し倒していたら
			else if (m_input[padNumber].ThumbRY == ps::STICK_MIN_VALUE)
			{
				m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_DOWN)]++;
			}
			// 右スティックが押し倒されていなかったら
			else
			{
				if (m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_UP)] < 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_UP)] = 0;
				}
				else if (m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_UP)] > 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_UP)] = -1;
				}


				if (m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_DOWN)] < 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_DOWN)] = 0;
				}
				else if (m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_DOWN)] > 0)
				{
					m_stickCheck[padNumber][static_cast(EStickCheck::RIGHT_STICK_DOWN)] = -1;
				}
			}
		}
		/// ---------------------------------------------------------------------
	}
}



/// ---------------------------------------------------------------------------------------------------------------------------------------------------------
const int& PadData::GetButton(const int& t_code, const int& t_padNum)
{
	return m_button[t_padNum][t_code];
}



/// ---------------------------------------------------------------------------------------------------------------------------------------------------------
const int& PadData::GetTrigger(const int& t_code, const int& t_padNum)
{
	return m_trigger[t_padNum][t_code];
}



/// ---------------------------------------------------------------------------------------------------------------------------------------------------------
const int& PadData::GetStick(const int& t_code, const int& t_padNum)
{
	return m_stick[t_padNum][t_code];
}



/// ---------------------------------------------------------------------------------------------------------------------------------------------------------
const int& PadData::GetStickCheck(const int& t_code, const int& t_padNum, const bool& t_leftAndDownIsTrue)
{
	if (t_leftAndDownIsTrue)
	{
		return m_stickCheck[t_padNum][t_code - 2];
	}
	else
	{
		return m_stickCheck[t_padNum][t_code - 2 + 4];
	}
}



/// ---------------------------------------------------------------------------------------------------------------------------------------------------------
const bool PadData::IsCheckEnd()
{
	return
	{
		(m_button[0][XINPUT_BUTTON_START] > 1 && m_button[0][XINPUT_BUTTON_BACK] > 1) ||
		(m_button[1][XINPUT_BUTTON_START] > 1 && m_button[1][XINPUT_BUTTON_BACK] > 1) ||
		(m_button[2][XINPUT_BUTTON_START] > 1 && m_button[2][XINPUT_BUTTON_BACK] > 1) ||
		(m_button[3][XINPUT_BUTTON_START] > 1 && m_button[3][XINPUT_BUTTON_BACK] > 1)
	};
}



/// ---------------------------------------------------------------------------------------------------------------------------------------------------------
const char& PadData::GetPadNum()
{
	return m_padNum;
}






    No.5 テストのためのmain


じゃあ試しに動かしてみようという話。


#include "InputKey.hpp"
#include "InputPad.hpp"
#include "InputMouse.hpp"
#include "DxLib.h"



/// --------------------------------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
#ifdef _DEBUG
	SetOutApplicationLogValidFlag(TRUE);	// ログテキスト出力する
#elif NDEBUG
	SetOutApplicationLogValidFlag(FALSE);	// ログテキスト出力しない
#endif


	SetWindowText("ControllerForDxLib");					// メインウインドウのウインドウタイトルを変更する
	SetBackgroundColor(0, 0, 0);			// 背景色を白に変更
	ChangeWindowMode(TRUE);						// ウィンドウズモードにさせる


	// DXライブラリ初期化処理
	if (DxLib_Init() == -1)
	{
		return -1;			// エラーが起きたら直ちに終了
	}


	SetDrawScreen(DX_SCREEN_BACK);	// 背景描画

	// キーボードの初期化
	KeyData::UpDate();


	// ゲームパッドの初期化
	PadData::SetPadNum();
	PadData::SetDedZone(20000, -20000, 20000, -20000, 20000, -20000, 20000, -20000);
	PadData::UpDate();


	// マウスの初期化
	MouseData::UpDate();
	// マウスホイールの初期化
	MouseWheelData::UpDate();


	// demo 変数名適当
	int x = 100;
	int y = 100;
	int red = 255;
	int green = 0;
	int blue = 0;
	int x2 = 0;
	int y2 = 0;
	int r = 5;
	int x3 = 400;
	int y3 = 400;
	bool click = false;
	

	// メインループ
	while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen() && !KeyData::IsCheckEnd() && !PadData::IsCheckEnd())
	{
		KeyData::UpDate();						// キーボードのループ処理
		PadData::UpDate();						// ゲームパッドのループ処理
		MouseData::UpDate();				// マウスのループ処理
		MouseWheelData::UpDate();		// マウスホイールのループ処理


		/// demo---------------------------------------------------------------------------------
		/// -------------------------------------------------------------------------------------
		if (KeyData::Get(KEY_INPUT_W) > 0 || PadData::GetStickCheck(PadStick::LEFT_STICK_Y, 0, false) > 0)
		{
			y--;
		}
		if (KeyData::Get(KEY_INPUT_S) > 0 || PadData::GetStickCheck(PadStick::LEFT_STICK_Y, 0, true) > 0)
		{
			y++;
		}
		if (KeyData::Get(KEY_INPUT_A) > 0 || PadData::GetStickCheck(PadStick::LEFT_STICK_X, 0, true) > 0)
		{
			x--;
		}
		if (KeyData::Get(KEY_INPUT_D) > 0 || PadData::GetStickCheck(PadStick::LEFT_STICK_X, 0, false) > 0)
		{
			x++;
		}
		if (PadData::GetTrigger(PadStick::LEFT_TRIGGER, 0) == 255)
		{
			if (green < 255) green++;
		}
		if (PadData::GetTrigger(PadStick::RIGHT_TRIGGER, 0) == 255)
		{
			if (green > 0) green--;
		}
		if (PadData::GetStick(PadStick::RIGHT_STICK_X, 0) > 0)
		{
			if (blue < 255) blue++;
		}
		if (PadData::GetStick(PadStick::RIGHT_STICK_X, 0) < 0)
		{
			if (blue > 0) blue--;
		}
		DrawBox(x - 20, y - 20, x + 20, y + 20, GetColor(red, green, blue), true);
		DrawFormatString(0, 0, GetColor(255, 255, 255), "%dx%d, GetColor(255, %d, %d)", x, y, green, blue);
		/// -------------------------------------------------------------------------------------

		/// -------------------------------------------------------------------------------------
		if (MouseData::GetClick(MouseData::ECLICK::LEFT) > 0
			&& x3 - 20 < x2 && y3 - 20 < y2 && x3 + 20 > x2 && y3 + 20 > y2)
		{
			if(!click) click = true;
		}
		else if (MouseData::GetClick(MouseData::ECLICK::LEFT) == -1 && click)
		{
			click = false;
		}
		if (click)
		{
			x3 += MouseData::GetMouseMoveValue().x;
			y3 += MouseData::GetMouseMoveValue().y;
		}
		DrawBox(x3 - 20, y3 - 20, x3 + 20, y3 + 20, GetColor(red, green, blue), true);
		/// -------------------------------------------------------------------------------------

		/// -------------------------------------------------------------------------------------
		x2 = MouseData::GetMouseArea().x;
		y2 = MouseData::GetMouseArea().y;
		if (MouseData::GetClick(MouseData::ECLICK::LEFT) > 0)
		{
			DrawCircle(x2, y2, r, GetColor(0, 255, 0));
		}
		else if (MouseData::GetClick(MouseData::ECLICK::RIGHT) > 0)
		{
			DrawCircle(x2, y2, r, GetColor(255, 0, 0));
		}
		else if (MouseData::GetClick(MouseData::ECLICK::CENTER) > 0)
		{
			DrawCircle(x2, y2, r, GetColor(0, 0, 255));
		}
		else
		{
			DrawCircle(x2, y2, r, GetColor(255, 255, 255));
		}
		if (MouseWheelData::GetMouseWheel() > 0)
		{
			if (r > 1)
			{
				r--;
			}
		}
		else if (MouseWheelData::GetMouseWheel() < 0)
		{
			if (r < 20)
			{
				r++;
			}
		}
		/// -------------------------------------------------------------------------------------
		/// -------------------------------------------------------------------------------------
	}

	// 削除
	DxLib_End();		// DXライブラリの後始末


	return 0;
}