Autor Tema: Aircraft game en Java  (Leído 9012 veces)

perix90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Aircraft game en Java
« en: 19 de Diciembre 2013, 20:38 »
Hola buenas,

Soy nuevo en el foro y me quiero presentar primeramente. Me llamo Pedro y estudio Ingeniería en Informática. Me he unido a este foro porque necesito ayuda. Al mismo tiempo espero poder resolver dudas relacionadas con la programación.

Resulta que tengo que hacer un juego en java : El aircraft.

Adjunto un PDF con el enunciado. Al menos necesito saber como empezar, ya que mis conocimientos sobre java son básicos. No manejo muy bien los threads, concurrencia y demás.

Gracias, programadores ;)

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Aircraft game en Java
« Respuesta #1 en: 19 de Diciembre 2013, 23:35 »
Hola, he leído el enunciado y me ha parecido... excesivo. No conozco bien de qué asignatura se trata ni si tienes que hacerlo individualmente o en grupo.

Las prácticas de crear juegos en Java en Ingeniería Informática suelen ser juegos individuales (jugador contra máquina) y aquí si no me equivoco están hablando de al menos dos jugadores. Deberías confirmar que un jugador sea humano y el otro jugador el ordenador, si no es así la complicación ya me parece excesiva para un proyecto individual. Lo normal es que el jugador juegue contra el ordenador usando el teclado, pero si quieren complicarlo puede ser con joystick... todo esto deberías confirmarlo.

¿Por dónde empezar? Yo te diría que empieces por aclarar estas cuestiones básicas; luego por definir con exactitud el juego, con una redacción informal. Una vez tengas la redacción informal, haz un diagrama de clases donde indiques las clases que van a intervenir en el juego, relaciones de herencia, métodos principales, etc. Todo esto en papel... para aclarar ideas. Cuando tengas un diagrama de clases relativamente organizado y razonable, empezar a programar.

perix90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Aircraft game en Java
« Respuesta #2 en: 20 de Diciembre 2013, 00:05 »
Gracias por contestar.

Efectivamente se ha pasado 14 pueblos. Es para una asignatura que se llama programación distribuida. La asignatura son 2 partes: 1 es un proyecto que es hacer un chat al estilo whatsapp o el mismo Messenger. Esa es más manejable. La otra parte es otro proyecto con lo del aircraft. Lo malo es que lo tengo que presentar después de Navidades. No me da tiempo ni en broma , así que haré lo que pueda.

perix90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Aircraft game en Java
« Respuesta #3 en: 20 de Diciembre 2013, 00:06 »
Me olvide citar tu mensaje !

Hola, he leído el enunciado y me ha parecido... excesivo. No conozco bien de qué asignatura se trata ni si tienes que hacerlo individualmente o en grupo.

Las prácticas de crear juegos en Java en Ingeniería Informática suelen ser juegos individuales (jugador contra máquina) y aquí si no me equivoco están hablando de al menos dos jugadores. Deberías confirmar que un jugador sea humano y el otro jugador el ordenador, si no es así la complicación ya me parece excesiva para un proyecto individual. Lo normal es que el jugador juegue contra el ordenador usando el teclado, pero si quieren complicarlo puede ser con joystick... todo esto deberías confirmarlo.

¿Por dónde empezar? Yo te diría que empieces por aclarar estas cuestiones básicas; luego por definir con exactitud el juego, con una redacción informal. Una vez tengas la redacción informal, haz un diagrama de clases donde indiques las clases que van a intervenir en el juego, relaciones de herencia, métodos principales, etc. Todo esto en papel... para aclarar ideas. Cuando tengas un diagrama de clases relativamente organizado y razonable, empezar a programar.

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Aircraft game en Java
« Respuesta #4 en: 20 de Diciembre 2013, 10:41 »
Si la asignatura es programación distribuida, se supone que ya debes de haber cursado alguna asignatura de programación orientada a objetos donde hayas adquirido lo que son los fundamentos de POO y del lenguaje Java. Aún así, desarrollar esta aplicación desde cero completa requeriría bastante tiempo. No sé si se pretende que sea una aplicación web o una aplicación en red. Sea como sea, desde cero requeriría mucho tiempo. Lo lógico sería que si quieren que se apliquen específicamente los conocimientos propios de la asignatura dieran un código de partida y sobre ese código de partida que el alumno tuviera que desarrollar determinados fragmentos. De cualquier forma no quiero desanimarte, trata de enterarte de cómo lo están haciendo otros compañeros (al menos la idea), quizás haya cosas que te faciliten el trabajo que no estás teniendo en cuenta.

