壁の判定

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
korsakov

壁の判定

#1

投稿記事 by korsakov » 17年前

こんにちは。実は今パックマンを作ってますが、壁の判定が上手くいかず悩んでます。

環境:WindowsXp VC++ 2005 Express 
ライブラリはSDLを使ってます。


W100,H100、1ブロック20ピクセルで区切ったとして
int GameMap[5][5]={ 1,1,1,1,1},
                  { 1,0,0,0,1},
                  { 1,0,0,0,1},
                  { 1,0,0,0,1},
                  { 1,1,1,1,1},};

bool Key[KEY_MAX];
void GetKey()
{
              static Uint8 *keys;
	     for(int i=0;i<_KEY_MAX;i++)//初期化
		Keys=false;

              keys=SDL_GetKeyState(NULL);//Key入力を読み取る
              if(Key[SDLK_UP]==1)Key[_UP]=1;
              if(Key[SDLK_DOWN]==1)Key[_UP]=1;
              if(Key[SDLK_LEFT]==1)Key[_UP]=1;
              if(Key[SDLK_RIGHT]==1)Key[_UP]=1;
}

void Move_Character(Pac *pacman)
{
	static int move = 2;

	if((pacman->pos.x%20==0)&&(pacman->pos.y%20==0))
		if(pacman->KeyPress==true){//dst パックマンの方向
			if(Keys[_UP]==true)pacman->dic=_UP;
			if(Keys[_DOWN]==true)pacman->dic=_DOWN;
			if(Keys[_LEFT]==true)pacman->dic=_LEFT;
			if(Keys[_RIGHT]==true)pacman->dic=_RIGHT;
		}
	if(MapPos(pacman->pos.x,pacman->pos.y,pacman->dic)==0){//通行可能なら
		if     (Chara->dst==_UP)pacman->pos.y-=move;
		else if(Chara->dst==_DOWN)pacman->pos.y+=move;
		else if(Chara->dst==_LEFT)pacman->pos.x-=move;
		else if(Chara->dst==_RIGHT)pacman->pos.x+=move;
		}
	}
	Blit_Pac(pacman);//キャラクターイメージ描画
}
int MapPos(int x,int y,int d)//B_S = 20
{

	if(d==_UP)   return GameMap[(y/B_S)-1][x/B_S];
	if(d==_DOWN) return GameMap[(y/B_S)+1][x/B_S];
	if(d==_LEFT) return GameMap[y/B_S][(x/B_S)-1];
	if(d==_RIGHT)return GameMap[y/B_S][(x/B_S)+1];
	return 0;
}
void Blit_Pac(Pac *Chara)
{
	SDL_BlitSurface( Chara->Img,&Chara->anime[Chara->dic%4][Chara->motion%2],Screen,&Chara->pos);
	Motion(Chara);
}

typedef struct Pac{//パックマン
	SDL_Surface *Img;//画像イメージ
	SDL_Rect pos;//表示する座標位置 x,y,w,h
	Uint8 dic;//Direction キャラクターの方向
	Uint8 motion;//モーションパターン
	SDL_Rect anime[4][2];
	bool KeyPress;//キーが離されてるか
}pac;

キー入力が無ければ最後に入力された方向に向かって動き続けるように作りたいのですが...
何故か画面左端、画面上に到達すると(GameMap[0][...],GameMap[...][0])止まってしまい動かなくなります。(キー入力不可能になる)
それ以外の場所では特に問題なく動ける(画面右端、画面下で動きは止まるが、キー入力出来ます)


<

korsakov

Re:壁の判定

#2

投稿記事 by korsakov » 17年前

すいません。別の方法でやったらうまくいきました。
お騒がせしました。

閉鎖

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