Skip to content
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

Open
wants to merge 48 commits into
base: feedback
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
8393451
Setting up GitHub Classroom Feedback
github-classroom[bot] Sep 19, 2024
1795fdf
Agrego codigo basico, otros archivos y algunos assets
SamDante Oct 1, 2024
9e855f2
Agregro integrante del equipo de trabajo
SamDante Oct 1, 2024
405bcfd
Primer avance en atacar y recibirDanio
JoaquinMariosa Oct 3, 2024
17726ec
Delete assets/alf-pixelart.jpg
Pabloutndev Oct 3, 2024
d58e929
Update alf.wlk
Pabloutndev Oct 3, 2024
f72720b
Funcionalidades de objectos y imagenes
Pabloutndev Oct 7, 2024
b5a9254
Agrego movimiento de enemigo, agarrar con la X, un inventario fijo en…
SamDante Oct 11, 2024
497184b
inventario arreglado
Pabloutndev Oct 11, 2024
9398e35
Avanzamos inventario, enemigos, y ataque de Alf
JoaquinMariosa Oct 13, 2024
f2159d2
Agrego imagen de inventario, tope de vida, y cooldown de ataque
SamDante Oct 15, 2024
8b9c2a4
Agrego items en png
SamDante Oct 15, 2024
44fe050
Agrego inventario con fondo y personajes en png
SamDante Oct 15, 2024
da862e8
correcciones
Pabloutndev Oct 15, 2024
ddb7e98
merge y avances test
Pabloutndev Oct 15, 2024
1d89a71
Se agregan los tests
Pabloutndev Oct 15, 2024
ce96b96
fix ataque alf
Pabloutndev Oct 16, 2024
d0c9126
Agrego cambios durante la presentación
SamDante Oct 21, 2024
be5b03b
Correcciones de la primera entrega: inventario-enemigo-HUD
SamDante Oct 30, 2024
c156af6
Implemento items como clases, arreglo comportamiento del inventario, …
SamDante Nov 4, 2024
d1972d1
Agrego clase de enemigos, planteo mapa con habitaciones y puertas, li…
SamDante Nov 5, 2024
82a9b7b
Movimiento entre habitaciones, acomodar inventario al utilizar un ite…
JoaquinMariosa Nov 6, 2024
58e0d31
Update README.md
JoaquinMariosa Nov 6, 2024
ada2d43
Update README.md
JoaquinMariosa Nov 6, 2024
1622628
Avance en movimiento entre habitaciones, plantemos puerta final con e…
JoaquinMariosa Nov 7, 2024
f093712
Merge branch 'main' of github.com:pdepjm/2024-o-tpjuego-losscratchers
JoaquinMariosa Nov 7, 2024
ea84785
Add files via upload
SamDante Nov 7, 2024
6f7c04d
Invoco metodo de vida
SamDante Nov 7, 2024
d190b91
Agrego objeto vidaHUD
SamDante Nov 7, 2024
b51e224
Cambio la llave del jefe
SamDante Nov 7, 2024
d10a273
Update enemigo.wlk
SamDante Nov 7, 2024
03b7af6
Agrego llamadas para actualizar la vida
SamDante Nov 7, 2024
7ca087a
Update mapa.wlk
SamDante Nov 7, 2024
fdff84e
Add files via upload
SamDante Nov 7, 2024
f456a8c
Cambios
JoaquinMariosa Nov 7, 2024
142f6df
Merge branch 'main' of github.com:pdepjm/2024-o-tpjuego-losscratchers
JoaquinMariosa Nov 7, 2024
d308cee
Arreglo bugs con enemigos
JoaquinMariosa Nov 7, 2024
3e03027
Cambio tecla para pasar puerta, establezco los estados de vida como c…
SamDante Nov 11, 2024
fedc1dc
Agregamos imagenes para alf y enemigos, solucionamos la consulta que …
JoaquinMariosa Nov 13, 2024
f362f41
Cambios en imagenes en assets
JoaquinMariosa Nov 13, 2024
4b87bcf
Agrego diagrama de clases
JoaquinMariosa Nov 13, 2024
ede386d
Update README.md
JoaquinMariosa Nov 13, 2024
8cf5b1b
Agregamos fondos de victoria y derrota
JoaquinMariosa Nov 13, 2024
d0b21c8
Merge branch 'main' of github.com:pdepjm/2024-o-tpjuego-losscratchers
JoaquinMariosa Nov 13, 2024
eb578f1
Cambios en tests
JoaquinMariosa Nov 13, 2024
2a9db8b
Agregamos nuevos tests
JoaquinMariosa Nov 13, 2024
bbb54bc
Overhaul estetico de items, enemigos, jefe y salas
SamDante Nov 14, 2024
d0b4718
Update README.md
JoaquinMariosa Nov 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions HUD.wlk
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
object inventarioHUD {
const property image = "franja_inventario.png"
const property position = game.origin()
const property inventario = []

method tomar(item) {
if (inventario.size() < 3) {
inventario.add(item)
item.position(game.at(12 + inventario.size(), 0))
}
}

method usar(pos){
const item = inventario.get(pos)
item.accion()
inventario.remove(item)
game.removeVisual(item)
}

method moverItems() {
var i = 1
inventario.forEach({ item =>
item.position(game.at(12 + i, 0))
i += 1
})
}

method reiniciarImagen() {
// Inventario
game.removeVisual(self)
game.removeVisual(vidaHUD)
game.addVisual(self)
game.addVisual(vidaHUD)

// Por cada item
inventario.forEach { item => game.removeVisual(item)
game.addVisual(item)}
}
}

