こんにちは。実は今パックマンを作ってますが、壁の判定が上手くいかず悩んでます。 環境: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])止まってしまい動かなくなります。(キー入力不可能になる) それ以外の場所では特に問題なく動ける(画面右端、画面下で動きは止まるが、キー入力出来ます) <