while ( true )
{
   wait_vblank();

   自機.update( ... );
   foreach ( 敵 in 敵リスト )
      敵.update( ... );
   foreach ( 弾 in 自弾リスト )
      弾.update( ... );
   foreach ( 弾 in 敵弾リスト )
      弾.update( ... );

   checkCollision_自機vs敵弾( 自機, 敵弾リスト );
   checkCollision_自機vs敵( 自機, 敵リスト );
   checkCollision_敵vs自弾( 敵リスト, 自弾リスト );
}

とかやっていくんじゃないの?
これでも出来ないことは無いよ。