Por darte alguna orientación (en base a juegos que he desarrollado en java, no te digo que tengas que hacerlo de una manera u otra, eso tendrás que pensarlo tú) en otras ocasiones he usado una clase a la que denomino RelojDeJuego. Aquí algunos detalles:

Código: [Seleccionar]
Utiliza:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
Tiene como variables de clase:
// Variables de clase
private Notificacion notificacionDeReloj;
private static Timer contadorDeSegundos;
private static int segundosTranscurridos;

El contador de segundos se basa en un objeto Timer.

En el constructor se inicializa el contador de segundos, se establecen los segundos transcurridos a cero y se invoca el método iniciarReloj() para iniciar el reloj.

Los métodos en esta clase serían: getTiempoTranscurrido(), detenerReloj(), reiniciarReloj(), iniciarReloj(), contarSegundo(), notificarPasoSegundo()

Realmente esto tiene su complejidad, porque el objeto RelojDePartida se tiene que comunicar con otros objetos dentro del juego, y esto depende en concreto de cada juego y de cómo se plantee, no hay un esquema que valga para todos los juegos. Saludos.

Por cierto, para responder un mensaje no tienes por qué citar la respuesta anterior  ;)

perix90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Aircraft game en Java
« Respuesta #5 en: 27 de Enero 2014, 13:52 »
Hola buenas,

A todo aquel buen programador: Ya casi tengo terminado el juego del Aircraft, pero no se por que me pega un petardazo al empezar el juego. No se muestran los aircrafts ni pasa nada. he puesto el código de 800 formas distintas pero nada.

Os dejo el código en un ZIP para que me echéis una mano ,por favor :( . Al final es posible que sea una tontería. En el zip esta el "src", los .java y tbm las imágenes que uso. También hay clips de sonido pero eso son opcionales.

Gracias :)

perix90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Aircraft game en Java
« Respuesta #6 en: 27 de Enero 2014, 13:55 »
Se me olvido poner los errores que me da :

-----