class EstadoVidas {
const property imagen
const maximo
method vidaEnRango(vida) = vida > maximo
}

const vidaFull = new EstadoVidas(imagen = "vida_full.png", maximo = 80)
const vidaCuatroQuintos = new EstadoVidas(imagen = "vida_4quintos.png", maximo = 60)
const vidaTresQuintos = new EstadoVidas(imagen = "vida_3quintos.png", maximo = 40)
const vidaDosQuintos = new EstadoVidas(imagen = "vida_2quintos.png", maximo = 20)
const vidaUnQuinto = new EstadoVidas(imagen = "vida_1quinto.png", maximo = 0)
object vidaEmpty inherits EstadoVidas (imagen = "vida_empty.png", maximo = 0){
override method vidaEnRango(vida) = vida <= maximo
}

object vidaHUD {
var property image = "vida_full.png"
const property position = game.origin()
const estadosDisponibles = [vidaFull, vidaCuatroQuintos, vidaTresQuintos, vidaDosQuintos, vidaUnQuinto, vidaEmpty]
method actualizarVida(entidad){
self.image(estadosDisponibles.find{estado => estado.vidaEnRango(entidad.vida())}.imagen())
}
}
Binary file added PdeP - Diagrama de clases.drawio.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
48 changes: 40 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,54 @@
# (reemplazar nombre de juego acá)
# The Legend Of Alf

UTN - Facultad Regional Buenos Aires - Materia Paradigmas de Programación

## Equipo de desarrollo:

- completar...
- completar...

- Dante Ezequiel Samudio (SamDante)
- Joaquin Mariosa Rendon (JoaquinMariosa)
- Leandro Leones (LeandroLeones)
- Pablo La Rocca (Pabloutndev)
- Gonza Galarza (GonzaGalarza)

## Capturas

![pepita](assets/golondrina.png)
![alf](assets/alf.png)
![cofre](assets/cofre.png)
![hamburguesa](assets/hamburguesa.png)
![espada](assets/espada.png)
![llave](assets/llave.png)
![llaveJefe](assets/llaveJefe.png)
![goblin](assets/goblin_-_left.png)
![jefe](assets/Jefe.png)
![puerta](assets/puertaJefeCerrada.png)

## Reglas de Juego / Instrucciones

(completar...)
- Esta basado en The Legend of Zelda. Existen enemigos que se pueden atacar, objetos para obtener y un jefe final para derrotar.
- Para ganar el juego se tiene que derrotar al jefe final.
- Alf tiene una cierta cantidad de vida que puede ir variando a lo largo de la partida.
- Si Alf se queda sin vida se pierde el juego.
- Alf puede realizar ataques a una celda de distancia y potenciar los mismos mediante objetos como la espada, puede curarse mediante objetos como la hamburguesa y puede utilizar llaves tanto para abrir cofres como para abrir puertas
- Si colisionas con algun enemigo perdes vida.

## Controles:

- `W` para...

