[Devlog] Mi primer juego - Enemigos que llegan desde el espacio exteri

GlatoR

Prólogo

Animado por Jastron he decidido crear este hilo para dejar escrito un seguimiento del juego que estoy haciendo en Java y sin uso de frameworks. El motivo de su desarrollo se debe a una práctica del primer año del FP.

No es un proyecto ambicioso, pues no me dedicaré durante estas semanas únicamente a él. Ni puedo y sobre todo, no debo. Aun así, espero que el resultado final tenga un trabajo detrás que sea satisfactorio para mí.

Fecha de entrega: junio

Tipo de juego


Mi idea es crear un juego de naves en 2D de scroll horizontal. Al principio introducirás tu nick y cuando termine la partida saldrán las mejores puntuaciones.

La base de datos en un principio la dejaré de lado.

Primera versión


Una nave controlada por el jugador frente una oleada de naves enemigas. Por cada nave destruida la puntuación irá en aumento, a medida que lo haga, más enemigos saldrán. La partida terminará cuando el jugador haya sido impactado por un misil o haya colisionado con un enemigo, es probable que también ponga un game over si un enemigo llega hasta el lateral izquierdo de la pantalla sin haber sido destruido (o X cantidad de ellos).

La IA (si eso se puede considerar inteligencia) será de la siguiente manera. Cuando la nave del jugador se encuentre cercana al eje Y de una nave enemiga, ésta disparará un proyectil.

Como veis, es una idea sencilla y con ella terminada podría dar por concluido el juego a falta de introducir la base de datos.

Updates

Mis updates son muy ridículos, pero para mí todo esto es nuevo al fin y al cabo. Me explayaré mejor más adelante (o cuando tenga tiempo, pero como dije, son muy ridículos para la mayoría de los que me estáis leyendo xD).

  • Primero

Añadiendo movimiento

NSFW
NSFW
  • Segundo

Añadiendo proyectiles

NSFW
NSFW
NSFW
  • Tercero

Añadiendo enemigos

NSFW
  • Cuarto

Colisiones

6/4/18

NSFW
NSFW

8/4/18

NSFW

Segunda versión


Lo que me gustaría introducir/hacer

  • Aprender un poco de Pixel Art
  • Añadir sonido
  • ¿Mejorar la IA?

Podéis opinar lo que queráis y aconsejarme si así lo deseáis, pero tened en cuenta que es un proyecto que aunque lo me tome en serio, como dije no podré dedicarle siempre mucho tiempo. Así que no os frustréis conmigo!

4
txandy

Mola, a favs

1
Troyer

Que pasada, GOTY.

1
Jastro

Es gracioso, pero incluso con los graficos minimalistas, se ven chulo de cojones :D

Tengo ganas de darle caña

1
GlatoR

Gracias hermosos :$ xD

Soy muy "finolis" con los colores. Menos ese verde que es el que tiene por defecto Color xD

2 respuestas
B

#5 Tan bonito como tu :3

1
Jastro

#5 vas a tirar por el tipico bullet hell? O vas a ir directamente a lo basico, que disparen y aparezcan naves en diferentes lugares y au?

1 respuesta
B

Por cierto, te falta añadir fases es decir que llegado a X punto cambien un poco los colores.
Y te falta un contador de distancia o algo similar

1 respuesta
B

Veo que no hay un garbage collector y me voy ;...;

2 respuestas
GlatoR

#7 que quiere decir usted con eso? que los enemigos disparen al azar sin pensar o que cuando te detecten lo hagan? Tenía pensado que cuando te localizaran disparen hacia delante, aunque he cambiado de idea a una mejor e igual de fácil de hacer (y más lógica) y es que cuando la nave sea detectada, los proyectiles se dirijan hacia donde se encontraba en ese momento.

#8 lo de los colores es buena idea, aunque si le meto pixel art ese cambio dejaría de estar o sería muy pequeño.

Sobre el contador de distancia te refieres hasta donde llega la nave? tenía pensado únicamente el score en un principio. Aunque a lo mejor estás diciendo otra cosa xD

#9 mmmm en un principio no sé como haría eso. Lo que hago es que cuando un enemigo/proyectil sale del frame es eliminado de la lista, aunque ya me han dicho que eso no es lo que tú te refieres.

1 respuesta
B

#10 Realmente lo he puesto por trolear :D No puedo ver tu código al completo ;...;

1 respuesta
GlatoR

#11 ah xdd, aunque quizás tengas razón, soy muy nuevo en esto y cuando termine tendré que reorganizar clases, herencias y tal, por ejemplo

1 respuesta
B

#12 Eso te recomiendo intentar hacerlo desde el inicio. Aunque según avanza el proyecto verás cambiando cosas y modificando.

Lo mejor es reutilizar código y no repetir. Pensar como utilizar un método para que pueda actuar en varias acciones en vez de tener varios métodos que hagan cosas parecidas.

