Lo de la bala, es cierto que podrías mirártelo un poco más por tu cuenta (yo creo que te hace falta leerte unos cuantos libros de programación).
Lo de las colisiones ya es un tema más delicado, te diré que existen varias maneras de hacerlo:
1----Colisión geométrica predefinida
-------------(entre 2 cuadrados): Suponiendo el cuadrado 1(x1,y1,w1,h1) y el cuadrado 2(x2,y2,w2,h2) (x e y son las coordenadas) (w es la anchura) (h es la altura) Colisionan si:
((x1+w1) >= x2) && (x1 <= (x2+w2)) && ((y1+h1) >= y2) && (y1 <= (y2+h2))
------------(entre 2 círculos): circulo 1 (x1,y1,r1) y circulo 2 (x2,y2,r2)
Colisionan si:
int dx = x1 - x2;
int dy = y1 - y2;
dx *= dx;
dy *= dy;
(Sqrt(dx+dy) < (r1+r2))
------------------(etc...):
ahora mismo se me ocurren mil más (entre rombos, elipses, etc...) aunque si sabes un poco de mates podrías deducirlas todas, si te interesa alguna en especial pregúntame
2------Colisión geométrica por listas de vértices:
Existen algoritmos que saben comprobar si 2 listas de vértices se intersectan, podrías descomponerlos en triángulos por ejemplo.
3------Colisión por mascara de bits:
Según mi gusto la mejor, además se puede acelerar por hardware, básicamente consiste en comprobar si un bitmap colisiona con otro viendo si se solapan pixels.
Hay buenos manuales de colisiones por ahí, si te interesa algún caso particular coméntame.
Un saludo.