プレイヤーをクリックしたら移動可能範囲を表示させたいのですが、どうしても出来ません。
どうすれば上手く出来るのでしょうか?
OS:Window7
コンパイラ:Microsoft Visual Studio 2010
ライブラリ:Dxライブラリ
言語:C
C言語はポインタは出来ませんが、ポインタ以外はしっかり勉強してあります。
#include"DxLib.h"
#define STAGE_SIZE 13
#define SIZE 32
#define SPACE 0
#define PLAYER 1
#define MOVE 2
int MasuX, MasuY;
int STAGE[STAGE_SIZE + 2][STAGE_SIZE + 2] = {
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
};
typedef struct{
int PosX;
int PosY;
int Move;
} STATUS;
STATUS Player = {5, 5, 3};
void DrawStage();
void Mouse();
void MoveSearch(int, int, int);
int ProcessLoop(){
if(ProcessMessage() != 0){ return -1; }
if(ClearDrawScreen() != 0){ return -1; }
return 0;
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
ChangeWindowMode(TRUE);
SetGraphMode(SIZE * 15, SIZE * 15, 16);
if(DxLib_Init() == -1 || SetDrawScreen(DX_SCREEN_BACK) != 0){ return -1; }
STAGE[Player.PosY][Player.PosX] = PLAYER;
while(ProcessLoop() == 0){
DrawStage();
Mouse();
DrawFormatString(0, 0, GetColor(255,255,255), "%d %d", MasuX, MasuY);
ScreenFlip();
}
DxLib_End();
return 0;
}
void DrawStage(){
for(int y = 0; y < STAGE_SIZE + 2; y++){
for(int x = 0; x < STAGE_SIZE + 2; x++){
switch(STAGE[y][x]){
case SPACE: DrawBox(x * SIZE, y * SIZE, x * SIZE + SIZE, y * SIZE + SIZE, GetColor(255,255,255), FALSE); break;
case PLAYER: DrawCircle(x * SIZE + SIZE / 2, y * SIZE + SIZE / 2, SIZE / 2 - 2, GetColor(0,0,255), TRUE); break;
case MOVE: DrawBox(x * SIZE, y * SIZE, x * SIZE + SIZE, y * SIZE + SIZE, GetColor(50,50,200), TRUE); break;
}
}
}
}
void Mouse(){
int MouseX, MouseY;
GetMousePoint(&MouseX, &MouseY);
MasuX = MouseX / SIZE;
MasuY = MouseY / SIZE;
if((GetMouseInput() & MOUSE_INPUT_LEFT) == 1 && STAGE[MasuY][MasuX] == PLAYER){
MoveSearch(Player.PosX, Player.PosY, Player.Move);
}
}
void MoveSearch(int PlayerX, int PlayerY, int Move){
if(STAGE[PlayerY - 1][PlayerX] == 0 && Move > 0){
STAGE[PlayerY - 1][PlayerX] = MOVE;
MoveSearch(PlayerX, PlayerY - 1, Move - 1);
}
if(STAGE[PlayerY + 1][PlayerX] == 0 && Move > 0){
STAGE[PlayerY + 1][PlayerX] = MOVE;
MoveSearch(PlayerX, PlayerY + 1, Move - 1);
}
if(STAGE[PlayerY][PlayerX - 1] == 0 && Move > 0){
STAGE[PlayerY][PlayerX - 1] = MOVE;
MoveSearch(PlayerX - 1, PlayerY, Move - 1);
}
if(STAGE[PlayerY][PlayerX + 1] == 0 && Move > 0){
STAGE[PlayerY][PlayerX + 1] = MOVE;
MoveSearch(PlayerX + 1, PlayerY, Move - 1);
}
}