X



ゲームのアルゴリズムを教えて管sai

0060名前は開発中のものです。
垢版 |
2005/06/15(水) 15:58:31ID:J79aeXl5
>>59
昔のゲームを逆アセンブルで解析してみて参考にするのは、どうだろう…

私は、解析したことがないので、どうなっているのか分かりませんが、
少し昔の2Dアクションゲーム(ロックマン、マリオ、魔界村、ソニック、スペランカー、etc)
のマップは、おそらく32×32ドット(24×24ドット)程度の大きさで区切られたマスの組み合わせで
表現されていると思われます。
それを、2次元配列でint Map[300][300]={ {0,0,0,1,0,1,…のように表して
0を当たり判定なし、0以外の値(1など)を当たり判定ありとすれば、マップデータは完成。

●そのマップデータを画面に表現するには、
sx,syをx,y方向別のスクロール管理変数
画面の解像度を320×240とすると

void DrawMap()
{
  int stx=sx/32;int edx=sx+320/32;
  int sty=sy/32;int edy=sy+240/32;
  for(int i=stx;i<edx;i++)
  {
   for(int j=sty;i<edy;j++)
   {
    DrawMapChip(map[i][j],i*32-sx,j*32-sy)
   }
  }
}
0061名前は開発中のものです。
垢版 |
2005/06/15(水) 16:02:04ID:J79aeXl5
●スクロールは、常にメインキャラクターを画面の中心に置いておきたい訳だから

void CalcScroll(int *sx,int *sy)
{
 *sx=mx-320/2;
 *sy=my-240/2;
 if (sx<0) sx=0;
 if (sy<0) sy=0;
 if (sx>32*200) sx=32*200;
 if (sy>32*200) sy=32*200;
}

だったかな…

ちなみにmx,myはメインキャラクターのx,y座標
0062名前は開発中のものです。
垢版 |
2005/06/15(水) 16:54:50ID:J79aeXl5
当たり判定は、いろいろな方法(ベクトル、三平方、色判定など)があるけども、
メインキャラクターが発射した弾と敵キャラとの当たり判定なら、単純に矩形(くけい)の
当たり判定で済みます。
●弾の座標を(ax,ay)、敵の座標を(bx,by)とした場合、
if(ax<bx2 && ax2>bx && ay<by2 && ay2>by)
{
  
}
で当たっているか、否かが分かります。
0063名前は開発中のものです。
垢版 |
2005/06/15(水) 16:55:21ID:J79aeXl5
●メインキャラクターとマップとの当たり判定は、
□x座標の移動処理の直後に
  //左上と左下
  if(Map[x/32][y/32]!=0 || Map[x/32,(y+height)/32]!=0)
  {
   x=(x/32+1)*32;
  }
  //右上と右下
  if(Map[(x+width)/32,y/32]!=0 || Map[(x+width)/32,(y+height)/32]!=0)
  {
   x=(x/32)*32;
  }

□y座標の移動処理の直後に
  //左上と右上
  If(Map[x/32,y/32]!=0 || Map[(x+31)/32,y/32]!=0)
  {
   y=(y/32+1)*32;
  }
  //左下と右下
  If(Map[x/32,(y+31)/32]!=0 || Map[(x+31)/32,(y+31)/32)!=0
  {
   y=(y/32)*32;
  }

とやればできます。どうしてそうなるのかは、
計算式を参考に図を書いてみれば分かると思います。
レスを投稿する


ニューススポーツなんでも実況