¿Cuál es el principio del juego de empujar la caja?
Para decirlo sin rodeos, es detección de colisiones. Si el código es detallado, depende de lo que uses para implementarlo. Por ejemplo, DIRECTX, una biblioteca de desarrollo en 3D basada en VC, tiene una API para detectar distancias entre entidades. Si la distancia devuelta es menor que la suma de los radios de las esferas delimitadoras de colisión de las dos entidades, entonces la caja no se moverá en la dirección de la velocidad del personaje.
De hecho, se pueden utilizar motores de física para ayudar en el desarrollo de este tipo de juegos, lo que reducirá en gran medida la dificultad de desarrollo y mejorará en gran medida la autenticidad de la simulación. Recomiende PhysX, un motor de física basado en OpenGL.
2D es similar, no es más que obtener la distancia entre objetos para comparar y aplicar los cambios correspondientes en función de la comparación.