- Las flechas para moverse
- `Z` para atacar
- `X` para agarrar items
- `C` para cambiar de habitacion
- `A` para utilizar el primer item del inventario
- `S` para utilizar el segundo item del inventario
- `D` para utilizar el tercer item del inventario

## Conceptos de materia aplicados:
- Clases: utilizamos clases para los Items, los Enemigos, las Puertas, las Habitaciones, entre otras mas.
- Polimorfismo: aplicamos polimorfismo a la hora de definir la accion que va a tener cada item, utilizando un metodo en comun para todos y cada uno de ellos define esta a su manera.
- Herencia: utilizamos herencia tanto en los items, para definir una superclase general (Items) y a partir de ahi se hereda en distintos tipos de items (ItemDeAlmacenamiento, ItemDeCuracion, etc.); y para el jefe el cual es un objeto particular que utiliza propiedades de la clase Enemigo, pero, como es unico y tiene comportamiento propio, se define un objeto como tal.
- Encapsulamiento: aplicamos encapsulamiento en las habitaciones para los diferentes elementos que tiene la misma, como su lista de puertas, enemigos e items; en inventarioHUD cuando utilizamos un item, ya que solo este conoce los items que Alf porta y puede usar.
- Composicion: aplicamos composicion en la clase Habitacion, ya que tienen una relacion con las puertas al estar conectadas a otras habitaciones para poder trasladar a Alf.
- Excepciones: utilizamos excepciones cuando el objeto interactuador no esta "sobre un item", devolviendo una excpecion con un mensaje.

## Diagrama de clases

