Git Product home page Git Product logo

juego-2d-java's People

Contributors

javadevone avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

juego-2d-java's Issues

No puedo ejecutar el juego me lanza un error

Es como si no pudiera cargar ningun recurso, me da error primero de la Fuente y luego de las imagenes de la siguiente manera:

java.io.IOException: Problem reading font data. at java.desktop/java.awt.Font.createFont0(Font.java:1208) at java.desktop/java.awt.Font.createFont(Font.java:1076) at principal.herramientas.CargadorRecursos.cargarFuente(CargadorRecursos.java:103) at principal.Constantes.<clinit>(Constantes.java:43) at principal.GestorPrincipal.main(GestorPrincipal.java:43) java.io.IOException: Stream closed at java.base/java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:157) at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:244) at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:263) at java.desktop/com.sun.media.sound.RIFFReader.read(RIFFReader.java:126) at java.desktop/com.sun.media.sound.RIFFReader.<init>(RIFFReader.java:61) at java.desktop/com.sun.media.sound.WaveExtensibleFileReader.getAudioFileFormatImpl(WaveExtensibleFileReader.java:172) at java.desktop/com.sun.media.sound.SunFileReader.getAudioFileFormat(SunFileReader.java:54) at java.desktop/com.sun.media.sound.WaveExtensibleFileReader.getAudioInputStream(WaveExtensibleFileReader.java:259) at java.desktop/javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1010) at principal.herramientas.CargadorRecursos.cargarSonido(CargadorRecursos.java:123) at principal.sonido.Sonido.<init>(Sonido.java:13) at principal.GestorPrincipal.<init>(GestorPrincipal.java:23) at principal.GestorPrincipal.main(GestorPrincipal.java:43) Exception in thread "main" java.lang.IllegalArgumentException: input == null! at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1402) at principal.herramientas.CargadorRecursos.cargarImagenCompatibleTranslucida(CargadorRecursos.java:50) at principal.control.Raton.<init>(Raton.java:33) at principal.graficos.SuperficieDibujo.<init>(SuperficieDibujo.java:31) at principal.GestorPrincipal.inicializar(GestorPrincipal.java:57) at principal.GestorPrincipal.iniciarJuego(GestorPrincipal.java:52) at principal.GestorPrincipal.main(GestorPrincipal.java:46)

Tarea Code Smell

Asunto: Tarea4 - Code Smell Nota: Es parte de un deber, siéntete libre de ignorar.
CodeSmell: Data Clumps

Justificación de Problema: Los datos posicionX y posicionY se pasan como parámetros repetidamente en varios métodos de la clase enemigo. Esto indica que estos datos deberían ser encapsulados.

image
image
Refactorizacion: Replace data value with object
Solución: Reemplazar las variables posicionX y posicionY por un objeto Coordenada, que encapsula las coordenadas x e y y proporciona métodos para operaciones relacionadas.
Nota: Esto es un ejemplo de como organizarlo.

image

image

image

Beneficios de Refactorizar: Ayuda a reducir la cantidad de código utilizado en la clase Enemigo al mejorar la organización y estructura del mismo. Mejora la claridad de compresión del código y simplifica los métodos que los usan. Este tipo de objeto es utilizado en algunas partes del programa por lo que se podría reutilizar.

Posible implementación del patron de diseño Composite

Hola estuve revisando el código de tu juego y noté algo raro en la parte en cómo esta creado el inventario. El siguiente diagrama de clases corresponde al diseño actual del inventario:

Tarea Patrones de Diseño - Composite

Lo que podemos notar aquí es una mala estructura del inventario puesto que no podemos saber muy bien como este se relaciona con el contenedor o incluso con los objetos únicos. De la misma manera se ve que se podría implementar el patrón Composite para poder ordenar mejor esta estructura y evitar problemas futuros al querer acceder desde alguna otra clase a los objetos del inventario.

Le propongo implementar la siguiente solución que nos ayuda a relacionar todos los tipos de objetos y el contenedor de ellos con el inventario.