Jan 27 13:53:52 MacBook-de-Pedro.local java[424] <Error>: CGContextGetCTM: invalid context 0x0
Jan 27 13:53:52 MacBook-de-Pedro.local java[424] <Error>: CGContextSetBaseCTM: invalid context 0x0
Jan 27 13:53:52 MacBook-de-Pedro.local java[424] <Error>: CGContextGetCTM: invalid context 0x0
Jan 27 13:53:52 MacBook-de-Pedro.local java[424] <Error>: CGContextSetBaseCTM: invalid context 0x0
Jan 27 13:54:40 MacBook-de-Pedro.local java[424] <Error>: CGContextGetCTM: invalid context 0x0
Jan 27 13:54:40 MacBook-de-Pedro.local java[424] <Error>: CGContextSetBaseCTM: invalid context 0x0
Jan 27 13:54:40 MacBook-de-Pedro.local java[424] <Error>: CGContextGetCTM: invalid context 0x0
Jan 27 13:54:40 MacBook-de-Pedro.local java[424] <Error>: CGContextSetBaseCTM: invalid context 0x0
Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
   at java.lang.Thread.start(Thread.java:671)
   at Aircraft.actionPerformed(Aircraft.java:273)
   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
   at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
   at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
   at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
   at java.awt.Component.processMouseEvent(Component.java:6414)
   at javax.swing.JComponent.processMouseEvent(JComponent.java:3275)
   at java.awt.Component.processEvent(Component.java:6179)
   at java.awt.Container.processEvent(Container.java:2084)
   at java.awt.Component.dispatchEventImpl(Component.java:4776)
   at java.awt.Container.dispatchEventImpl(Container.java:2142)
   at java.awt.Component.dispatchEvent(Component.java:4604)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4618)
   at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4279)
   at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4209)
   at java.awt.Container.dispatchEventImpl(Container.java:2128)
   at java.awt.Window.dispatchEventImpl(Window.java:2492)
   at java.awt.Component.dispatchEvent(Component.java:4604)
   at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:717)
   at java.awt.EventQueue.access$400(EventQueue.java:82)
   at java.awt.EventQueue$2.run(EventQueue.java:676)
   at java.awt.EventQueue$2.run(EventQueue.java:674)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:97)
   at java.awt.EventQueue$3.run(EventQueue.java:690)
   at java.awt.EventQueue$3.run(EventQueue.java:688)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:687)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:205)
   at java.awt.Dialog$1.run(Dialog.java:1049)
   at java.awt.Dialog$3.run(Dialog.java:1101)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.awt.Dialog.show(Dialog.java:1099)
   at java.awt.Component.show(Component.java:1615)
   at java.awt.Component.setVisible(Component.java:1567)
   at java.awt.Window.setVisible(Window.java:846)
   at java.awt.Dialog.setVisible(Dialog.java:984)
   at Menu.actionPerformed(Menu.java:130)
   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
   at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
   at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
   at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
   at java.awt.Component.processMouseEvent(Component.java:6414)
   at javax.swing.JComponent.processMouseEvent(JComponent.java:3275)
   at java.awt.Component.processEvent(Component.java:6179)
   at java.awt.Container.processEvent(Container.java:2084)
   at java.awt.Component.dispatchEventImpl(Component.java:4776)
   at java.awt.Container.dispatchEventImpl(Container.java:2142)
   at java.awt.Component.dispatchEvent(Component.java:4604)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4618)
   at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4279)
   at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4209)
   at java.awt.Container.dispatchEventImpl(Container.java:2128)
   at java.awt.Window.dispatchEventImpl(Window.java:2492)
   at java.awt.Component.dispatchEvent(Component.java:4604)
   at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:717)
   at java.awt.EventQueue.access$400(EventQueue.java:82)
   at java.awt.EventQueue$2.run(EventQueue.java:676)
   at java.awt.EventQueue$2.run(EventQueue.java:674)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:97)
   at java.awt.EventQueue$3.run(EventQueue.java:690)
   at java.awt.EventQueue$3.run(EventQueue.java:688)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:687)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

----------

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Aircraft game en Java
« Respuesta #7 en: 27 de Enero 2014, 19:53 »
Hola ¿qué tal? Larga lista de errores... aunque es posible que todo esté originado por un pequeño detalle, como dices. He intentado ver el código pero creo que no se ha guardado bien. Primero me aparecen errores al descomprimir el zip, luego si continúo aparecen archivos .class que no tienen archivos .java, por ejemplo aparece un archivo relog.class pero no hay relog.java. También aparecen archivos con nombres raros como Nave$Ene.class y tampoco está el archivo .java... no sé exactamente qué puede haber pasado, pero "o sobran archivos" o "faltan archivos" Saludos

perix90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Aircraft game en Java
« Respuesta #8 en: 27 de Enero 2014, 20:02 »
Buenas Alex,

Gracias por contestar!. Te re-adjunto otro ZIP con solo los .java, que seria copiar a un nuevo proyecto y arrancar. A ver si no hay fallos de descompresión

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Aircraft game en Java
« Respuesta #9 en: 30 de Enero 2014, 10:35 »
Ahora sí compila y el programa arranca, pero efectivamente me salta un error igual que a tí y a primera vista no logro ver dónde está el problema. En proyectos largos lo adecuado es ir construyéndolos poco a poco e ir guardando versiones a medida que se avanza el trabajo, de modo que si en un momento dado salta un error se pueda volver a una versión anterior y continuar trabajando. Esto es lo ideal, aunque es cierto que a veces las cosas se complican tanto que no es posible. Si saco algo te aviso.

perix90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Aircraft game en Java
« Respuesta #10 en: 30 de Enero 2014, 10:47 »
Buenas Alex !

Ya he solucionado el problema. Eran 2 cosas. 1 era que el objeto Ene (de enemigo) tiene que estar dentro del método ActionPerformed(); y luego las imágenes y clips no se muestran por los PATHS a esos archivos. Puse la ruta absoluta y funciono. Así qué el programa ya arranca correctamente. Con todo y con eso aún hay pequeños bugs pero jugar se puede jugar.

Gracias por la ayuda :)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".