Skip to content

Commit

Permalink
los magos tiran golondrinas ... es un avance(?
Browse files Browse the repository at this point in the history
  • Loading branch information
MNVallone committed Oct 11, 2024
1 parent 655c604 commit b8a54a0
Show file tree
Hide file tree
Showing 9 changed files with 176 additions and 36 deletions.
37 changes: 37 additions & 0 deletions adminProyectiles.wlk
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import game.*
import proyectil.*

object administradorDeProyectiles {
var nombreProyectil = 10000 /*asigno el nombre a los enemigos que voy creando segun numeros, asi puedo crear nombres nuevos
automaticamente*/

const proyectiles = #{}/*contiene cada enemigo que fue creando*/
method proyectiles() = proyectiles

method nombre() = nombreProyectil /*para poder consultar el ultimo nombre usado*/
method sumarProyectil() { /*suma 1 a nombre mago para asi crear magos nuevos, luego hay que hacer la funcion para que reste 1 cuando maten a un enemigo*/
nombreProyectil+=1
}

method generarProyectil(posicion, tipoProyectil){ // metodo para no usar los if anidados
var nombreParaProyectil = self.nombre()
//console.println("el nombre es: " + nombreParaProyectil)
nombreParaProyectil = new Proyectil(position = posicion, tipo = tipoProyectil)
// console.println("el objeto es: " + nombreParaProyectil)
proyectiles.add(nombreParaProyectil)
self.sumarProyectil()
// console.println("proyectiles: " + proyectiles)
return game.addVisual(nombreParaProyectil)
}

method moverProyectiles(){
proyectiles.forEach({proyectil => proyectil.mover()})
}
method impactarProyectiles(){
proyectiles.forEach({proyectil => proyectil.colisionar()})
}
method destruirProyectil(proyectil) {
proyectiles.remove(proyectil)
}

}
Binary file added assets/bolaDeFuego.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 11 additions & 3 deletions generadorDeEnemigos.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ object generadorDeEnemigos {
var nombreEnemigo = 0 /*asigno el nombre a los enemigos que voy creando segun numeros, asi puedo crear nombres nuevos
automaticamente*/

const enemigo = #{}/*contiene cada enemigo que fue creando*/
const enemigos = #{}/*contiene cada enemigo que fue creando*/

method nombre() = nombreEnemigo /*para poder consultar el ultimo nombre usado*/
method sumarEnemigo() { /*suma 1 a nombre enemigo para asi crear enemigos nuevos, luego hay que hacer la funcion
Expand All @@ -20,14 +20,22 @@ object generadorDeEnemigos {

if (game.getObjectsIn(posicionTemporal).isEmpty()){ // el if es para que no genere enemigos sobre otros
nombreParaEnemigo = new ZombiesNormales(position = posicionTemporal )
enemigo.add(nombreParaEnemigo)/*se añade a la lista de enemigos activos*/
enemigos.add(nombreParaEnemigo)/*se añade a la lista de enemigos activos*/
self.sumarEnemigo()
return game.addVisual(nombreParaEnemigo)/*muestra al enemigo en el juego*/
} else return
}
return 0
}
method siguenVivos(){
enemigos.forEach({enemigo => enemigo.sigueVivo()})
}

method moverEnemigos() {
enemigo.forEach({zombie => zombie.movete()})/*aplica la funcion movete a cada enemigo de la coleccion*/
enemigos.forEach({zombie => zombie.movete()})/*aplica la funcion movete a cada enemigo de la coleccion*/
}
method eliminarEnemigo(enemigo) {
enemigos.remove(enemigo)
}

}
29 changes: 9 additions & 20 deletions generadorDeMagos.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,6 @@ object generadorDeMagos {
nombreMago+=1
}

method generarMago(mago, posicion){/*segun el numero ingresado, se generara un tipo de enemigo distinto*/
var nombreParaMago = self.nombre() /* esto esta hecho porque sino wollok se enoja,para poder crear un enemigo*/
if (mago=="papa")
nombreParaMago = new MagoEnojado(position= posicion)
else if (mago=="guisante")
nombreParaMago = new MagoEnojado(position= posicion)
else if (mago=="cactus")
nombreParaMago = new MagoEnojado(position= posicion)
else if (mago=="girasol")
nombreParaMago = new MagoEnojado(position= posicion)
else if (mago=="zapallo enojado")
nombreParaMago = new MagoEnojado(position= posicion)

magos.add(nombreParaMago)/*se añade a la lista de magos activos*/

self.sumarMago()

return game.addVisual(nombreParaMago)/*muestra al enemigo en el juego*/
}

