-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feedback #1
base: feedback
Are you sure you want to change the base?
Feedback #1
Conversation
Co-authored-by: Sebastián Santiago Ayala Osorio <[email protected]> Avanzamos
Co-authored-by: Juan Manuel Rodrigo UTN <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Buenas, aca estan las correcciones del TP.
Casi todas las correcciones estan relacionadas con donde deberia estar la logica de los metodos. Decidir en que clase u objeto va el codigo es un aspecto importante de objetos, porque cada objeto deberia tener una responsabilidad unica definida.
Ademas, algunas de estas correcciones resuelven las preguntas que plantearon en discord, principalmente el tema de los whenCollideDo
. Si esto no resuelve alguna de las cosas que mencionaron, preguntenlas de nuevo.
Corrijan estas cosas y sigan con el juego. Hagan estas ideas para seguir con el juego:
- Cuando termina el juego se muestra una pantalla de game over.
- Que el militar no pueda tener mas de 3 vidas.
- Que la base tenga 2 vidas que van bajando cuando los enemigos llegan a la izquierda. Cuando la base llega a 0 vidas el juego termina. Cuando la base pierde una vida, el militar dice algo.
- Hacer que cuando se presione una tecla el militar arregle la base (no es necesario que el militar esté a la izquierda de la pantalla). Esto significa quedarse quieto sin poder disparar por 4 segundos. Cuando termina este tiempo la base suma una vida.
- Cuando el militar esta bajo el efecto de la manzana dorada, puede arreglar la base en 2 segundos.
- No importa si el efecto de la manzana dorada termina mientras está arreglando la base, si al comenzar de arreglar la base el militar está bajo el efecto, el arreglo va a durar si o si 2 segundos.
- Cuando el militar esta arreglando la base, deberia mostrarse una imagen distinta que indique que esta arreglando.
- Cuando el militar esta arreglando la base estando bajo el efecto de la manzana dorada se muestra otra imagen distinta. Osea el militar ahora puede tener 4 imagenes posibles: Estado normal, Estado manzana dorada, Estado normal arreglando, Estado manzana dorada arreglando.
- Que haya una super manzana que haga lo mismo que la manzana dorada, y ademas le llena al maximo la vida al militar.
La idea de estos puntos es llevarlos a toparse con un patron de modelado concreto, que seguramente vayamos a ver en alguna de las practicas de parcial.
Como me demoré 1 semana en corregirles el tp, no es necesario que tengan todo esto resuelto para la proxima entrega, pero intenten plantear un poco de cada punto por lo menos, asi podemos hablar sobre este patron que les mencioné.
Algunas ideas opcionales:
- Que haya un indicador visual en la pantalla de cuantas vidas tiene el militar. Pueden ser 3 corazones que van desapareciendo, por ejemplo. Lo mismo con la base.
- Cuando se presiona una determinada tecla, se reinicia el juego.
main.wpgm
Outdated
|
||
game.whenCollideDo(militar, { enemigo1 => enemigo1.teTocoEnemigo() }) | ||
|
||
game.whenCollideDo(militar, { manzanaRoja => manzanaRoja.teComioMilitar() }) | ||
|
||
game.whenCollideDo(militar, { manzanaDorada => manzanaDorada.teComioMilitar() }) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
El segundo parametro del whenCollideDo
, osea el bloque de codigo, lo podemos pensar como una funcion que va a recibir como parametro cualquier objeto que colisione con el objeto del primer parametro.
Esto significa que el nombre que le pongamos al parametro, osea "enemigo1", "manzanaRoja" o "manzanaDorada", no son realmente el enemigo, o la manzana roja o la manzana dorada, si no que cualquier objeto que colisione con militar
. Seria lo mismo hacer:
game.whenCollideDo(militar, { asdfasdf => asdfasdf.teTocoEnemigo() })
game.whenCollideDo(militar, { aaa => aaa.teComioMilitar() })
game.whenCollideDo(militar, { bbb => bbb.teComioMilitar() })
Osea, que cada vez que algo colisione con militar
, se le va a enviar los mensajes teTocoEnemigo()
, teComioMilitar()
y teComioMilitar()
.
La forma de solucionar esto es que haya un solo whenCollide que sea:
game.whenCollideDo(militar, { colisionado => colisionado.chocarConMilitar() })
De esta forma, los colisionados se tratan de forma polimorfica en el momento de colisionar con el militar.
example.wlk
Outdated
//method posicionInicial() = militar.position().right(1) | ||
|
||
var property image = "Bala_Loca.png" | ||
var property position = militar.position() // La bala proviene del militar |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Si el proyectil se inicializa en la posicion donde está el militar, va a inmediatamente colisionar con el, haciendo que la bala desaparezca. Podrian inicializarlo con militar.position().right(1)
example.wlk
Outdated
method moverDerecha() { | ||
const nuevaX = position.x() + 1 | ||
if (nuevaX < game.width()) { | ||
position = game.at(nuevaX, position.y()) | ||
} else { | ||
game.removeVisual(self) // Eliminar proyectil si sale del borde derecho | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pueden resolverlo de forma mas simple con:
method moverDerecha() {
const proximaPosicion = position.right(1)
if (proximaPosicion.x() < game.width()) {
position = proximaPosicion
} else {
game.removeVisual(self) // Eliminar proyectil si sale del borde derecho
}
}
example.wlk
Outdated
const bala1 = new Proyectil() | ||
game.addVisual(bala1) | ||
bala1.moverse() | ||
game.onCollideDo(bala1, { enemigo1 => bala1.enemigoColisionado(enemigo1)}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Como mencione antes, esto es lo mismo que hacer
game.onCollideDo(bala1, { pepita => bala1.enemigoColisionado(pepita)})
Osea que el nombre del parametro no limita con que objeto se colisiona o no. Si, por ejemplo, la bala colisiona con una manzana, le va a enviar el mensaje enemigoColisionado()
. Por esto, seria mas apropiado que esta linea sea:
game.onCollideDo(bala1, { colisionado => colisionado.chocarConBala()})
example.wlk
Outdated
|
||
method generarManzanaRoja() { | ||
|
||
//posicion aleatoria | ||
const x = 0.randomUpTo(game.width()) // Aparecer en el borde derecho | ||
const y = 0.randomUpTo(game.height()) // Posición aleatoria en el eje y | ||
position = game.at(x, y) | ||
|
||
game.addVisual(self) | ||
} | ||
|
||
|
||
method teComioMilitar(){ | ||
self.habilidad() | ||
game.removeVisual(self) | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Esta logica esta repetida en ManzanaDorada, lo cual antes no podiamos resolver porque nos faltaba ver algunos temas teoricos. Se les ocurre como resolverlo ahora?
example.wlk
Outdated
|
||
method habilidad() { | ||
inmunidadActivada = true | ||
militar.image("Soldado_Dorado.png") | ||
game.onTick(5000, "deshabilitar inmunidad",{ self.inmunidad() }) | ||
game.schedule(5000, {militar.image("Soldado.png")}) | ||
|
||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Esta logica deberia estar en el militar
, porque deberia ser su responsabilidad saber como le afecta la inmunidad. Osea esto deberia ser:
method teComioMilitar(){
militar.activarInmunidad()
game.removeVisual(self)
}
//En militar:
method activarInmunidad() {
inmune = true
game.onTick(5000, "deshabilitar inmunidad",{ self.desactivarInmunidad() })
}
method desactivarInmunidad() {
inmune = false
}
//Podemos hacer este trucazo para simplificar el calculo de la imagen:
method image(){
if(inmune){
return 'Soldado.png'
}
else{
return "Soldado_Dorado.png"
}
}
De esta forma, ahora el militar es quien sabe si actualmente es inmune o no.
Co-authored-by: Juan Manuel Rodrigo UTN <[email protected]>
…s la muerte de los zombies. Hicimos las imagenes de la SuperManzana y militar un method imagen()
….noreply.github.com> Co-authored-by: WhiskyC <[email protected]> Co-authored-by: Juan Manuel Rodrigo UTN <[email protected]>
👋! GitHub Classroom created this pull request as a place for your teacher to leave feedback on your work. It will update automatically. Don’t close or merge this pull request, unless you’re instructed to do so by your teacher.
In this pull request, your teacher can leave comments and feedback on your code. Click the Subscribe button to be notified if that happens.
Click the Files changed or Commits tab to see all of the changes pushed to the default branch since the assignment started. Your teacher can see this too.
Notes for teachers
Use this PR to leave feedback. Here are some tips:
For more information about this pull request, read “Leaving assignment feedback in GitHub”.
Subscribed: @jrodrigoutn @AyalaSebastian @DoloCoria @UrielBove @WhiskyC