ゲームプログラム・サンプルプログラム集 (トップページに戻る)
クリックした矢印画像を動かす
実装イメージ

・矢印画像をクリックすることでステータスの数値を変更しています。
・ステータスの数値に合わせて円の表示座標を動かしています。
・クリックしているときの矢印画像の座標を少し動かしてクリックしているのを分かりやすくしています。
サンプルプログラム

#include "DxLib.h"
#include <math.h>

#define IMAGE_SIZE	50			// 画像1枚の大きさ

// 矢印右画像ハンドル
int ArrowRightGraph;
// 矢印左画像ハンドル
int ArrowLeftGraph;

//	右矢印座標
int ArrowRightX;
int ArrowRightY;
//	左矢印座標
int ArrowLeftX;
int ArrowLeftY;

// 矢印を押しているかどうか
bool ArrowRightCheck;
bool ArrowLeftCheck;

// ステータス数値
int StateValue;

// ==============================
// *** 初期化処理 ***
// ==============================
void Game_Init()
{
	// 矢印画像の読み込み
	ArrowRightGraph = LoadGraph( "矢印右.png" );
	ArrowLeftGraph = LoadGraph( "矢印左.png" );

	ArrowRightX = 400;
	ArrowRightY = 100;

	ArrowLeftX = 50;
	ArrowLeftY = 100;

	StateValue = 0;
}
// ==============================
// *** 更新処理 ***
// ==============================
void Game_Update()
{
	ArrowRightCheck = false;;
	ArrowLeftCheck = false;

	// マウス左ボタンを押しているとき
	if( GetMouseInput() & MOUSE_INPUT_LEFT ){
		// マウス座標
		int MouseX, MouseY;
		// マウス座標を取得して円の座標とします
		GetMousePoint( &MouseX, &MouseY );

		// マウス座標が矢印右画像の中に入っているか
		if( MouseX >= ArrowRightX && MouseX <= ArrowRightX + IMAGE_SIZE &&
			MouseY >= ArrowRightY && MouseY <= ArrowRightY + IMAGE_SIZE){
			// 入っていたら数値を増やす
			StateValue++;
			// 右矢印を押しています
			ArrowRightCheck = true;
		}

		// 左画像の中に入っているか
		if( MouseX >= ArrowLeftX && MouseX <= ArrowLeftX + IMAGE_SIZE &&
			MouseY >= ArrowLeftY && MouseY <= ArrowLeftY + IMAGE_SIZE){
			// 数値を減らす
			StateValue--;
			ArrowLeftCheck = true;
		}
	}
}
// ==============================
// *** 描画処理 ***
// ==============================
void Game_Draw()
{
	// 矢印画像の描画(押しているときと押していないときで座標を変える)
	if( ArrowRightCheck ){
		DrawGraph( ArrowRightX + 5, ArrowRightY + 5, ArrowRightGraph, TRUE );
	}else{
		DrawGraph( ArrowRightX, ArrowRightY, ArrowRightGraph, TRUE );
	}
	if( ArrowLeftCheck ){
		DrawGraph( ArrowLeftX + 5, ArrowLeftY + 5, ArrowLeftGraph, TRUE );
	}else{
		DrawGraph( ArrowLeftX, ArrowLeftY, ArrowLeftGraph, TRUE );
	}

	// ステータス表示用の線の描画
	DrawLine( 120, 125, 380, 125, GetColor( 255, 255, 255 ) );
	// 数値に合わせて円の描画
	DrawCircle( 120 + StateValue, 125, 7, GetColor( 255, 255, 255 ) );
}
// ==============================
// *** 終了処理 ***
// ==============================
void Game_End()
{
	DeleteGraph( ArrowRightGraph );
	DeleteGraph( ArrowLeftGraph );
}

// ******************************
// メイン関数
// ******************************
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	ChangeWindowMode( TRUE );
	SetGraphMode( 500, 200, 16 );
	if( DxLib_Init() == -1 ){
		return -1;
	}
	SetDrawScreen( DX_SCREEN_BACK );

	Game_Init();		// *** 初期化処理 ***

	while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ){
		Game_Update();	// *** 更新処理 ***

		ClearDrawScreen();
		Game_Draw();	// *** 描画処理 ***
		ScreenFlip();
	}

	Game_End();			// *** 終了処理 ***
	DxLib_End();
	return 0;
}