method generarMago2(magoSeleccionado,posicion){ // metodo para no usar los if anidados
self.magoAGenerar(magoSeleccionado) //esto para cambiar la mago segun lo que se elija
var nombreParaMago = self.nombre()
Expand All @@ -51,4 +31,13 @@ object generadorDeMagos {
method siguenVivas(){
magos.forEach({mago => mago.sigueViva()})
}

method disparar() {
magos.forEach({mago => mago.disparar()})
}

method eliminarMago(mago){
magos.remove(mago)
}

}
38 changes: 31 additions & 7 deletions magos.wlk
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import generadorDeMagos.*
import puntaje.*

import proyectil.*
import adminProyectiles.*
class MagoFuego {
const position
const property tipo = "fuego"
Expand All @@ -10,13 +12,21 @@ class MagoFuego {
method position() = position

method image() = imagen

method disparar(){
const posicionProyectil = new MutablePosition(x = self.position().x() + 1, y = self.position().y())
administradorDeProyectiles.generarProyectil(posicionProyectil, proyectilNormal)
}

method recibeDanio(_danio) {
self.vida(self.vida() - _danio)
}

method sigueViva(){
if (vida <= 0) game.removeVisual(self)
if (vida <= 0) {
game.removeVisual(self)
generadorDeMagos.eliminarMago(self)
}
}

method queSoy() = "mago"
Expand All @@ -34,6 +44,8 @@ class MagoHealer {

method image() = imagen

method disparar(){}

method recibeDanio(_danio) {
self.vida(self.vida() - _danio)
}
Expand All @@ -59,14 +71,22 @@ class MagoHielo {

method image() = imagen

method disparar(){
const posicionProyectil = new MutablePosition(x = self.position().x() + 1, y = self.position().y())
administradorDeProyectiles.generarProyectil(posicionProyectil, proyectilPenetrante)
}

method recibeDanio(_danio) {
self.vida(self.vida() - _danio)
}

method sigueViva(){
if (vida <= 0) game.removeVisual(self)
method sigueViva(){
if (vida <= 0) {
game.removeVisual(self)
generadorDeMagos.eliminarMago(self)
}
}

method queSoy() = "mago"
}

Expand All @@ -83,6 +103,8 @@ class MagoPiedra {

method image() = imagen

method disparar(){}

method recibeDanio(danio) {
self.vida(self.vida() - danio)
}
Expand Down Expand Up @@ -125,6 +147,8 @@ class MagoEnojado {

method image() = imagen

method disparar(){}

method recibeDanio(_danio) {
self.vida(self.vida() - _danio)
}
Expand Down Expand Up @@ -161,7 +185,7 @@ object magoFuegoTienda {
const position = game.at(1, 5)
var property imagen = "magoFuego.png"

const costo = 200
const costo = 0

method position() = position

Expand Down Expand Up @@ -206,7 +230,7 @@ object magoHieloTienda {
const position = game.at(3, 5)
var property imagen = "magoHielo.png"

const costo = 200
const costo = 0

method position() = position

Expand Down
12 changes: 10 additions & 2 deletions main.wpgm
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import adminProyectiles.*
import generadorDeMagos.*
import wollok.game.*

Expand Down Expand Up @@ -27,16 +28,18 @@ program cursorGame {
se hace en este orden ya que si se crea el primer enemigo, luego un segundo, y antes de que que se genere el
tercero el jugador elimina el primero, habra dos enemigos con el nombre "2" */

game.onTick(3000, "mover enemigo", {generadorDeEnemigos.moverEnemigos()})/*cada cierto tiempo hace que se muevan
game.onTick(1500, "mover enemigo", {generadorDeEnemigos.moverEnemigos()})/*cada cierto tiempo hace que se muevan
los enemigos*/
game.onTick(1000, "matar enemigos", {generadorDeEnemigos.siguenVivos()})
/*

game.whenCollideDo(cursor, { elemento =>
elemento.moverse(false)
})cuando chocan con cursor, frenan, a futuro seria que cuando un zombie choca con una planta, frena y empieza a
atacar*/

//metodos generador de plantas
game.onTick(500, "sigue viva la planta", {generadorDeMagos.siguenVivas()})
game.onTick(1000, "sigue viva la planta", {generadorDeMagos.siguenVivas()})


game.start()
Expand All @@ -46,6 +49,11 @@ program cursorGame {
*/

game.onTick(1000, "aumentar dinerro", {puntaje.sumarPuntos()})
//game.onTick(1500, "disparar", {generadorDeMagos.disparar()})
game.onTick(1000, "moverDisparos", {administradorDeProyectiles.moverProyectiles()})
game.onTick(200, "impactarDisparos", {administradorDeProyectiles.impactarProyectiles()})

game.schedule(6000,{generadorDeMagos.disparar()})
/*
const musica = game.sound("musica.mp3")
musica.shouldLoop(true)
Expand Down
2 changes: 1 addition & 1 deletion menu.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ object menu {
// no usamos uniqueColliders porque tira error si no hay ninguna
const magoSeleccionado = magoAGenerar.first().tipo()
const posicion = game.at(cursor.position().x(), cursor.position().y())
generadorDeMagos.generarMago(magoSeleccionado, posicion)
generadorDeMagos.generarMago2(magoSeleccionado, posicion)
}

method generarMago2() {
Expand Down
60 changes: 60 additions & 0 deletions proyectil.wlk
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import adminProyectiles.*
import game.*

class Proyectil {
const tipo
const position = new MutablePosition()
method position() = position
const danio = tipo.danio()
//const imagen = tipo.imagen()
method image() = "golondrina.png"
method mover(){
position.goRight(1)
if (position.x() >= 12){
game.removeVisual(self)
administradorDeProyectiles.destruirProyectil(self)
}
}
method queSoy() = "proyectil"
method colisionar(){
const posicionEnFrente = game.at(position.x() +1 ,position.y())
const objetoEnfrente = game.getObjectsIn(posicionEnFrente).filter({ objeto => objeto.queSoy() == "zombie" })
if (!objetoEnfrente.isEmpty()) {
if (objetoEnfrente.first().queSoy() == "cursor") objetoEnfrente.remove(objetoEnfrente.first())
}
if (!objetoEnfrente.isEmpty()) {
const objetivo = objetoEnfrente.first()
objetivo.recibeDanio(danio)
console.println("el objetivo: " + objetivo + " recibe daño: " + danio)
self.destruirse()
}
}

method destruirse(){
if (tipo.destruirse()){
game.removeVisual(self)
administradorDeProyectiles.destruirProyectil(self)
}
}

}

object proyectilNormal{
var property imagen = "bolaDeFuego.png"
method imagen() = imagen
const danio = 50
method danio() = danio

method destruirse() = true
}

object proyectilPenetrante{
var property imagen = "proyecticDeMetal.png"
method imagen() = imagen

const danio = 30
method danio() = danio

method destruirse() = false

}
20 changes: 17 additions & 3 deletions zombie.wlk
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import generadorDeEnemigos.*
import adminProyectiles.*

import fantasma.Fantasmas
class ZombiesNormales {
const position
var property moverse = true /*va a servir para hacer que deje de avanzar*/
var property vida = 100
method position() = position
var property imagen = "slime base.png"
method image() = imagen
Expand All @@ -13,9 +16,6 @@ class ZombiesNormales {
return position.goLeft(1)
else self.moverse(false)
}
method moveteDerecha() {
return position.goRight(1)
}

method meFreno(){
const posicionFantasma = game.at(self.position().x()-1, self.position().y())
Expand All @@ -31,8 +31,22 @@ class ZombiesNormales {
self.moverse(true) //Agregue el self.moverse(true) para que cuando maten la planta se sigan moviendo
}
}

var property danio = 50

method recibeDanio(_danio) {
self.vida(self.vida() - _danio)
}

method sigueVivo(){
if (vida <= 0 || position.x() <= 0){
game.removeVisual(self)
generadorDeEnemigos.eliminarEnemigo(self)
}


}

}

//const jose = new ZombiesNormales(position= new MutablePosition(x=10, y=0.randomUpTo(5).truncate(0)))
Expand Down

0 comments on commit b8a54a0

Please sign in to comment.