diff --git "a/Presentaci\303\263n1 (1).pptx" "b/Presentaci\303\263n1 (1).pptx" new file mode 100644 index 00000000..23b35ab2 Binary files /dev/null and "b/Presentaci\303\263n1 (1).pptx" differ diff --git a/README.md b/README.md index 3f71ec79..9f4a2e48 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,29 @@ -# Nombre del juego (<- borrar y completar) +# Meteoric Space ## Equipo de desarrollo -- Alguien -- Persona -- etc. - +- TOMAS RODRÍGUEZ SPUCH +- FRANCO LAPALMA +- SEGOVIA MARTIN ## Capturas +![image](https://github.com/user-attachments/assets/f3fa6d38-e72d-42ee-857c-cf2fd25044a4) -(agregar) +![image](https://github.com/user-attachments/assets/3ab3a42e-960e-4893-a2db-65bf2e51bd0d) -## Reglas de Juego / Instrucciones +![image](https://github.com/user-attachments/assets/6d7f3147-9eb5-4f80-b285-1aea79119d1a) -(Escribirlas) +## Reglas de Juego / Instrucciones + +Estas despegando de la tierra pero una lluvia de meteoritos se interpone en tu camino, debes destruirlos hasta llegar a tu destino. +Mientras más subas, más rapido caeran los meteoritos y de diferente tipo apareceran. +## Controles +Desplazamiento: Usa las teclas WASD para desplazarte por el mapa. +Disparar: presiona la tecla C para disparar tus municiones. +Habilidades especiales: presiona las teclas Z-X-V para activar las diferentes habilidades cuando esten disponibles. ## Otros -- Curso/Facultad -- Versión de wollok -- Una vez terminado, no tenemos problemas en que el repositorio sea público / queremos manternerlo privado +- Curso: K2005 Facultad: UTN FRBA +- Versión de wollok -0.2.11 +- Una vez terminado, no tenemos problemas en que el repositorio sea público diff --git a/assets/bala.png b/assets/bala.png new file mode 100644 index 00000000..4da8670e Binary files /dev/null and b/assets/bala.png differ diff --git a/assets/controles.png b/assets/controles.png new file mode 100644 index 00000000..8ebaeda1 Binary files /dev/null and b/assets/controles.png differ diff --git a/assets/duro.png b/assets/duro.png new file mode 100644 index 00000000..5cc32fe3 Binary files /dev/null and b/assets/duro.png differ diff --git a/assets/escudo_activado.png b/assets/escudo_activado.png new file mode 100644 index 00000000..9f50925b Binary files /dev/null and b/assets/escudo_activado.png differ diff --git a/assets/fondo-nivel-2.jpg b/assets/fondo-nivel-2.jpg new file mode 100644 index 00000000..514fd30f Binary files /dev/null and b/assets/fondo-nivel-2.jpg differ diff --git a/assets/fondo-nivel-3.jpg b/assets/fondo-nivel-3.jpg new file mode 100644 index 00000000..3f23447e Binary files /dev/null and b/assets/fondo-nivel-3.jpg differ diff --git a/assets/fondo-nivel-4.jpg b/assets/fondo-nivel-4.jpg new file mode 100644 index 00000000..455863dc Binary files /dev/null and b/assets/fondo-nivel-4.jpg differ diff --git a/assets/fondo-nivel-5.jpg b/assets/fondo-nivel-5.jpg new file mode 100644 index 00000000..4e422137 Binary files /dev/null and b/assets/fondo-nivel-5.jpg differ diff --git a/assets/fondo.jpg b/assets/fondo.jpg new file mode 100644 index 00000000..e65a700b Binary files /dev/null and b/assets/fondo.jpg differ diff --git a/assets/howtoplay.png b/assets/howtoplay.png new file mode 100644 index 00000000..8e92c02d Binary files /dev/null and b/assets/howtoplay.png differ diff --git a/assets/hud.png b/assets/hud.png new file mode 100644 index 00000000..5f985900 Binary files /dev/null and b/assets/hud.png differ diff --git a/assets/icono_escudo_disponible1.png b/assets/icono_escudo_disponible1.png new file mode 100644 index 00000000..9295ff44 Binary files /dev/null and b/assets/icono_escudo_disponible1.png differ diff --git a/assets/icono_escudo_no_disponible.png b/assets/icono_escudo_no_disponible.png new file mode 100644 index 00000000..b46e6171 Binary files /dev/null and b/assets/icono_escudo_no_disponible.png differ diff --git a/assets/inicio (6).png b/assets/inicio (6).png new file mode 100644 index 00000000..e0bf1fde Binary files /dev/null and b/assets/inicio (6).png differ diff --git a/assets/meteorito.png b/assets/meteorito.png new file mode 100644 index 00000000..6bbb9b40 Binary files /dev/null and b/assets/meteorito.png differ diff --git a/assets/municion_activa.png b/assets/municion_activa.png new file mode 100644 index 00000000..ec93f076 Binary files /dev/null and b/assets/municion_activa.png differ diff --git a/assets/municion_sinMunicion.png b/assets/municion_sinMunicion.png new file mode 100644 index 00000000..aa27ac1d Binary files /dev/null and b/assets/municion_sinMunicion.png differ diff --git a/assets/nave.png b/assets/nave.png new file mode 100644 index 00000000..be9f68e6 Binary files /dev/null and b/assets/nave.png differ diff --git a/assets/pantalla de fin.png b/assets/pantalla de fin.png new file mode 100644 index 00000000..e360c8f2 Binary files /dev/null and b/assets/pantalla de fin.png differ diff --git a/assets/pantalla de inicio8.png b/assets/pantalla de inicio8.png new file mode 100644 index 00000000..87f5b0fb Binary files /dev/null and b/assets/pantalla de inicio8.png differ diff --git a/assets/pepita.png b/assets/pepita.png deleted file mode 100644 index 6289e4f1..00000000 Binary files a/assets/pepita.png and /dev/null differ diff --git a/assets/ralentizacion.png b/assets/ralentizacion.png new file mode 100644 index 00000000..c99af75f Binary files /dev/null and b/assets/ralentizacion.png differ diff --git a/assets/ralentizacion_desactivada.png b/assets/ralentizacion_desactivada.png new file mode 100644 index 00000000..953eaf71 Binary files /dev/null and b/assets/ralentizacion_desactivada.png differ diff --git a/assets/veloz.png b/assets/veloz.png new file mode 100644 index 00000000..f7e8a061 Binary files /dev/null and b/assets/veloz.png differ diff --git a/example.wlk b/example.wlk new file mode 100644 index 00000000..ccff4e3f --- /dev/null +++ b/example.wlk @@ -0,0 +1,197 @@ +class ObjetoJuego { + var position + var property image + + method position() = position + method position(newPos) { + position = newPos + } + method image() = image + method image(newImage) { + image = newImage + } +} +class EntidadesVivas inherits ObjetoJuego{ + var property vida = 0 + var rango_X = 4 + var rango_Y = 4 + var ajuste_X=0 + var ajuste_Y=0 + method colisionaCon(otraEntidad) { + return (otraEntidad.position().x() >= position.x() - rango_X && otraEntidad.position().x() <= position.x() + rango_X + ajuste_X) && + (otraEntidad.position().y() >= position.y() - rango_Y && otraEntidad.position().y() <= position.y() + rango_Y + ajuste_Y) + } +} +class Nave inherits EntidadesVivas { + var property municionesDisponibles = 12 + + method gastarMunicion(){municionesDisponibles-=1} + + method disparar() { + if(municionesDisponibles>0 && vida==2){ + self.gastarMunicion() + return new Bala(position= position.right(4)) + } + else return + if(municionesDisponibles>0){ + self.gastarMunicion() + return new Bala(position= position.right(3)) + } + else return + + + } + + method sumarMunicion(municionNueva){ + municionesDisponibles += municionNueva + } + method perderVida() { + vida = vida - 1 + image = "nave.png" + } + method ponerEscudo(){ + vida=2 + image="escudo_activado.png" + + } + +} +class Bala inherits ObjetoJuego(image = "bala.png"){ +} + +class Meteorito inherits EntidadesVivas(image = "meteorito.png",rango_X=3,rango_Y=5,ajuste_X=1) { + var velocidad = 0 + method recibirDisparo() { + vida = vida - 1 + } + method mover() { + position = position.down(velocidad) + } + +} + + + +class Nivel inherits ObjetoJuego(image= "fondo.jpg", position=game.at(9, 0)) { + var nivel = 1 + var property meteoritosEliminados = 0 + var property tiempoRestante = 0 + var meteoritosParaEliminacion = 10 + var property velocidadMeteoritos = 2 + var property balas_disponibles = 2*meteoritosParaEliminacion + var property contadorMunicion = 0 + var property contadorEscudo = 0 + var property contadorVelocidad = 0 + method incrementarNivel() { + nivel += 1 + meteoritosEliminados = 0 + meteoritosParaEliminacion += 5 + velocidadMeteoritos += 0.5 + return nivel + } + + + + method eliminarMeteorito() { + meteoritosEliminados += 1 + contadorMunicion += 1 + contadorEscudo += 1 + contadorVelocidad += 1 + if (self.meteoritosRestantes() == 0) { + self.incrementarNivel() + image= fondo.cambiarFondo(self.nivelActual()) + } + } + + + method nivelActual() = nivel + method meteoritosRestantes() = meteoritosParaEliminacion - meteoritosEliminados + method generarMeteoritoDuro() = nivel >= 3 + method generarMeteoritoVeloz() = nivel >= 4 + + method iniciar_nave(){ + const nave = new Nave(vida=1,position=game.at(30,6),image="nave.png",rango_X=3,rango_Y=3,ajuste_X=5,ajuste_Y=1,municionesDisponibles=balas_disponibles) + return nave + } + + method reducirVelocidad(duracion) { + tiempoRestante = duracion + velocidadMeteoritos -= 2 + + } + method reducirTiempo(tiempo){ + tiempoRestante-=tiempo + } + + method aumentarVelocidad(aumento){ + velocidadMeteoritos += aumento + } + + +method crearMeteorito(tipo) { + const x = fondo.limite_izquierdo().randomUpTo(fondo.limite_derecho()).truncate(0) + const y = 75 + var velocidadExtra = 0 + var vida = 1 + var imagen = tipo + ".png" + + if (tipo == "duro") { + vida = 2 + } else if (tipo == "veloz") { + velocidadExtra = 2 + } + const meteorito = new Meteorito(position = game.at(x, y), velocidad = self.velocidadMeteoritos() + velocidadExtra, vida = vida, image = imagen) + return meteorito + } + + + +} +object fondo{ + var property image ="fondo.jpg" + method limite_derecho() = 99 + method limite_izquierdo() = 9 + method limite_arriba() = 80 + method limite_abajo() = 0 + method cambiarFondo(nivel) { + if (nivel >= 2 && nivel <= 5) { + self.image("fondo-nivel-" + nivel + ".jpg") + return self.image() + }else return 1 + }} +object sumar_minicion { + var property position = game.at(120, 51) + var property image = "municion_sinMunicion.png" + const property balas_a_agregar = 10 + + method cambiarFondo(fondo){ + image = fondo + } +} +object poner_Escudo{ + var property position = game.at(120,29) + var property image = "icono_escudo_no_disponible.png" + method cambiarFondo(fondo){ + image = fondo + } +} + +object reducir_velocidad{ + var property position = game.at(120, 8) + var property image = "ralentizacion_desactivada.png" + + method cambiarFondo(fondo){ + image = fondo + } + + + +} + + + + + + + + diff --git a/mainExample.wpgm b/mainExample.wpgm new file mode 100644 index 00000000..35af5958 --- /dev/null +++ b/mainExample.wpgm @@ -0,0 +1,246 @@ +import example.* +import wollok.game.* + +program meteoricSpace { + game.title("nave") + game.height(75) + game.width(150) + game.cellSize(25) + game.boardGround("hud.png") + +var juegoIniciado = false +var pantallaInicio = new ObjetoJuego(position = game.at(0, 0), image = "inicio (6).png") +var pantallaControls = new ObjetoJuego(position = game.at(0,0), image = "controles.png") +var pantallaSettings = new ObjetoJuego(position = game.at(0,0), image = "") +var pantallaGameOver = new ObjetoJuego(position = game.at(0, 0), image = "pantalla de fin.png") +var pantallaHowtoPlay = new ObjetoJuego(position = game.at(0,0), image = "howtoplay.png") +var musica = game.sound("8bits.mp3") + game.addVisual(pantallaInicio) + musica.play() + musica.volume(1) + + //keyboard.s().onPressDo({ game.addVisual()}) + + keyboard.h().onPressDo({game.addVisual(pantallaHowtoPlay)}) + + keyboard.q().onPressDo({game.addVisual(pantallaControls)}) + + keyboard.backspace().onPressDo({ + game.removeVisual(pantallaControls) + game.removeVisual(pantallaHowtoPlay) + game.removeVisual(pantallaControls) + }) + + keyboard.enter().onPressDo({ + if (!juegoIniciado) { + game.removeVisual(pantallaControls) + game.removeVisual(pantallaHowtoPlay) + game.removeVisual(pantallaControls) + juegoIniciado = true + game.removeVisual(pantallaInicio)} + + if (juegoIniciado){ + var balas = [] + var meteoritos = [] + var balasDisparadas = 0 + var nivel = new Nivel() + var nave = nivel.iniciar_nave() + game.addVisual(reducir_velocidad) + game.addVisual(nivel) + game.addVisual(nave) + game.addVisual(sumar_minicion) + game.addVisual(poner_Escudo) + + // Movimiento de la nave + keyboard.right().onPressDo({ + if(nave.position().x() < fondo.limite_derecho()) { + nave.position(nave.position().right(5)) + } + }) + + keyboard.left().onPressDo({ + if(nave.position().x() > fondo.limite_izquierdo()) { + nave.position(nave.position().left(5)) + } + + }) + + keyboard.up().onPressDo({ + if(nave.position().y() < fondo.limite_arriba()) + nave.position(nave.position().up(5)) + }) + + keyboard.down().onPressDo({ + if(nave.position().y() > fondo.limite_abajo()) + nave.position(nave.position().down(5)) + }) + + // Disparar + keyboard.c().onPressDo({ + if(nave.municionesDisponibles() > 0){ + var bala = nave.disparar() + balas.add(bala) + game.addVisual(bala) + } + }) + + keyboard.z().onPressDo({ + if (nivel.contadorMunicion() >= 5) { + nave.sumarMunicion(sumar_minicion.balas_a_agregar()) + sumar_minicion.cambiarFondo("municion_sinMunicion.png") + nivel.contadorMunicion(0) } + }) + keyboard.x().onPressDo({ + if (nivel.contadorEscudo() >= 10) { + nave.ponerEscudo() + poner_Escudo.cambiarFondo("icono_escudo_no_disponible.png") + nivel.contadorEscudo(0) } + }) + + keyboard.v().onPressDo({ + if (nivel.contadorVelocidad() >= 15) { + nivel.reducirVelocidad(5) + reducir_velocidad.cambiarFondo("ralentizacion_desactivada.png") + nivel.contadorVelocidad(0) } + }) + + game.onTick(100, "Movimiento Balas",{ + // Lista temporal para las balas que deben ser eliminadas + var balasABorrar = [] + var meteoritosABorrar = [] + + balas.forEach({ bala => + bala.position(bala.position().up(5)) + + if (bala.position().y() > game.height()) { + balasABorrar.add(bala) + } + }) + + // Borrar las balas fuera de pantalla + balasABorrar.forEach({ bala => + balas.remove(bala) + game.removeVisual(bala) + }) + }) + + + // Generar meteoritos + game.onTick(1000, "Aparece Meteorito",{ + if (meteoritos.size()< nivel.meteoritosRestantes()){ + const meteorito = nivel.crearMeteorito("meteorito") + meteoritos.add(meteorito) + game.addVisual(meteorito)} + + if (nivel.tiempoRestante() > 0) { + nivel.reducirTiempo(1) + if (nivel.tiempoRestante() == 0) { + nivel.aumentarVelocidad(2) + } + }}) + + + game.onTick(2000, "Aparece Meteorito",{ + if(nivel.generarMeteoritoDuro()){ + if (meteoritos.size()< nivel.meteoritosRestantes()){ + const meteorito = nivel.crearMeteorito("duro") + meteoritos.add(meteorito) + game.addVisual(meteorito)} + }}) + game.onTick(3000, "Aparece Meteorito",{ + if(nivel.generarMeteoritoVeloz()){ + if (meteoritos.size()< nivel.meteoritosRestantes()){ + const meteorito = nivel.crearMeteorito("veloz") + meteoritos.add(meteorito) + game.addVisual(meteorito)} + }}) + + + + + //METEORITOS ESPECIALES + + + // Movimiento de meteoritos + game.onTick(53, "Cae Meteorito", { + var meteoritosABorrar = [] + meteoritos.forEach({ meteorito => + meteorito.mover() + if (meteorito.position().y() < 0) { + meteoritosABorrar.add(meteorito) + } + }) + meteoritosABorrar.forEach({ meteorito => + meteoritos.remove(meteorito) + game.removeVisual(meteorito) + }) + if (nivel.contadorMunicion() == 5) { + sumar_minicion.cambiarFondo("municion_activa.png") + game.removeVisual(sumar_minicion) + game.addVisual(sumar_minicion) + } + if (nivel.contadorEscudo() == 10) { + poner_Escudo.cambiarFondo("icono_escudo_disponible1.png") + game.removeVisual(poner_Escudo) + game.addVisual(poner_Escudo) + } + if (nivel.contadorVelocidad() == 15) { + reducir_velocidad.cambiarFondo("ralentizacion.png") + game.removeVisual(reducir_velocidad) + game.addVisual(reducir_velocidad) + + } +}) + + game.onTick(13, "Verificar Colisiones", { + // Listas temporales para las balas y meteoritos que deben ser eliminados + var balasABorrar = [] + var meteoritosABorrar = [] + balas.forEach({ bala => + meteoritos.forEach({ meteorito => + if (meteorito.colisionaCon(bala)) { + balasABorrar.add(bala) + meteorito.recibirDisparo() + if(meteorito.vida()<=0){ + meteoritosABorrar.add(meteorito) + nivel.eliminarMeteorito()} + } + }) + }) + + // Verificar colisiones entre meteoritos y la nave + meteoritos.forEach({ meteorito => + if (nave.colisionaCon(meteorito)) { + meteoritosABorrar.add(meteorito) + nave.perderVida() + + if (nave.vida() <= 0) { + game.removeVisual(meteoritos) + game.removeVisual(sumar_minicion) + game.removeVisual(poner_Escudo) + game.removeVisual(reducir_velocidad) + game.addVisual(pantallaGameOver) + game.stop() + + } + + } + }) + // Borrar las balas que colisionaron + balasABorrar.forEach({ bala => + balas.remove(bala) + game.removeVisual(bala) + }) + + // Borrar los meteoritos que colisionaron + meteoritosABorrar.forEach({ meteorito => + meteoritos.remove(meteorito) + game.removeVisual(meteorito) + }) + +}) + + } + }) + game.start() +} diff --git a/rocket-rinder-font.zip b/rocket-rinder-font.zip new file mode 100644 index 00000000..ef7e9dd3 Binary files /dev/null and b/rocket-rinder-font.zip differ