Evite 3D , ya que necesitaría saber cómo hacer modelos 3D o encontrar buenos modelos, necesitaría saber cómo cargar dichos modelos (a menudo una tarea épica en sí misma, lamentablemente), y cómo dibujarlos en la pantalla (p. Ej. OpenGL o DirectX requieren mucho trabajo para ganar poco, e incluso un motor como jMonkeyEngine requiere conocimientos sobre cómo utilizar el motor, junto con conocimientos básicos de 3D). Brillar imágenes 2D en la pantalla y moverlas es mucho más simple que tratar con vértices, materiales, ver matrices, transformaciones, etc. etc. Creo que entiendes el punto.
Quédese con las bibliotecas y clases de Java incorporadas: Graphics2D, ImageIO, oyentes de mouse y teclado AWT, Canvas, API de Java Sound, etc. Los beneficios de seguir con estos en lugar de encontrar otra biblioteca incluyen: ya los conoce (hasta cierto punto), sabe que están bien probados y son estables y generalmente tienen sentido, la documentación y los recursos en línea son abundantes y son portátiles, por lo que no tiene que preocuparse por instalar bibliotecas adicionales con bibliotecas nativas y todo eso.
Construya una pequeña biblioteca de fragmentos de código con anticipación. Esto incluiría cosas como cargar una imagen, dibujar la imagen en una posición en la pantalla, escalar la imagen y otros efectos, reproducir un sonido, reproducir música de fondo, detección de colisión de cuadro delimitador, dibujar texto. También tenga una aplicación esqueleto que abra un Marco (o Applet), le agregue un Lienzo, y los métodos de pintura y repintado del lienzo deben anularse, y un hilo debe estar en bucle con el método de repintado del lienzo (o un temporizador que lo llama). Puedes aprender estas cosas si buscas Java 2D game programming. Suponiendo que tenga acceso a la biblioteca de su universidad, debe tener una serie de buenos libros de juegos Java a su disposición; échales un vistazo y hojea los fragmentos antes mencionados, y otros que eché de menos.
Practique el control de origen y la división del trabajo con su equipo antes de tiempo.¿Vas a usar Subversion, Git, Mercurial o algo más? ¿Están las computadoras de todos configuradas con la misma versión actualizada de Java? Cree su repositorio, confirme / inserte algunos archivos, asegúrese de que todos tengan el repositorio desprotegido y listo para su sistema. Tal vez cometa una aplicación 'hello world' y asegúrese de que todos puedan extraerla, modificarla y comprometerla; y asegúrese de saber cómo manejar la fusión (ya sea que la evite por completo con una buena comunicación o programación de pares, o si sabe cómo usar una herramienta de fusión). O, si no está familiarizado con el control de código fuente, asegúrese de encontrar una solución que funcione; ya sea que se trate de programación en pareja mientras la tercera persona hace arte o sonidos, o algo más, solo asegúrese de organizarse desde el principio o perderá toneladas de tiempo.
Marcar enlaces a sitios web que ofrecen medios gratuitos. Ha habido bastantes sitios de este tipo en otras preguntas aquí; sitios como freesoundson perfectos para encontrar rápidamente medios útiles para usar en su juego cuando no tiene tiempo para hacerlo desde cero. Marque este sitio, por supuesto, para que pueda hacer una pregunta si se queda atrapado en algo. Marque foros como los foros de gamedev.net para que pueda buscar respuestas. Si opta por utilizar una biblioteca de terceros, marque su sitio web. Organice estos marcadores en carpetas y tome tantos como sea posible, y asegúrese de compartirlos para que los tres tengan la misma biblioteca útil de marcadores. No toma mucho tiempo recorrer y recopilar estos marcadores y organizarlos por tipo / tema, pero le ahorra mucho tiempo cuando no tiene que recordar todos esos sitios web en el medio de su proyecto.
Para obtener más sugerencias, consulte las respuestas a mi pregunta "¿Cómo prepararse para una competencia de desarrollo de juegos?" .
Para abordar el resto de su pregunta ... El consejo general es: no apunte alto . Sin embargo, puede variar ampliamente dependiendo de qué tan preparado esté (es decir, mis sugerencias anteriores) y sus habilidades en Java. Esto es en gran medida un juicio personal basado en su historial, pero dado que ninguno de ustedes tiene historial de hacer juegos (y, por lo tanto, no puede juzgar el tiempo necesario), apunte realmente muy bajo . Proponga una idea realmente básica que se pueda implementar fácilmente en 2D sin ningún concepto avanzado (por ejemplo, evite colisiones por píxeles, cálculos físicos locos, efectos de partículas, etc.). Pero luego crea una lista priorizadade las características del juego, con el mayor detalle posible (por ejemplo, divida cada característica en tantas tareas separadas como sea posible). De esta manera, simplemente avanza en la lista lo más lejos posible, y si no llega a algunas tareas de baja prioridad, no debería ser un gran problema. Esto debe hacerse con cuidado (aún necesita un juego funcional al final del tiempo, por lo que hay un conjunto mínimo de tareas que deben hacerse y algunas tareas dependen de otras tareas), pero en general creo que este es el mejor enfoque cuando no sabes cuánto tiempo tomarán las cosas.