From 154bad895daf6e260a6023d8ddcf1e6ea2e24aab Mon Sep 17 00:00:00 2001 From: Miranda-03 Date: Mon, 4 Nov 2024 17:13:37 -0300 Subject: [PATCH] Movimiento del enemigo y test --- enemigos.wlk | 73 +++++++++++++++++++++++++++++++++---------------- jugador.wlk | 6 ++-- miscelaneos.wlk | 6 ++++ movimiento.wlk | 3 +- muros.wlk | 10 +++++-- pruebas.wtest | 40 ++++++++++++++++++++++++--- puntos.wlk | 6 ++-- 7 files changed, 109 insertions(+), 35 deletions(-) diff --git a/enemigos.wlk b/enemigos.wlk index 40fe3e8..74d603a 100644 --- a/enemigos.wlk +++ b/enemigos.wlk @@ -1,26 +1,52 @@ -class Enemigo1{ - var property position = game.at(4,16) - var lado = 0 - var property valor = "e_brocoli.png" - method image() = valor +import miscelaneos.* + +class Enemigo1 inherits ObjetoVisible{ + //var lado = 0 + var property vida + var property position = game.center() + var property velocidad = 700 + var property apariencia = "piopio.png" + method image() = apariencia + + var property vector_movimiento = [0, 1, 0, 0] + + method movimiento(){ + game.onTick(velocidad, self, {self.moverse()}) + } + + method cambiar_vector_movimiento() { + const elemento = vector_movimiento.get(0) + vector_movimiento.remove(vector_movimiento.get(0)) + vector_movimiento.addAll([elemento]) + } + + method detectar_colisiones() { + game.onCollideDo(self, {elemento => + if(elemento.soyBloque()){ + self.volver() + self.cambiar_vector_movimiento() + } + }) + } + + method volver() { + position = position.left(vector_movimiento.get(0) * -1) + .down(vector_movimiento.get(1) * -1) + .right(vector_movimiento.get(2) * -1) + .up(vector_movimiento.get(3) * -1) + } - method moverseH(limite1, limite2){ - game.onTick(500, self, {self.muevete(limite1, limite2)}) + method moverse(){ + position = position.left(vector_movimiento.get(0)) + .down(vector_movimiento.get(1)) + .right(vector_movimiento.get(2)) + .up(vector_movimiento.get(3)) } - method muevete(limite1, limite2){ - if(self.position().x() == limite2){ - lado = 1 - } - if(self.position().x() == limite1){ - lado = 0 - } - if(lado == 0 && self.position().x()limite1){ - position = game.at(self.position().x()-1, 16) - } + method activar_enemigo() { + game.addVisual(self) + self.movimiento() + self.detectar_colisiones() } method limpiarEnemigos(){ @@ -30,14 +56,13 @@ class Enemigo1{ } object lineaEnemiga{ - var property enemigo = new Enemigo1() + var property enemigo = new Enemigo1(vida = 100) method imagen(imagen){ - enemigo.valor(imagen) + enemigo.apariencia(imagen) } method activar(){ - game.addVisual(enemigo) - enemigo.moverseH(4,13) + enemigo.activar_enemigo() } } diff --git a/jugador.wlk b/jugador.wlk index 771da73..e549e1a 100644 --- a/jugador.wlk +++ b/jugador.wlk @@ -4,9 +4,11 @@ import menus.menuPerdiste import movimiento.* +import miscelaneos.* + object jugador inherits FiguraConMovimiento(position = game.at(1, 1)) { - method jugador() = true + override method jugador() = true method posicionate(){ self.position(game.at(1, 1)) @@ -22,7 +24,7 @@ object jugador inherits FiguraConMovimiento(position = game.at(1, 1)) { } } -object points{ +object points inherits ObjetoVisible{ var puntosObtenidos = 0 method sumarPuntos(){ puntosObtenidos += 1 diff --git a/miscelaneos.wlk b/miscelaneos.wlk index 7a1be7e..42d60b5 100644 --- a/miscelaneos.wlk +++ b/miscelaneos.wlk @@ -20,6 +20,12 @@ object finDelJuego{ method image() = "PP_final.png" } +mixin ObjetoVisible { + method soyBloque() = false + method esFruta() = false + method jugador() = false +} + //IMAGENES DE SELECCION object marcoDeSeleccion{ var property position = game.at(2,5) diff --git a/movimiento.wlk b/movimiento.wlk index 4ba8ca9..5986287 100644 --- a/movimiento.wlk +++ b/movimiento.wlk @@ -1,8 +1,9 @@ import muros.* +import miscelaneos.* -class FiguraConMovimiento{ +class FiguraConMovimiento inherits ObjetoVisible{ var position method position() = position diff --git a/muros.wlk b/muros.wlk index 1ef64d7..e991224 100644 --- a/muros.wlk +++ b/muros.wlk @@ -1,5 +1,7 @@ import niveles.* -class Bloque{ +import miscelaneos.* + +class Bloque inherits ObjetoVisible{ var property position = game.center() method image() = visual.valor() method ubicarYDibujar(x,y){ @@ -8,8 +10,10 @@ class Bloque{ escenario.enlistarBloque(self) } method quitarBloque() = game.removeVisual(self) + + override method soyBloque() = true } -class BloqueSuperior{ +class BloqueSuperior inherits ObjetoVisible{ var property position = game.center() method image() = visualSuperior.valor() method ubicarYDibujar(x,y){ @@ -17,6 +21,8 @@ class BloqueSuperior{ game.addVisual(self) } method quitarBloque() = game.removeVisual(self) + + //override method soyBloque() = true } object visual{ diff --git a/pruebas.wtest b/pruebas.wtest index 7342cd1..df3c071 100644 --- a/pruebas.wtest +++ b/pruebas.wtest @@ -1,9 +1,41 @@ -import pepita.* +import muros.* +import wollok.game.* +import jugador.* +import puntos.* +import niveles.* +import miscelaneos.* +import menus.* +import enemigos.* -describe "group of tests for pepita" { +describe "Group of test for the enemy" { - test "pepita has initial energy" { - assert.equals(100, pepita.energy()) + method initialize(){ + game.clear() + game.cellSize(40) + game.height(18) + game.width(18) + game.start() } + test "Should move"{ + const enemy = new Enemigo1(vida = 100, position = game.at(1, 2), velocidad = 0) + game.addVisual(enemy) + enemy.moverse() + assert.equals(game.at(1, 1), enemy.position()) + } + + test "Should rotate direction" { + const enemy = new Enemigo1(vida = 100, position = game.at(1, 1), velocidad = 0) + game.addVisual(enemy) + enemy.cambiar_vector_movimiento() + assert.equals(1, enemy.vector_movimiento().get(0)) + } + + test "Should turn back"{ + const enemy = new Enemigo1(vida = 100, position = game.at(1, 2), velocidad = 0) + game.addVisual(enemy) + enemy.moverse() + enemy.volver() + assert.equals(game.at(1, 2), enemy.position()) + } } \ No newline at end of file diff --git a/puntos.wlk b/puntos.wlk index 684c451..f87817d 100644 --- a/puntos.wlk +++ b/puntos.wlk @@ -1,9 +1,11 @@ import muros.* -class Fruta{ +import miscelaneos.* + +class Fruta inherits ObjetoVisible{ var property position = posicionAleatoria.generarPosicionAleatoria() var valor = spawn.puntos().get(0) - method jugador() = false + override method esFruta() = true method image(){ return valor