分割で行っているのですが慣れないとむずかしいでしょうか?
#include "DxLib.h"
#include "Player.h"
#include "Keyboard.h"
#include "Field.h"
// このファイル内でしか使えないグローバル変数
static int m_Image[IMAGE_MAX]; //画像ハンドル
static int m_y; //y座標
static int m_x;
static int SPD,i,j;
static int muki_flag,walk_flag;
// 初期化をする
void Player_Initialize(){
LoadDivGraph("画像/キャラクタ10.png", 16, 4, 4, 32, 32, m_Image);
m_y = 320;
m_x = 160;
SPD=1;
FIELD_MAX_X;//600
FIELD_MAX_Y;//448
muki_flag=2;
walk_flag=0;
}
// 動きを計算する
int IsAbleToGo(int i,int j,int muki_flag){//進めるかを判定
if(muki_flag==0)//上
if(hantei[i/32-1][j/32]==1)//進めるか判定
return 1;//エラー
if(muki_flag==1)//下
if(hantei[i/32+1][j/32]==1)
return 1;
if(muki_flag==2)//左
if(hantei[i/32][j/32-1]==1)
return 1;
if(muki_flag==3)//右
if(hantei[i/32][j/32+1]==1)
return 1;
return 0;//正常
}
void Player_Calc(){
if(Keyboard_Get(KEY_INPUT_UP)>0){
walk_flag=1;
muki_flag=0;
m_y-=SPD;
if(Keyboard_Get(KEY_INPUT_LSHIFT)>=1)
m_y-=SPD*2;
}
if(Keyboard_Get(KEY_INPUT_DOWN)>0){
walk_flag=1;
muki_flag=1;
m_y+=SPD;
if(Keyboard_Get(KEY_INPUT_LSHIFT)>=1)
m_y+=SPD*2;
}
if(Keyboard_Get(KEY_INPUT_LEFT)>0){
walk_flag=1;
muki_flag=2;
m_x-=SPD;
if(Keyboard_Get(KEY_INPUT_LSHIFT)>=1)
m_x-=SPD*2;
}
if(Keyboard_Get(KEY_INPUT_RIGHT)>0){
walk_flag=1;
muki_flag=3;
m_x+=SPD;
if(Keyboard_Get(KEY_INPUT_LSHIFT)>=1)
m_x+=SPD*2;
if(walk_flag==1){
if(IsAbleToGo(m_x,m_y,muki_flag)==1)
walk_flag=0;
}
}
//画面内移動補正
if(m_x > FIELD_MAX_X) m_x = FIELD_MAX_X;//592
if(m_x < 0 ) m_x = 0;
if(m_y > FIELD_MAX_Y) m_y = FIELD_MAX_Y;//448
if(m_y < 0 ) m_y = 0;
//ワープ
}
// 描画する
void Player_Graph(){
m_Image[12]=m_Image[(m_x%32)/8+12];
m_Image[8]=m_Image[(m_y%32)/8+8];
m_Image[0]=m_Image[(m_y%32)/8+0];
m_Image[4]=m_Image[(m_x%32)/8+4];
if(muki_flag==0)
DrawGraph(m_x, m_y, m_Image[0], TRUE);
else if(muki_flag==1)
DrawGraph(m_x, m_y, m_Image[8], TRUE);
else if(muki_flag==2)
DrawGraph(m_x, m_y, m_Image[4], TRUE);
else if(muki_flag==3)
DrawGraph(m_x, m_y, m_Image[12], TRUE);
}
// 終了処理をする
void Player_Finalize(){
DeleteGraph(m_Image[0]);
DeleteGraph(m_Image[4]);
DeleteGraph(m_Image[8]);
DeleteGraph(m_Image[12]);
}
#ifndef DEF_FIELD_H //二重include防止
#define DEF_FILD_H
#define FIELD_MAX_X 618
#define FIELD_MAX_Y 448
#define FIELD_X 32
#define FIELD_Y 16
static int hantei[15][20]={//[i=y][j=x]
{1,1,1,1,1,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,0,0,0,0,0,1},
{1,0,0,0,0,0,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,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,1,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,0,0,0,0,0,1},
{1,0,0,0,0,0,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,0,0,0,0,0,1},
{1,0,0,0,0,0,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,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
};
// 初期化をする
void Field_Initialize();
// 動きを計算する
void Field_Calc();
// 描画する
void Field_Graph();
// 終了処理をする
void Field_Finalize();
#endif