Tarea Patrones de Diseño - Composite (1)

De esta manera vemos como el inventario directamente tendría instancias de cualquiera que implemente esta interfaz y no solo de un objeto como se encontraba anteriormente dándonos la ventaja de poder acceder a dichos objetos con mayor facilidad.

Tarea4 CodeSmell

Asunto: Tarea4 - Code Smell Nota: Es parte de un deber, siéntete libre de ignorar.
CodeSmell #5: Feature Envy

Justificación de Problema: La clase jugador tiene los métodos de determinarDirección, evaluarVelocidadX, evaluarVelocidadY solo usa métodos de la clase GestorControles y no métodos propios en estos. Por lo que los métodos en cuestión están “envidiando” ciertas funcionalidades de otro objeto. Además, tener estos métodos dentro de la clase jugador hace que el código en esta sea más extenso. Esto nos sugiere que los métodos deberían ser parte de la clase GestorControles.

Solución: Mover dichos métodos a GestorControles en donde tenga mas sentido su uso sin que Jugador tenga que “envidiar” la funcionalidad de otra clase. También se agrega una llamada al método determinarDirección dentro de la clase jugador para poderlo usar.
Nota: Esto es un ejemplo de como organizarlo.

image

image

Beneficios de Refactorizar: Se mejora la cohesión de ambas clases al tener una responsabilidad especifica y solo hacer uso de llamadas a métodos. Hace más sencillo modificar una clase sin afectar a otra. Mejora la legibilidad del código y disminuye la cantidad de líneas de código dentro de las clases lo que hace más sencillo la corrección de errores.

TareaCodeSmell

Asunto: Tarea4 - Code Smell Nota: Es parte de un deber, siéntete libre de ignorar.

CodeSmell: Large class
Repositorio: juego-2d-java
Justificación de Problema: La clase Dijkstra contiene varios métodos que ejercen diferentes funcionalidades. La acumulación de métodos podría llegar a complicar el entendimiento de la clase. Es posible también que se complique la reutilización de código en otras partes del programa lo que podría llevar a la necesidad de mantenimiento al código.
Las responsabilidades de los diferentes métodos van desde el constructor, la obtención del nodo, evaluación del mapa del juego, encontrar nodos vecinos.

Técnica de refactorización: Extract Class
Solución:
Pasamos de tener una sola clase con muchas funciones a subdividirlas en clases más pequeñas y específicas.
Nota: Esto es un ejemplo de como organizarlo.
image

image

image

image

image

Beneficios de Refactorizar: Dividir la clase en otras más pequeñas facilitara la comprensión del código de manera que se facilitara la reutilización de código dentro del programa. Facilita el mantenimiento del programa al contar con clases más simplificadas y especificas sin que los cambios afecten a otras partes del código.

Posible implementación del patron de diseño Builder

Hola, estuve revisando el código de tu juego, el cual me gustó mucho, y quisiera dar una recomendación que tiene que ver en cómo se crean los enemigos. Quise ver un posible crecimiento futuro del juego en donde se vea necesario la creación de nuevos enemigos o simplemente darles clases diferentes. Para eso yo sugiero el implementar el patrón de diseño llamado Builder que nos permitirá crear nuevos enemigos de diferente clase de una forma rápida. A continuación, se ilustra el diagrama de clases surgido al momento de implementar el Builder:

Tarea Patrones de Diseño - Builder (1)

Como se nota en la solución propuesta, nuestro diagrama de clases se extendió mucho respecto al que teníamos anteriormente debido a que se añadieron tres nuevas clases, pero, aunque al principio puede ser un poco difícil de entender, obtendremos muchos beneficios al momento de querer crear nuevos enemigos sin la complejidad que implica crear todos los tipos disponibles desde cero.

Trying to do Refactoring.

The following is just a homework assignment about trying to implement Refactoring in old Java Software. Please do ignore it if You wish because its not something done by a professional o someone that knows what they are doing. Sorry to have bother you.
Nueva carpeta (13).zip

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.