どのマスをクリックされたか、というマスの座標は
マスX座標 = ( マウスのX座標 - 一番左上のマスの左上端のX座標 ) / マス1つのドット幅
マスY座標 = ( マウスのY座標 - 一番左上のマスの左上端のY座標 ) / マス1つのドット幅
で求められます
横10縦8のマス目の中をクリックしたら色が緑から赤に変わるというプログラムを組んでみましたので
よろしければご覧になってみてください m(_ _)m
#include "DxLib.h"
#define MAP_SIZE_X 10
#define MAP_SIZE_Y 8
#define CHIP_SIZE 32
#define MAP_LEFTUP_X 100
#define MAP_LEFTUP_Y 50
int Map[ MAP_SIZE_Y ][ MAP_SIZE_X ] ;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int oldinput ;
int nowinput ;
int edgeinput ;
int mouseX, mouseY ;
int mapX, mapY ;
int i, j ;
int Color ;
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK );
// マウスの入力情報を初期化する
oldinput = 0 ;
nowinput = 0 ;
mouseX = 0 ;
mouseY = 0 ;
// メインループ(何かキーが押されたらループを抜ける)
while( ProcessMessage() == 0 )
{
// マウスの入力情報を更新する
oldinput = nowinput ;
nowinput = GetMouseInput() ;
edgeinput = nowinput & ~oldinput ;
GetMousePoint( &mouseX, &mouseY ) ;
// マスの座標を算出する
mapX = ( mouseX - MAP_LEFTUP_X ) / CHIP_SIZE ;
mapY = ( mouseY - MAP_LEFTUP_Y ) / CHIP_SIZE ;
// マウスの左ボタンが押されたらマップの値を変化させる
if( ( edgeinput & MOUSE_INPUT_LEFT ) != 0 )
{
// マップの範囲内にある場合のみマップの状態を変化させる
if( mapX >= 0 && mapX < MAP_SIZE_X &&
mapY >= 0 && mapY < MAP_SIZE_Y )
{
Map[ mapY ][ mapX ] ++ ;
if( Map[ mapY ][ mapX ] >= 2 )
{
Map[ mapY ][ mapX ] = 0 ;
}
}
}
// 画面のクリア
ClearDrawScreen();
// マップを描画する
for( i = 0 ; i < MAP_SIZE_Y ; i ++ )
{
for( j = 0 ; j < MAP_SIZE_X ; j ++ )
{
// 内側の部分を描画
switch( Map[ i ][ j ] )
{
case 0 : Color = GetColor( 0, 255, 0 ) ; break ;
case 1 : Color = GetColor( 255, 0, 0 ) ; break ;
}
DrawBox(
MAP_LEFTUP_X + j * CHIP_SIZE,
MAP_LEFTUP_Y + i * CHIP_SIZE,
MAP_LEFTUP_X + j * CHIP_SIZE + CHIP_SIZE,
MAP_LEFTUP_Y + i * CHIP_SIZE + CHIP_SIZE,
Color, TRUE ) ;
// 枠を描画
DrawBox(
MAP_LEFTUP_X + j * CHIP_SIZE,
MAP_LEFTUP_Y + i * CHIP_SIZE,
MAP_LEFTUP_X + j * CHIP_SIZE + CHIP_SIZE,
MAP_LEFTUP_Y + i * CHIP_SIZE + CHIP_SIZE,
GetColor( 255,255,255 ), FALSE ) ;
}
}
// マスの座標を表示する
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "X:%d Y:%d", mapX, mapY ) ;
// 裏画面の内容を表画面に反映
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}