![diagramaDeClases](https://github.com/pdepjm/2024-o-tpjuego-losscratchers/blob/main/PdeP%20-%20Diagrama%20de%20clases.drawio.png)
66 changes: 66 additions & 0 deletions alf.wlk
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import items.*
import HUD.*
import mapa.*
import finalDelJuego.*

object alf {
var property vida = 100
var property position = game.at(1,2)
var property image = "alf.png"
var property danio = 20
var property habitacionActual = h1 // Empieza en h1

method position() = position

method curarse(curacion) {
vida = (vida + curacion).min(100)
vidaHUD.actualizarVida(self)
}

method danio(danioExtra) {
danio += danioExtra
}

method atacar(enemigo)
{
if ( enemigo.position().distance(self.position()) == 1 )
{
enemigo.recibirDanio(self)
game.say(self,"Japish ")
}
}

method recibirDanio(enemigo) {
vida -= enemigo.danio()
vidaHUD.actualizarVida(self)
self.image("alf_dmg.gif")
game.schedule(650, {self.image("alf.png")})
self.morir()
}

method morir() {
if(vida <= 0) {
final.derrota()
}
}

method utilizar(pos) {
inventarioHUD.usar(pos)
inventarioHUD.moverItems()
}

method agarrar(item) {
item.irAlInventario()
}

method reiniciarImagen() {
game.removeVisual(self)
game.addVisual(self)
}

/*
method iniciar(){
keyboard.z().onPressDo({ self.atacar(enemigoActual)})
}
*/
}
Binary file added assets/Jefe.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Jefe_dmg.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Sala_Centro.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Sala_Cofre.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Sala_Inicial.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Sala_Jefe.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Sala_Llave.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Sala_Pre_Jefe.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/alf.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/alf_dmg.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/cofre.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/derrota.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/espada.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/franja_inventario.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/goblin_-_left.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/goblin_-_left_dmg.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/goblin_-_right.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/goblin_-_right_dmg.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed assets/golondrina.png
Binary file not shown.
Binary file added assets/hamburguesa.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/inventario.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/llave.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/llaveJefe.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/placeholder_attack_jefe.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/puertaJefeAbierta.png
Binary file added assets/puertaJefeCerrada.png
Binary file added assets/victoria.png
Binary file added assets/vida_1quinto.png
Binary file added assets/vida_2quintos.png
Binary file added assets/vida_3quintos.png
Binary file added assets/vida_4quintos.png
Binary file added assets/vida_empty.png
Binary file added assets/vida_full.png
131 changes: 131 additions & 0 deletions enemigo.wlk
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
import HUD.*
import wollok.game.*
import main.*
import alf.*
import finalDelJuego.*

object animador{
method mostrarHerida(entidad, imagenOriginal, animacionDanio) {
entidad.image(animacionDanio)
game.schedule(650, {entidad.image(imagenOriginal)})
}
}

class Enemigo {
var property image
const property imageDmg
var property vida
var property danio
const property x_inicial
const property y_inicial
var property position = game.at(x_inicial, y_inicial)
var property puedoAtacar = true
const movimiento

// Revisar metodos de atacar y recibirDanio tanto en Alf como en los enemigos
method atacar(alf) {
if (puedoAtacar) {
alf.recibirDanio(self)
puedoAtacar = false
game.schedule(3000, {self.puedoAtacar(true)})
}
}

// ENEMIGO
method movete() {
movimiento.actualizarPosicion(self)
}

method recibirDanio(alf) {
vida -= alf.danio()
animador.mostrarHerida(self, self.image(), self.imageDmg())
self.morir()
}

method morir() {
if(vida <= 0){
game.removeVisual(self)
self.puedoAtacar(false)
alf.habitacionActual().enemigosDisponibles().remove(self)
alf.habitacionActual().refrescarEnemigos()
}
}
}

class Trayectos {
const movete_x
const movete_y

var count = 0
var flag_1 = 0
var flag_2 = 1
var flag_3 = 1
var flag_4 = 1

method actualizarPosicion(entidad) {
const p_x = entidad.position().x()
const p_y = entidad.position().y()

if ( flag_1 == 0 ){
count += 1
entidad.position(game.at(p_x + 1, p_y))
if(count == movete_x) {
flag_1 = 1
flag_2 = 0
count = 0
}
}
else if ( flag_2 == 0 ){
count += 1
entidad.position(game.at(p_x, p_y + 1))
if(count == movete_y) {
flag_2 = 1
flag_3 = 0
count = movete_x
}
}
else if ( flag_3 == 0 ){
count -= 1
entidad.position(game.at(p_x - 1, p_y))
if(count == 0) {
flag_3 = 1
flag_4 = 0
count = movete_y
}
}
else if ( flag_4 == 0 ){
count -= 1
entidad.position(game.at(p_x, p_y - 1))
if(count == 0) {
flag_4 = 1
flag_1 = 0
}
}
}
}

// Tipos de trayectos
const cuadradoChico = new Trayectos(movete_x = 2, movete_y = 2)
const cuadradoGrande = new Trayectos(movete_x = 3, movete_y = 3)
const lineaHorizontal = new Trayectos(movete_x = 3, movete_y = 1)
const lineaVertical = new Trayectos(movete_x = 1, movete_y = 3)

// Crear instancias
const enemigo1 = new Enemigo(image = "goblin_-_left.png", imageDmg = "goblin_-_left_dmg.gif", vida = 100, danio = 20, x_inicial = 5, y_inicial = 3, movimiento = lineaVertical)
const enemigo2 = new Enemigo(image = "goblin_-_left.png", imageDmg = "goblin_-_left_dmg.gif", vida = 100, danio = 20, x_inicial = 5, y_inicial = 4, movimiento = cuadradoChico)
const enemigo3 = new Enemigo(image = "goblin_-_right.png", imageDmg = "goblin_-_right_dmg.gif", vida = 100, danio = 20, x_inicial = 11, y_inicial = 3, movimiento = lineaVertical)
const enemigo4 = new Enemigo(image = "goblin_-_left.png", imageDmg = "goblin_-_left_dmg.gif", vida = 100, danio = 20, x_inicial = 5, y_inicial = 4, movimiento = cuadradoChico)

object jefe inherits Enemigo(image = "Jefe.png", imageDmg = "Jefe_dmg.gif",vida = 500, danio = 50, x_inicial = 8, y_inicial = 3, movimiento = cuadradoGrande) {
override method morir() {
if(vida <= 0) {
// Termina el juego
final.victoria()
}
}
override method recibirDanio(alf) {
vida -= alf.danio()
animador.mostrarHerida(self, self.image(), self.imageDmg())
self.morir()
}
}
21 changes: 21 additions & 0 deletions finalDelJuego.wlk
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
object fondoVictoria {
var property image = "victoria.png"
var property position = game.at(0,0)
}

object fondoDerrota {
var property image = "derrota.png"
var property position = game.at(0,0)
}

object final {
method victoria() {
game.clear()
game.addVisual(fondoVictoria)
}

method derrota() {
game.clear()
game.addVisual(fondoDerrota)
}
}
Loading