DXライブラリ マップの判定のデータが実際と合いません。原因を教えてください。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
メロンくん
記事: 16
登録日時: 11年前

DXライブラリ マップの判定のデータが実際と合いません。原因を教えてください。

#1

投稿記事 by メロンくん » 10年前

コード:

#include "DxLib.h"

char Key[256];
int image[8],idouryou=4,hokoujoutai=1,hokouteisi_sirusi=0 ;
int ch_img;
int ch_muki=1;

#define MAP_SIZE	40			// マップチップ一つのドットサイズ
#define MAP_WIDTH	64			// マップの幅
#define MAP_HEIGHT	32			// マップの縦長さ

// マップのデータ
int MapData[MAP_HEIGHT][MAP_WIDTH] = {
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1 },
{ 1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1 },
{ 1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1 },
{ 1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1 },
{ 1,0,1,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,0,1 },
{ 1,0,1,0,0,0,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1 },
{ 1,0,1,0,1,0,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,1,1,1,0,1 },
{ 1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,1,0,0,1,0,0,0,0,1,0,1 },
{ 1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,1,0,1,0,1 },
{ 1,0,1,0,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,1,0,1 },
{ 1,0,1,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1 },
{ 1,0,1,0,1,1,0,1,1,0,0,0,1,1,1,1,0,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1 },
{ 1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,0,1,0,0,1,1,1,1,0,1,0,1,1,1,1,0,1 },
{ 1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1 },
{ 1,0,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,1 },
{ 1,0,1,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,0,1 },
{ 1,0,1,0,1,0,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1 },
{ 1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1 },
{ 1,0,1,0,1,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1 },
{ 1,0,1,0,1,1,0,0,0,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,1 },
{ 1,0,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1 },
{ 1,0,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1 },
{ 1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,1,1,1 },
{ 1,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1 },
{ 1,0,1,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1 },
{ 1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
{ 1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,1 },
{ 1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,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,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,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 map;


// プレイヤーの位置
int PlayerX , PlayerY ;

// 移動しているかどうかのフラグ( 0:停止中  1:移動中 )
int Move ;

// 各方向に移動する量
int MoveX, MoveY ;

// 移動し始めてから何フレーム経過したかを保持する変数
int MoveCounter ;

int ScrollX, ScrollY ;


// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						 LPSTR lpCmdLine, int nCmdShow )
{

	SetGraphMode( 800 , 600 , 32 ) ;
	if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

	// 描画先画面を裏画面にする
	SetDrawScreen( DX_SCREEN_BACK ) ;
	LoadDivGraph( "画像/キャラ.png" , 8 , 2 , 4 , 40 , 41 , image ) ;
	map = LoadGraph( "map/map.png" );


	int Color = GetColor( 230, 230, 255 );
	SetFontSize( 12 ) ; 

	// プレイヤーの初期位置をセット 
	PlayerX = 63 ;
	PlayerY = 28 ;


	// 最初は停止中(0)にしておく
	Move = 0 ;
	
	// ループ
	 while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
	{
		SetDrawBlendMode( DX_BLENDMODE_NOBLEND,  0 );
		if(hokouteisi_sirusi==1)hokouteisi_sirusi=0;
		if(Key[ KEY_INPUT_Z]  == 1 && (MAP_SIZE - MoveCounter)%4==0)idouryou=4;
		else idouryou=2;

		if( Move == 0)
		{


			// キー入力に応じてプレイヤーの座標を移動
			if( Key[ KEY_INPUT_LEFT ]  == 1)
			{
				Move = 1 ;
				MoveX = -1 ;
				MoveY = 0 ;
                ch_muki=1; 
			}
			if( Key[ KEY_INPUT_RIGHT]  == 1)
			{
				Move = 1 ;
				MoveX = 1 ;
				MoveY = 0 ;
                ch_muki=3;
			}
			if( Key[ KEY_INPUT_UP   ]==1 )
			{
				Move = 1 ;
				MoveX = 0 ;
				MoveY = -1 ;
				ch_muki=0;
			}
			if( Key[ KEY_INPUT_DOWN ]  == 1)
			{
				Move = 1 ;
				MoveX = 0 ;
				MoveY = 1 ;
                ch_muki=2; 
			}
if(Key[ KEY_INPUT_C]  == 1 && (MoveCounter==40 || MoveCounter==0 ))Move = 0 ;
			// 進入不可能なマップだった場合は移動できない
			if( Move == 1 )
			{
				
				if( MapData[ PlayerY + MoveY ][ PlayerX + MoveX ] >= 1 )
				{
					Move = 0 ;
				}
				else
				{
					MoveCounter = 0 ;
				}
			}
			// 停止中は画面のスクロールは行わない
			ScrollX = 0 ;
			ScrollY = 0 ;
		}

		// 移動中の場合は移動処理を行う
		if( Move == 1 )
		{
			MoveCounter =MoveCounter+idouryou ;

			// 移動処理が終了したら停止中にする
			if( MoveCounter == MAP_SIZE )
			{
				Move = 0 ;
				hokouteisi_sirusi=1;

				// プレイヤーの位置を変更する
				PlayerX += MoveX ;
				PlayerY += MoveY ;

				// 停止中は画面のスクロールは行わない
				ScrollX = 0 ;
				ScrollY = 0 ;
			}
			else
			{
				// 経過時間からスクロール量を算出する
				ScrollX = -( MoveX * MoveCounter ) ;
				ScrollY = -( MoveY * MoveCounter ) ;
			}
		}

if(MoveCounter==40 || MoveCounter<=19 )hokoujoutai=0;
else hokoujoutai=1;
		ch_img=image[hokoujoutai + ch_muki*2];
		DrawGraph( (380-MAP_SIZE * PlayerX)+ScrollX  , (280-MAP_SIZE * PlayerY)+ScrollY , map , TRUE ) ;

		DrawGraph( 380 , 280 , ch_img , TRUE ) ;//キャラを描画

	DrawFormatString( 5, 5,Color, "MapData[PlayerX][PlayerY]=%d", MapData[PlayerX][PlayerY] );

		// 裏画面の内容を表画面に映す
		ScreenFlip() ;
	}
	DxLib_End() ;				// DXライブラリ使用の終了処理
	return 0 ;					// ソフトの終了
}
コードの最後に、DrawFormatString( 5, 5,Color, "MapData[PlayerX][PlayerY]=%d", MapData[PlayerX][PlayerY] );を置いてプレイヤーの現在地点のマップデータがいくつになっているのか見てみましたが
初期設定のPlayerX = 63 ;PlayerY = 28 ;の時点で-130351104というとんでもない数字になってしまっています。0か1のどちらかでないとおかしいはずなのですが、場所によってわけのわからない数字になってしまっています。
この数字が1として表示されている部分もあって訳がわかりません。1であるならば障害物になっていてその場所に行く事ができない筈なのですが。なぜこのようになってしまっているのか教えてください。

ろん
記事: 18
登録日時: 14年前

Re: DXライブラリ マップの判定のデータが実際と合いません。原因を教えてください。

#2

投稿記事 by ろん » 10年前

DrawFormatStringの引数、MapData[PlayerX][PlayerY]が逆です。MapData[PlayerY][PlayerX]としてみてください。

メロンくん
記事: 16
登録日時: 11年前

Re: DXライブラリ マップの判定のデータが実際と合いません。原因を教えてください。

#3

投稿記事 by メロンくん » 10年前

>>ろんさん

ご指摘ありがとうございました。
単純ミスですが、自分では全く気付けませんでした。

閉鎖

“C言語何でも質問掲示板” へ戻る