今オンラインRPGゲームを作っているのですが、敵の位置が実際の位置とは違うところに行ってしまいます。
デバックしたファイルもアップロードしておきました。
一度やってみてください
http://ll.la/sP(u
パス kkk
お願いします
#include "DxLib.h"
#include "map_hantei.h"
#include "data.h"
int hantei[37][39] = {
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,0,2,2,2,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,1,1,2,2,2,0,2,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,2,2,1,2,2,2,0,2,2,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,2,2,2,2,0,2,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,0,0,0,2,2,0,0,0,0,0,0,0,0,2,2,2,0,0,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,2,2,0,0,2,0,0,0,0,0,0,0,0,2,2,0,0,0,2,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,2,2,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,2,0,0,0,0,2,2,2,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,2,0,0,0,1,0,2,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,2,2,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,2,0,0,2,2,0,0,2,0,0,0,2,2,2,0,2,1,0,2,2,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,2,2,2,0,0,0,2,0,2,2,1,0,2,2,2,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,0,2,2,0,2,2,0,0,2,0,0,0,0,0,0,2,2,0,2,2,2,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,0,0,0,0,0,2,2,0,2,2,0,2,2,2,2,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,0,2,0,0,2,2,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,2,1,1,2,2,2,2,2,2,0,2,0,0,2,2,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,0,0,0,0,0,0,0,0,2,2,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,0,0,0,0,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};
int IsAbleToGo(int x,int y,int muki){//進めるかを判定する
if(muki==0)//上向きなら
if(hantei[y/32-1][x/32]==1)//進めるか判定
return 1;//エラー
if(muki==1)//左向きなら
if(hantei[y/32][x/32-1]==1)
return 1;
if(muki==2)//下向きなら
if(hantei[y/32+1][x/32]==1)
return 1;
if(muki==3)//右向きなら
if(hantei[y/32][x/32+1]==1)
return 1;
return 0;//正常
}
void Map(){
SaveData_t Data ;
Enemy_t Enemy ;
int image[12],image2[7],i,j,map_img,White,flg,flg2;
int map_x,map_y;
int my_kiten_x,my_kiten_y;
int No;
char Key[256];
ch_t ch;
//Data.Exp = 0;
flg = 0;
if(flg == 0){
FILE *fp = fopen( "save_data.dat", "rb" ); // ファイルを開く
fread( &Data, sizeof(Data), 1, fp );
FILE *wp = fopen( "heiya/save_data.dat", "rb" ); // ファイルを開く
fread( &Enemy, sizeof(Enemy), 1, wp );
}
Enemy.en_x = 320;
Enemy.en_y = 416;
//Enemy.Exp = 0;
map_x = -1 * (Data.my_x - 320);
map_y = -1 * (Data.my_y - 224);
my_kiten_x = 320;
my_kiten_y = 224;
ch.walking_flag=0;
ch.muki=3;
ch.muki2 = 3;
//Data.my_y=224;
//Data.my_x=320;
ch.x =Data.my_x;
ch.y =Data.my_y;
White = GetColor( 255 , 255 , 255 ) ;
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "char2.png" , 12 , 3 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存
LoadDivGraph( "TileA.png" , 7 , 7 , 1 , 32 , 32 , image2 ) ;
FILE *fp = fopen( "save_data.dat", "wb" );
fwrite( &Data, sizeof(Data), 1, fp ); // ファイルにmoneyの値を出力する
fclose( fp );
FILE *wp = fopen( "heiya/save_data.dat", "wb" );
fwrite( &Enemy, sizeof(Enemy), 1, wp ); // ファイルにmoneyの値を出力する
fclose( wp );
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
if(flg == 0){
FILE *fp = fopen( "save_data.dat", "rb" ); // ファイルを開く
fread( &Data, sizeof(Data), 1, fp );
FILE *wp = fopen( "heiya/save_data.dat", "rb" ); // ファイルを開く
fread( &Enemy, sizeof(Enemy), 1, wp );
flg = 1;
}
/*白い壁を描画*/
for(i=0;i<37;i++){
for(j=0;j<39;j++){
map_img = 0;
if(hantei[i][j]==0){ map_img = image2[0]; }
if(hantei[i][j]==1){ map_img = image2[5]; }
if(hantei[i][j]==2){ map_img = image2[6]; }
DrawGraph( j * 32 + map_x, i * 32 + map_y , map_img , TRUE ) ;
}
}
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ){ //上ボタンが押されたら
ch.muki=0; //上向きフラグを立てる
if(hantei[ch.y/32-1][ch.x/32]==1 || hantei[ch.y/32-1][ch.x/32]==2)
ch.walking_flag=0;
else{
Data.Exp++;
Data.my_y-=32;
flg2 = rand() % 4;
}
}
else if( Key[ KEY_INPUT_LEFT ] == 1 ){ //左ボタンが押されたら
ch.muki=1; //左向きフラグを立てる
if(hantei[ch.y/32][ch.x/32-1]==1 || hantei[ch.y/32][ch.x/32-1]==2)
ch.walking_flag=0;
else{
Data.Exp++;
Data.my_x-=32;
flg2 = rand() % 4;
}
}
else if( Key[ KEY_INPUT_DOWN ] == 1 ){ //下ボタンが押されたら
ch.muki=2; //下向きフラグを立てる
if(hantei[ch.y/32+1][ch.x/32]==1 || hantei[ch.y/32+1][ch.x/32]==2)
ch.walking_flag=0;
else{
Data.Exp++;
Data.my_y+=32;
flg2 = rand() % 4;
}
}
else if( Key[ KEY_INPUT_RIGHT] == 1 ){ //右ボタンが押されたら
ch.muki=3; //右向きフラグを立てる
if(hantei[ch.y/32][ch.x/32+1]==1 || hantei[ch.y/32][ch.x/32+1]==2)
ch.walking_flag=0;
else{
Data.Exp++;
Data.my_x+=32;
flg2 = rand() % 4;
}
}
else{ //何のボタンも押されてなかったら
ch.walking_flag=0; //歩かないフラグを立てる
flg2 = 5;
}
}
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0){ //上向きならch.y座標を減らす
ch.y--;
map_y++;
}
else if(ch.muki==1){ //左向きならch.x座標を減らす
ch.x--;
map_x++;
}
else if(ch.muki==2){ //下向きならch.y座標を増やす
ch.y++;
map_y--;
}
else if(ch.muki==3){ //右向きならch.x座標を増やす
ch.x++;
map_x--;
}
}
if(flg2 == 0){
if(hantei[Enemy.en_y/32][Enemy.en_x/32+1]==1 || hantei[Enemy.en_y/32][Enemy.en_x/32+1]==2){
Enemy.en_x++;
ch.muki2 = 3;
}
}
else if(flg2 == 1){
if(hantei[Enemy.en_y/32][Enemy.en_x/32-1]==1 || hantei[Enemy.en_y/32][Enemy.en_x/32-1]==2){
Enemy.en_x--;
ch.muki2 = 1;
}
}
else if(flg2 == 2){
if(hantei[Enemy.en_y/32-1][Enemy.en_x/32]==1 || hantei[Enemy.en_y/32-1][Enemy.en_x/32]==2){
Enemy.en_y--;
ch.muki2 = 0;
}
}
else if(flg2 == 3){
if(hantei[Enemy.en_y/32+1][Enemy.en_x/32]==1 || hantei[Enemy.en_y/32+1][Enemy.en_x/32]==2){
Enemy.en_y++;
ch.muki2 = 2;
}
}
ch.img=image[(ch.x%32+ch.y%32)/12 + ch.muki*3]; //画像をセット
DrawGraph( my_kiten_x , my_kiten_y , ch.img , TRUE ) ;//画像を描画
ch.img2=image[(Enemy.en_x%32+Enemy.en_y%32)/12 + ch.muki2*3];
DrawGraph( Enemy.en_x - ch.x + 320 , Enemy.en_y - ch.y + 224 , ch.img2 , TRUE ) ;//敵の場所
DrawFormatString( 0, 0, White , "総移動距離%d" , Data.Exp );
DrawFormatString( 0, 20, White , "X軸%d" , ch.x );
DrawFormatString( 0, 40, White , "Y軸%d" , ch.y );
DrawFormatString( 0, 60, White , "データX軸%d" , Data.my_x );
DrawFormatString( 0, 80, White , "データY軸%d" , Data.my_y );
DrawFormatString( 0, 100, White , "敵X軸%d" , Enemy.en_x );
DrawFormatString( 0, 120, White , "敵Y軸%d" , Enemy.en_y );
FILE *fp = fopen( "save_data.dat", "wb" );
fwrite( &Data, sizeof(Data), 1, fp );
fclose( fp );
FILE *wp = fopen( "heiya/save_data.dat", "wb" );
fwrite( &Enemy, sizeof(Enemy), 1, wp ); // ファイルにmoneyの値を出力する
fclose( wp );
ScreenFlip();
}
}