C言語でRPGを作ろうとしているのですが、どうしてもマップ移動の当たり判定がうまくできません。
どうしたら良いのでしょうか。
#include "DxLib.h"
#define MAP_SIZE 32 // マップチップ一つのドットサイズ32
#define MAP_WIDTH 58 // マップの幅20
#define MAP_HEIGHT 22 // マップの縦長さ15
#define MOVE_FRAME 34 // 移動にかけるフレーム数
int map_port[480];
// マップのデータ
int MapData[ MAP_HEIGHT ][ MAP_WIDTH ] = //縦横の順、no[3][4]だと4*3の横長
{ //[0][0]、[0][1]、[0][2]……//[1][0]、[1][1]、[1][2]……//[2][0]、[2][1]、[2][2]……
{ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 78, 79, 79, 79, 79, 79, 18, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21 } ,
{ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 18, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21 } ,
{ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 48, 49, 49, 49, 49, 21, 21, 129, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 12, 13, 164, 13, 13, 13, 13, 13, 13, 13, 14, 21, 21 } ,
{ 187, 187, 187, 187, 12, 13, 73, 13, 13, 13, 13, 73, 13, 14, 15, 16, 76, 16, 16, 16, 16, 76, 16, 17, 187, 78, 79, 79, 79, 79, 18, 21, 131, 129, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 42, 439, 103, 114, 43, 43, 43, 43, 43, 43, 44, 21, 21 } ,
{ 187, 187, 187, 187, 12, 102, 103, 104, 13, 13, 102, 103, 104, 14, 15, 105, 106, 107, 16, 16, 105, 106, 107, 17, 187, 78, 21, 21, 21, 279, 18, 21, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 21, 222, 223, 283, 225, 226, 167, 254, 254, 254, 254, 284, 21, 21 } ,
{ 187, 187, 187, 187, 42, 132, 133, 134, 43, 43, 132, 133, 134, 44, 45, 135, 136, 137, 46, 46, 135, 136, 137, 47, 187, 187, 21, 21, 21, 339, 18, 21, 189, 190, 220, 220, 220, 220, 220, 220, 220, 220, 190, 191, 21, 252, 253, 313, 255, 256, 197, 343, 343, 343, 343, 314, 21, 21 } ,
{ 187, 187, 187, 187, 282, 254, 254, 254, 254, 254, 254, 254, 254, 284, 282, 254, 254, 254, 254, 254, 254, 254, 254, 284, 187, 187, 18, 21, 21, 249, 18, 21, 189, 191, 21, 21, 232, 21, 49, 49, 49, 21, 189, 191, 21, 282, 254, 254, 254, 284, 227, 254, 254, 254, 254, 344, 21, 21 } ,
{ 187, 187, 187, 187, 312, 343, 343, 343, 343, 343, 343, 343, 343, 314, 312, 343, 343, 343, 343, 343, 343, 343, 343, 314, 187, 187, 48, 49, 49, 21, 48, 49, 189, 191, 49, 49, 49, 50, 79, 79, 79, 18, 189, 191, 21, 312, 343, 343, 343, 314, 257, 373, 373, 373, 373, 374, 21, 21 } ,
{ 217, 187, 187, 187, 342, 254, 254, 254, 254, 254, 254, 254, 254, 344, 342, 254, 254, 254, 254, 254, 254, 254, 254, 344, 187, 187, 187, 187, 187, 18, 78, 79, 138, 138, 79, 79, 79, 80, 79, 79, 79, 18, 189, 191, 21, 342, 254, 254, 254, 344, 404, 404, 404, 404, 404, 404, 21, 21 } ,
{ 3, 186, 187, 187, 372, 373, 373, 373, 373, 373, 373, 373, 373, 374, 372, 373, 373, 373, 373, 373, 373, 373, 373, 374, 187, 187, 187, 187, 187, 18, 21, 21, 138, 138, 21, 21, 20, 80, 187, 187, 187, 18, 189, 191, 21, 372, 373, 373, 373, 374, 21, 21, 21, 21, 21, 21, 21, 21 } ,
{ 3, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 48, 19, 21, 189, 191, 21, 21, 20, 187, 187, 187, 187, 18, 189, 190, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160 } ,
{ 3, 186, 187, 232, 187, 187, 187, 187, 187, 187, 187, 187, 187, 232, 187, 187, 187, 187, 187, 187, 187, 187, 187, 232, 187, 187, 187, 187, 187, 187, 48, 49, 189, 191, 49, 49, 50, 187, 187, 187, 187, 18, 219, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220 } ,
{ 3, 186, 187, 187, 217, 217, 217, 217, 217, 217, 217, 217, 217, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 138, 138, 187, 187, 187, 187, 187, 187, 187, 18, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21 } ,
{ 3, 186, 187, 188, 3, 3, 3, 3, 3, 3, 3, 3, 3, 216, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 18, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 245, 245, 245, 245 } ,
{ 3, 186, 187, 188, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 18, 232, 21, 21, 21, 21, 21, 21, 245, 245, 245, 21, 21, 21, 21, 21, 21 } ,
{ 3, 186, 187, 188, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 216, 217, 217, 217, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49 } ,
{ 3, 216, 217, 218, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79 } ,
{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 216, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79 } ,
{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 } ,
{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 } ,
{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 } ,
{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 } ,
} ;
//マップ+αのデータ
int MapData2[ MAP_HEIGHT ][ MAP_WIDTH ] = //縦横の順、no[3][4]だと4*3の横長
{ //[0][0]、[0][1]、[0][2]……//[1][0]、[1][1]、[1][2]……//[2][0]、[2][1]、[2][2]……
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 381, 382, 382, 382, 382, 382, 382, 382, 382, 258, 258, 258, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 258, 258, 258, 328, 328, 328, 328, 328, 328, 328, 328, 328, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 381, 382, 382, 382, 382, 382, 329, 258, 258, 258, 348, 258, 258, 258, 258, 258, 328, 328, 328, 328, 328, 328, 328, 328, 328, 258, 468, 469, 440, 469, 469, 469, 469, 469, 469, 469, 470, 258, 258 } ,
{ 258, 258, 258, 258, 468, 469, 469, 469, 469, 469, 469, 469, 469, 470, 471, 472, 472, 472, 472, 472, 472, 472, 472, 473, 258, 296, 298, 298, 298, 298, 299, 258, 258, 258, 258, 328, 328, 328, 328, 328, 328, 328, 328, 328, 258, 258, 409, 258, 24, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 438, 258, 258, 258, 442, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 382, 382, 382, 382, 329, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 144, 258, 258, 258, 320, 321, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 381, 258, 258, 412, 258, 329, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 350, 351, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 320, 321, 258, 262, 263, 258, 320, 321, 258, 258, 260, 261, 258, 320, 321, 258, 260, 261, 258, 258, 258, 258, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 297, 298, 298, 298, 299, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 262, 263, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 350, 351, 258, 292, 293, 258, 350, 351, 258, 258, 290, 291, 258, 288, 289, 258, 290, 291, 258, 258, 258, 258, 258, 258, 258, 296, 298, 258, 258, 298, 298, 298, 295, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 292, 293, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 262, 263, 258, 320, 321, 246, 247, 248, 258, 258, 262, 263, 258, 246, 247, 248, 262, 263, 258, 258, 258, 381, 382, 382, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 329, 258, 258, 258, 258, 246, 247, 248, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 292, 293, 258, 290, 291, 276, 277, 278, 258, 258, 292, 293, 258, 276, 277, 278, 292, 293, 258, 258, 258, 258, 258, 258, 258, 381, 382, 258, 258, 382, 382, 382, 258, 382, 382, 382, 329, 258, 258, 258, 258, 276, 277, 278, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 464, 383, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 378, 258, 408, 258, 378, 258, 408, 258, 378, 258, 408, 258, 378, 258, 408, 258, 378, 258, 408, 258, 258, 258, 258, 258, 258, 381, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 381, 382, 258, 258, 382, 382, 383, 258, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 476, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 87, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 258, 258, 476, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 87, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 296, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 381, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
} ;
int MapData3[ MAP_HEIGHT ][ MAP_WIDTH ] = //縦横の順、no[3][4]だと4*3の横長
{ //[0][0]、[0][1]、[0][2]……//[1][0]、[1][1]、[1][2]……//[2][0]、[2][1]、[2][2]……
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 381, 382, 382, 382, 382, 382, 382, 382, 382, 258, 258, 258, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 381, 382, 382, 382, 382, 382, 329, 258, 258, 258, 348, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 468, 469, 440, 469, 469, 469, 469, 469, 469, 469, 470, 258, 258 } ,
{ 258, 258, 258, 258, 468, 469, 469, 469, 469, 469, 469, 469, 469, 470, 471, 472, 472, 472, 472, 472, 472, 472, 472, 473, 258, 296, 298, 298, 298, 298, 299, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 409, 258, 24, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 329, 258, 258, 258, 258, 258, 177, 258, 258, 258, 258, 258, 258, 258, 258, 438, 258, 258, 258, 442, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 382, 382, 382, 382, 329, 258, 258, 258, 258, 258, 207, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 144, 258, 258, 258, 320, 321, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 381, 258, 258, 412, 258, 329, 258, 258, 258, 258, 258, 237, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 350, 351, 258, 258, 258, 258 } ,
{ 258, 258, 258, 205, 258, 320, 321, 258, 262, 263, 258, 320, 321, 258, 258, 260, 261, 258, 320, 321, 258, 260, 261, 258, 258, 258, 258, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 297, 298, 298, 298, 299, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 262, 263, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 350, 351, 258, 292, 293, 258, 350, 351, 258, 258, 290, 291, 258, 288, 289, 258, 290, 291, 258, 206, 258, 258, 258, 258, 258, 296, 298, 258, 258, 298, 298, 298, 295, 258, 258, 258, 329, 258, 258, 176, 258, 258, 258, 258, 258, 258, 258, 292, 293, 258, 258, 258, 258 } ,
{ 258, 258, 258, 177, 258, 262, 263, 258, 320, 321, 246, 247, 248, 177, 258, 262, 263, 258, 246, 247, 248, 262, 263, 177, 258, 258, 381, 382, 382, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 329, 258, 258, 258, 258, 246, 247, 248, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 207, 258, 292, 293, 258, 290, 291, 276, 277, 278, 207, 258, 292, 293, 258, 276, 277, 278, 292, 293, 207, 258, 258, 258, 258, 258, 258, 381, 382, 258, 258, 382, 382, 382, 258, 382, 382, 382, 329, 258, 258, 258, 258, 276, 277, 278, 258, 258, 258, 258, 258, 387, 388, 389, 258 } ,
{ 258, 258, 258, 237, 258, 258, 258, 258, 258, 258, 258, 258, 258, 237, 258, 258, 258, 258, 258, 258, 258, 258, 258, 237, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 464, 383, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 258, 387, 388, 389, 258, 258, 417, 418, 419, 258 } ,
{ 258, 258, 258, 258, 378, 258, 408, 258, 378, 258, 408, 258, 378, 258, 408, 258, 378, 258, 408, 258, 378, 258, 408, 258, 258, 258, 258, 258, 258, 381, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 329, 177, 258, 258, 258, 258, 258, 258, 417, 418, 419, 258, 258, 447, 448, 449, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 381, 382, 258, 258, 382, 382, 383, 258, 258, 258, 258, 329, 207, 258, 258, 258, 258, 258, 258, 447, 448, 449, 258, 258, 477, 478, 479, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 329, 237, 258, 258, 258, 258, 258, 258, 477, 478, 479, 258, 258, 258, 476, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 87, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 329, 258, 258, 258, 258, 258, 258, 258, 258, 476, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 87, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 296, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 381, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
{ 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258 } ,
} ;
// プレイヤーの位置
int PlayerX , PlayerY ;
// 移動しているかどうかのフラグ( 0:停止中 1:移動中 )
int Move ;
// 各方向に移動する量
int MoveX, MoveY ;
// 移動し始めてから何フレーム経過したかを保持する変数
int MoveCounter ;
// 移動全体数
int TotalMoveX=0, TotalMoveY=0, TMoveX=0, TMoveY=0;
void GraphDraw( int ScrollX, int ScrollY )
{
int i , j , MapN;
int MapDrawPointX , MapDrawPointY ; // 描画するマップ座標値
int DrawMapChipNumX , DrawMapChipNumY ; // 描画するマップチップの数
// 描画するマップチップの数をセット
DrawMapChipNumX = 58 ;
DrawMapChipNumY = 22 ;
// 画面左上に描画するマップ座標をセット
MapDrawPointX = 0 ;
MapDrawPointY = 0 ;
// マップを描く
for( i = 0 ; i < DrawMapChipNumY ; i ++ )
{
for( j = 0 ; j < DrawMapChipNumX ; j ++ )
{
MapN = MapData[j]; //
DrawGraph( j * MAP_SIZE+32*TotalMoveX+ScrollX , i * MAP_SIZE + 32*TotalMoveY+ScrollY , map_port[MapN] , TRUE ) ; //TRUEで透過
MapN = MapData2[j]; //
DrawGraph( j * MAP_SIZE+32*TotalMoveX+ScrollX , i * MAP_SIZE + 32*TotalMoveY+ScrollY , map_port[MapN] , TRUE ) ;
}
}
// プレイヤーの描画
DrawGraph( 10 * MAP_SIZE, 7 * MAP_SIZE, map_port[1] , TRUE ) ; //TRUEで透過
for( i = 0 ; i < DrawMapChipNumY ; i ++ )
{
for( j = 0 ; j < DrawMapChipNumX ; j ++ )
{
MapN = MapData3[j]; //
DrawGraph( j * MAP_SIZE+32*TotalMoveX+ScrollX , i * MAP_SIZE + 32*TotalMoveY+ScrollY , map_port[MapN] , TRUE ) ; //TRUEで透過
}
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ); //TRUEでウインドモード、FALSEはフルスクリーン
int Key ;
int ScrollX, ScrollY ;
SetGraphMode( 672 , 480 , 32 ) ; //画面モードの変更int SizeX , int SizeY , int ColorBitNum 640 480
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
LoadDivGraph( "map_port2.png" , 480 , 30 , 16 , 32 , 32 , map_port ); //分割総数、XNum、YNum、XSize、YSize、int型の配列へのポインタ
// 描画先画面を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// プレイヤーの初期位置をセット
PlayerX = 10 ;
PlayerY = 10 ;
// 最初は停止中(0)にしておく
Move = 0 ;
// ループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面を初期化
ClearDrawScreen() ;
// 移動中ではない場合キー入力を受け付ける
if( Move == 0 )
{
// キー入力を得る
Key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
// キー入力に応じてプレイヤーの座標を移動
if( Key & PAD_INPUT_LEFT )
{
Move = 1 ;
MoveX = 1 ;
MoveY = 0 ;
TMoveX += 1;
}
if( Key & PAD_INPUT_RIGHT )
{
Move = 1 ;
MoveX = -1 ;
MoveY = 0 ;
TMoveX -= 1;
}
if( Key & PAD_INPUT_UP )
{
Move = 1 ;
MoveX = 0 ;
MoveY = 1 ;
TMoveY += 1;
}
if( Key & PAD_INPUT_DOWN )
{
Move = 1 ;
MoveX = 0 ;
MoveY = -1 ;
TMoveY -= 1;
}
// 進入不可能なマップだった場合は移動できない
if( Move == 1 )
{
if( MapData[ PlayerY + (-TMoveY) ][ PlayerX + (-TMoveX) ] == 3 )
{
Move = 0 ;
}
else
{
MoveCounter = 0 ;
}
}
// 停止中は画面のスクロールは行わない
ScrollX = 0 ;
ScrollY = 0 ;
}
// 移動中の場合は移動処理を行う
if( Move == 1 )
{
MoveCounter ++ ;
// 移動処理が終了したら停止中にする
if( MoveCounter == MOVE_FRAME )
{
Move = 0 ;
PlayerX += MoveX ;
PlayerY += MoveY ;
// 停止中は画面のスクロールは行わない
ScrollX = 0 ;
ScrollY = 0 ;
TotalMoveX=TMoveX;
TotalMoveY=TMoveY;
}
else
{
// 経過時間からスクロール量を算出する
ScrollX = ( MoveX * MAP_SIZE * MoveCounter / MOVE_FRAME ) ;
ScrollY = ( MoveY * MAP_SIZE * MoveCounter / MOVE_FRAME ) ;
}
}
// マップとプレイヤーを描画
GraphDraw( ScrollX, ScrollY ) ;
// 裏画面の内容を表画面に映す
ScreenFlip() ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
とりあえず、3の所には侵入できないようにしたいのですが、if( MapData[ PlayerY + (-TMoveY) ][ PlayerX + (-TMoveX) ] == 3 )のところが問題なのでしょうか。
宜しくお願いします。
マップ移動の当たり判定
Re: マップ移動の当たり判定
そうですね。このif文の TMoveX を MoveX に、TMoveYを MoveY に変更すれば良いと思いますよ。a さんが書きました:とりあえず、3の所には侵入できないようにしたいのですが、if( MapData[ PlayerY + (-TMoveY) ][ PlayerX + (-TMoveX) ] == 3 )のところが問題なのでしょうか。
具体的に書くと、
if( MapData[ PlayerY + ( -MoveY )][ PlayerX + ( -MoveX)] == 3 )
とすれば良いと思います。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: マップ移動の当たり判定
マップデータは手書きされているのでしょうか?
色々と解らないところも有ると思いますので、当サイトの~mixC++~内において私がRPGをC言語でゼロから構築する講座を書いてますので良かったら御覧ください。
http://dixq.net/forum/blog.php?u=114&sd=a
色々と解らないところも有ると思いますので、当サイトの~mixC++~内において私がRPGをC言語でゼロから構築する講座を書いてますので良かったら御覧ください。
http://dixq.net/forum/blog.php?u=114&sd=a
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: マップ移動の当たり判定
回答ありがとうございます。
if( MapData[ PlayerY + (-TMoveY) ][ PlayerX + (-TMoveX) ] == 3 )をif( MapData[ PlayerY + ( -MoveY )][ PlayerX + ( -MoveX)] == 3 )に直してみたんですが、やはり侵入してしまうようです。
何が問題なんでしょうか。
ありがとうございます。
C言語交流フォーラム ~ mixC++ ~のようなサイトを探していたので、非常に助かります。
if( MapData[ PlayerY + (-TMoveY) ][ PlayerX + (-TMoveX) ] == 3 )をif( MapData[ PlayerY + ( -MoveY )][ PlayerX + ( -MoveX)] == 3 )に直してみたんですが、やはり侵入してしまうようです。
何が問題なんでしょうか。
ありがとうございます。
C言語交流フォーラム ~ mixC++ ~のようなサイトを探していたので、非常に助かります。
Re: マップ移動の当たり判定
詳しく見てみたら、見当たる範囲で4つ問題がありました。
1つ目は既に指摘した if 文のところで、
2つ目は、プレイヤーが正しい場所に描画されていないです。
関数 GraphDraw() の中のプレイヤーを描画する部分を
DrawGraph( PlayerX * MAP_SIZE + 32 * TotalMoveX , PlayerY * MAP_SIZE + 32 * TotalMoveY , map_port[ 1 ], TRUE);
3つ目は、プレイヤーの位置を更新しているところで
PlayerX -= MoveX;
PlayerY -= MoveY;
としてください。
4つ目は、
ジョイパッドの入力チェックをしている処理で、TMoveX またわ TMoveYの値も変更するところがあるのですが、
さらにその下の
//進入不可能なマップだった場合は移動できない
というコメントがあるの処理の「移動ができない」場合に、先ほど変更した TMoveX またわ TMoveY の値を
変更する前に戻さなければなりません。
<code>
// 進入不可能なマップだった場合は移動できない
if( Move == 1 )
{
if( MapData[ PlayerY + (-MoveY) ][ PlayerX + (-MoveX) ] == 3 )
{
Move = 0 ;
TMoveX -= MoveX;
TMoveY -= MoveY;
}
else
{
MoveCounter = 0 ;
}
}
</code>
赤いコードを追加してください。
これで、マップ移動の当たり判定ができるのではないでしょうか。
1つ目は既に指摘した if 文のところで、
2つ目は、プレイヤーが正しい場所に描画されていないです。
関数 GraphDraw() の中のプレイヤーを描画する部分を
次のように変更してください。a さんが書きました:// プレイヤーの描画
DrawGraph( 10 * MAP_SIZE, 7 * MAP_SIZE, map_port[1] , TRUE ) ; //TRUEで透過
DrawGraph( PlayerX * MAP_SIZE + 32 * TotalMoveX , PlayerY * MAP_SIZE + 32 * TotalMoveY , map_port[ 1 ], TRUE);
3つ目は、プレイヤーの位置を更新しているところで
この MoveX と MoveY はスクロールの移動量として使っているので、プレイヤーの進む方向とは逆です。a さんが書きました:PlayerX += MoveX ;
PlayerY += MoveY ;
PlayerX -= MoveX;
PlayerY -= MoveY;
としてください。
4つ目は、
ジョイパッドの入力チェックをしている処理で、TMoveX またわ TMoveYの値も変更するところがあるのですが、
さらにその下の
//進入不可能なマップだった場合は移動できない
というコメントがあるの処理の「移動ができない」場合に、先ほど変更した TMoveX またわ TMoveY の値を
変更する前に戻さなければなりません。
<code>
// 進入不可能なマップだった場合は移動できない
if( Move == 1 )
{
if( MapData[ PlayerY + (-MoveY) ][ PlayerX + (-MoveX) ] == 3 )
{
Move = 0 ;
TMoveX -= MoveX;
TMoveY -= MoveY;
}
else
{
MoveCounter = 0 ;
}
}
</code>
赤いコードを追加してください。
これで、マップ移動の当たり判定ができるのではないでしょうか。