1 respuesta
GlatoR

#13 Si, tengo mucho código repetido o que usa un método parecido, lo estuve pensando ayer, quizás esta noche lo reestructure, haré una copia de seguridad por si acaso HAHAHAHA

Gracias hermoso

1 respuesta
NickNack

Buen concept pero esto esta en pañales bebe 1 - 2 meses.

Mientras aprendes a hacer pixel art (ilustrar un juego asi... sin saber pixel art, te vas a querer pegar un tiro) por que no usas assets libres como placeholders?

1 respuesta
B

#14 Momento para empezar a trabajar con repositorios Git :D

1 1 respuesta
GlatoR

#15 No es que quiera estudiar pixel art para este juego en concreto, si no que no me importaría aprenderlo para mi uso y disfrute, y lo que consiga con él pues añadirlo a este juego.

A las malas, si veo que es muy, muy, muy chusto, pues haré lo que me dices siempre y cuando decida ponerle imágenes al juego :P

#16 tienes razón en ello xD

kesada7

#9 Pero en Java no era que no te tenías que preocuparte de liberar memoria? Que tiene su recolector de basura automático para que tu no tengas que hacer nada xD Pregunto desde la ignorancia ehh que Java toque a nivel básico y hace mucho tiempo.

#1 Tengo curiosidad por ver como vas a afrontar el tema de las colisiones si no estás usando ninguna librería y lo vas a hacer a pelo. Me refiero más allá de simplemente comprara que la pos.x pos.y de la nave == pos.x pos.y del disparo, ya que eso no te va a servir >.<

1 respuesta
GlatoR

#18 Eso mismo estaba mirando xD

No sé como lo haré ahora mismo, de todas formas, por qué no vale de la forma que dices?

1 respuesta
kesada7

#19 Pues porque la pos.x pos.y de tu nave solo es la posición de un pixel de la nave, por lo que ese if solo se cumplirá cuando colisione con una parte de la nave. No sé si me he explicado bien :/ Ahora mismo tus naves de todas formas son rectangulos muy pequeños y no se ve tan claro lo que digo, pero si luego usas un sprite de una nave verás por ti mismo lo que intento explicarte.

2 respuestas
HeXaN

#20 ¿Eso no se arregla con bounding box?

1 respuesta
GlatoR

#20 mmmmmm

Yo estuve viendo que la imagen que creas tienes que meterlo en una especie de caja que tú indicas sus dimensiones. No lo sé muy bien, ya lo iré comprobando.

Gracias hermoso

kesada7

#21 Exacto, no conozco la clase boundixBox pero he mirado por encima y es eso. La cosa era como dije si está haciendolo sin usar clases externas ya sea para aprender, ya que al final el boundiBox no es más que una clase que tu te puedes crear más simple, por ejemplo una clase Rectangulo con atributos pos.top pos.bottom pos.right pos.left y ya tienes la caja que decís. Este rectangulo se la puedes poner a las naves y a los disparos. Luego solo necesitas crear unos metodos a las clases como: estaRectanguloDentro( ); Que simplemente mira si un rectangulo está dentro de otro rectangulo por lo que esta colisionando == true

Este es el metodo más simple, tiene el incoveniente de que es menos preciso, ya que los sprites de las naves normalmente no son exactamente un rectangulo, por lo que existen otras tecnicas, pero creo que para empezar hacer algo así tiene merito y aprendes mucho como funciona el principio de las colisiones :)

1
_Rpv

Me gusta, a fav.

B

joder recuerdo cuando hice colisiones a pelo la primera vez en mi vida.... a demás "rebotar" al colisionar, por tanto saber si la colision venia por lo lados o arriba o abajo...

Suerte!

1 1 respuesta
GlatoR

Estuve el día de hoy probando las colisiones en otro proyecto para hacerme una idea de su funcionamiento y potencial. Lo que dices hermoso #25 tiene que estar muy chulo en juegos de asteroides (por lo que he visto en YT xD).

He añadido colisión con el enemigo.

NSFW

También que cuando de un proyectil, tanto éste como el enemigo desaparezcan.

NSFW

Tuve problemas con una Exception, concretamente el siguiente:

Salía cuando eliminaba a varios enemigos con los proyectiles ( remove() ). Lo arreglé de mala manera, o sea, incluyendo un try/catch.

Lecherito

En serio has hecho un try catch para eso? XD LUL

1 respuesta
GlatoR

#27 y que podría haber hecho al respecto?

1 respuesta
Lecherito

#28 Esperate que saco la brujula para ver tu codigo y te lo digo.

Apuesto a que tienes un for desde i=0;i<=size() xD

1 respuesta
GlatoR

#29

Mi respuesta anterior lo puse en el mismo nivel que tu post. No pasa nada.

Si te refieres que tengo en un for un operador " <= " no, no es así.

Gracias de todas maneras, hermoso.

1 respuesta