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

Semana 1 #2

Merged
merged 31 commits into from
Nov 23, 2023
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
8a1b961
Creamos clase jugador
agus-germi Nov 16, 2023
9f6091d
Creamos clase jugador
agus-germi Nov 16, 2023
e9b42ad
probando
agus-germi Nov 16, 2023
3c8ecdd
Probando co-author.
agus-germi Nov 16, 2023
9c3a56f
Probando co-author, parte2.
agus-germi Nov 16, 2023
4ff59ab
Probando co-author. again
agus-germi Nov 16, 2023
c153daa
Probando co-author.Again again.
agus-germi Nov 16, 2023
ec89e74
Añadimos Seniority/Equipamiento/Jugador/Gladiador.Nombramos Primeros …
agus-germi Nov 16, 2023
b2ca6a0
Añadimos clases concretas de Equipamiento.
agus-germi Nov 16, 2023
76cd139
Agregamos atributo casilla a Jugador.
Sebakrag Nov 17, 2023
b243489
Primer caso de uso (a medias).
Sebakrag Nov 17, 2023
0c79ef4
feat: Caso de uso uno y dos terminados.
agus-germi Nov 17, 2023
8bbb71f
feat: Agregamos clase Fiera e interfaz Afectante. Caso de uso 3.
agus-germi Nov 17, 2023
dee620a
Agregamos test 04.
Sebakrag Nov 18, 2023
f3f2724
Agregamos una constante.
Sebakrag Nov 19, 2023
9a7b7be
Agregamos test 06, 07 y 08.
Sebakrag Nov 19, 2023
cee2eb9
Modelamos Decorator Pattern para Equipamiento. Arreglamos los tests. …
Sebakrag Nov 20, 2023
0de2b3c
Ordeno el codigo. Agrego un comentario con propuesta de refactor en l…
Sebakrag Nov 20, 2023
e9bfb47
feat: Cambiamos atributos de publicos a privados. Modificamos test 01.
agus-germi Nov 20, 2023
20d1e77
feat: Agregamos tests Novato. (a chequear)
agus-germi Nov 20, 2023
477e95f
feat: Agregamos tests Seniorities.
agus-germi Nov 20, 2023
1cc3132
feat: Actualizamos.
agus-germi Nov 20, 2023
dcc6322
Merge branch 'Decorator' into semana-1
agus-germi Nov 21, 2023
e3a3714
feat: Agregamos test 09 con la logica de celdas y tablero
mariagalindez Nov 22, 2023
a0f75ea
fix: corrección de bug.
mariagalindez Nov 22, 2023
d74e856
feat: agregamos Test12. A chequear.
agus-germi Nov 22, 2023
ed2c888
feat: primeras implementaciones de Juego.
agus-germi Nov 22, 2023
0a73367
Merge branch 'Decorator' into semana-1
fnpratto Nov 23, 2023
770b583
Comenzamos Primer Refactor.
Sebakrag Nov 23, 2023
6090b2b
GRAN refactor
agus-germi Nov 23, 2023
e7e4161
fix : pruebas
agus-germi Nov 23, 2023
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
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
# TP2 Algoritmos 3: {Grupo 2}

Trabajo Práctico número 2 de la materia Algoritmos y Programación III de FIUBA

## Grupo {N}

- **Integrante 1** - [Florencia Pratto](https://github.com/fnpratto)
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/edu/fiuba/algo3/modelo/Afectante.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package edu.fiuba.algo3.modelo;

public interface Afectante {
public void afectar(Jugador jugador);
}
4 changes: 4 additions & 0 deletions src/main/java/edu/fiuba/algo3/modelo/Celda.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package edu.fiuba.algo3.modelo;

public class Celda {
}
8 changes: 8 additions & 0 deletions src/main/java/edu/fiuba/algo3/modelo/Equipamiento.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package edu.fiuba.algo3.modelo;

public abstract class Equipamiento {
public abstract Equipamiento mejorarEquipamiento();

public abstract int recibirAtaque();

}
58 changes: 58 additions & 0 deletions src/main/java/edu/fiuba/algo3/modelo/Gladiador.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package edu.fiuba.algo3.modelo;

import edu.fiuba.algo3.modelo.seniorities.Novato;
import edu.fiuba.algo3.modelo.equipamientos.Desequipado;

public class Gladiador {
//Declaramos constantes ?
private static final int ENERGIA_INICIAL = 20;
private static final int SIN_ENERGIA = 0;

private int energia;
private Seniority seniority;
private Equipamiento equipamiento;

public Gladiador() {
this.energia = ENERGIA_INICIAL;
this.seniority = new Novato();
this.equipamiento = new Desequipado();
}

// -------------------------------- PUBLICOS -------------------------------- //
public void aumentarEnergiaConSeniority(){
this.energia += this.seniority.aumentarEnergia();
}

public boolean energiaIgualA(int energia) {
return this.energia == energia;
}

public boolean tieneEnergia(){
return this.energia > SIN_ENERGIA;
}

public void recibirAtaque(){
this.disminuirEnergia(this.equipamiento.recibirAtaque()); //ROMPE ENCAPSULAMIENTO
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Se puede evitar el getter de la siguiente forma

    public void recibirAtaque(){
        this.energia = this.equipamiento.recibirAtaque(this.energia)); 
    }

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Genial Ale! Ese código pertenece a Gladiador verdad?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Obvia la pregunta, acabo de ver el path de arriba jajaja


public void recibirDanio(int danio) { this.disminuirEnergia(danio); }
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Que diferencia hay entre recibirDanio y recibirAtaque si al recibir el ataque se produce un daño?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tenes toda la razón, es un error que tenemos visto y creemos que encontramos una posible solución. En cuanto comencemos con el refactor va a ser lo primero en arreglar. Gracias por la observación

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

De hecho, desarrollamos la idea de la solución en un comentario que está al final del archivo de la clase Jugador.java.
Si llegas a leerlo y nos queres anticipar si es un buen planteo y puede llegar a solucionar lo que nos corregiste, nos ayudaría a ahorrar mucho tiempo 🙌🏽


public void mejorarEquipamiento(){
this.equipamiento = this.equipamiento.mejorarEquipamiento();
}

public void mejorarSeniority(int turnos){
this.seniority = this.seniority.ascender(turnos);
}

public void recibirEnergia(int energia) { this.aumentarEnergia(energia); }

// -------------------------------- PRIVADOS -------------------------------- //
private void disminuirEnergia(int energia) {
this.energia -= energia;
}

private void aumentarEnergia(int energia) {
this.energia += energia;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No les veo mucha utilidad la verdad

}
140 changes: 140 additions & 0 deletions src/main/java/edu/fiuba/algo3/modelo/Jugador.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
package edu.fiuba.algo3.modelo;

import javafx.scene.SceneAntialiasing;

import java.util.Random;

public class Jugador {
private Gladiador gladiador;
private int turnos;
private int casillaActual;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esto debe pasar a ser private Casilla casillaActual;


//private Casilla casilla;

public Jugador(Gladiador gladiador) {
this.gladiador = gladiador;
this.turnos = 0;
this.casillaActual = 0;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

    public Jugador(Gladiador gladiador, Casilla casillaInicial) {
        this.gladiador = gladiador;
        this.turnos = 0;
        this.casillaActual =casillaInicial;

Copy link
Collaborator

@Sebakrag Sebakrag Nov 23, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En el código más reciente introdujimos este cambio. De alguna manera el código sobre el que hiciste esta corrección quedó es viejo. Me pregunto si habremos hecho mal el push al PR 🤔

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Para que se haga un push al PR se tiene que hacer un push en la rama semana-1

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perfecto! Mañana a la mañana lo hacemos entonces. Debemos haberlo hecho a la rama Decorator y no nos dimos cuenta 🫣

}

// -------------------------------- PUBLICOS -------------------------------- //
public void jugarTurno() {
int cantidadAAvanzar = this.tirarDado();
this.avanzar(cantidadAAvanzar);
this.turnos++;
this.gladiador.mejorarSeniority(this.turnos);
this.aumentarEnergiaConSeniority();
}

public void aumentarEnergiaConSeniority() {
this.gladiador.aumentarEnergiaConSeniority();
}

public boolean tieneTurnosIgualA(int cantidad) {
return (this.turnos == cantidad);
}

public boolean energiaIgualA(int energia) {
return this.gladiador.energiaIgualA(energia);
}

public boolean estaEnCasilla(int numeroCasilla) {
return (this.casillaActual == numeroCasilla);
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Responsabilidad de casilla o celda, los nombres deben ser consistentes


public void recibirEnergia(int aumentoEnergia) {
this.gladiador.recibirEnergia(aumentoEnergia);
}

public void mejorarEquipamiento() {
this.gladiador.mejorarEquipamiento();
}

public void recibirAtaque() {
this.gladiador.recibirAtaque();
}

public void recibirDanio(int danio) {
this.gladiador.recibirDanio(danio);
}

// -------------------------------- PRIVADOS -------------------------------- //
private void avanzar(int cantidad) {
this.casillaActual += cantidad;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La nueva casilla deberia ser obtenida a partir de que la casilla actual conoce a sus vecinos


private int tirarDado() {
final int CARAS_DADO = 6;

if (this.gladiador.tieneEnergia()) {
Random random = new Random();
return random.nextInt(CARAS_DADO) + 1;
}
return 0;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esto tiene que estar encapsulado en una entidad que simule el dado, de manera que se pueda mockear y no depender de una clase que puede violar OC como Random

}
}


// Los metodos recibirAtaque y recibirDanio deberian ser el mismo. Quizas podemos usar Double Dispatch.
// De hecho, quizas podemos hacer Double Dispatch con un metodo que se llame recibirEfecto. De esta manera
// lograriamos que Jugador solo tenga un metodo que se llame recibirImpacto(Afectante afectante) que sea:
//
// public void recibirImpacto(Afectante afectante) {
// this.gladiador.recibirImpacto(afectante);
//}
// Con este metodo reemplazariamos los metodos de:
// mejorarEquipamiento()
// recibirAtaque()
// recibirDanio()
// recibirEnergia()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Me parece mejor.


// Entonces Gladiador tendria:
// public void recibirImpacto(Fiera fiera) { // Este metodo reemplaza el metodo 'recibirAtaque()' de Gladiador
// this.disminuirEnergia(this.equipamiento.recibirAtaque());
// }
//
// public void recibirImpacto(Bacanal bacanal) { // Este metodo reemplaza el metodo 'recibirDanio()' de Gladiador
// this.disminuirEnergia(bacanal.calcularEnergia);
// }
//
// public void recibirImpacto(Lesion lesion) {
// // PROBLEMA con la propuesta de cambio:
// // Aqui el Jugador en el siguiente turno no avanza.
// // Esta logica quizas es conveniente que este en Jugador por el hecho de que un
// // jugador tiene la cantidad de turnos.
// }
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Habria que buscar la manera de impedir que el jugador avance

//
// public void recibirImpacto(Comida comida) { // Este metodo reemplaza el metodo 'recibirEnergia()' de Gladiador
// this.aumentarEnergia(comida.calcularEnergia);
// }
//
// public void recibirImpacto(MejorarEquipamiento mejorador) { // Este metodo reemplaza el metodo 'mejorarEquipamiento()' de Gladiador
// this.equipamiento = this.equipamiento.mejorarEquipamiento;
// }
//

// En BACANAL tendriamos que introducir el metodo:
// public int calcularEnergia() {
// //Aca el jugador tendria que tirar los dados. Pensar si hay una solucion posible.
// int cantidadCopas = random.nextInt(CANTIDAD_COPAS_TOTAL) + 1;
// return (ENERGIA_POR_COPA * cantidadCopas);
// }
//

// En COMIDA tendriamos que introducir el metodo:
// public int calcularEnergia() {
// return this.aumentoEnergia;
// }
//


// NOTA APARTE:
// No implementamos Personaje.
// Si creamos esta abstraccion e implementamos el metodo recibirImpacto como esta planteado arriba
// podriamos extender nuestro codigo a que tenga distintos tipos de personajes que reaccionen de distinta manera
// a los afectantes.
// Esto se veria como:
// public void recibirImpacto(Afectante afectante) {
// this.personaje.recibirImpacto(afectante);
//}
// Entonces cada tipo de personaje tendria su propio metodo ante cada tipo de Afectante.
20 changes: 0 additions & 20 deletions src/main/java/edu/fiuba/algo3/modelo/Localize.java

This file was deleted.

12 changes: 0 additions & 12 deletions src/main/java/edu/fiuba/algo3/modelo/Message.java

This file was deleted.

7 changes: 7 additions & 0 deletions src/main/java/edu/fiuba/algo3/modelo/Seniority.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package edu.fiuba.algo3.modelo;

public interface Seniority {
public Seniority ascender(int turno);

public int aumentarEnergia();
}
23 changes: 23 additions & 0 deletions src/main/java/edu/fiuba/algo3/modelo/afectantes/Bacanal.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package edu.fiuba.algo3.modelo.afectantes;

import edu.fiuba.algo3.modelo.Afectante;
import edu.fiuba.algo3.modelo.Jugador;
import java.util.Random;


public class Bacanal implements Afectante {

private static final int CANTIDAD_COPAS_TOTAL = 6;
private static final int ENERGIA_POR_COPA = 4;

private Random random = new Random();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

encapsularlo en un objeto Dado o ProvedorRandom, x


// Deberiamos tener un constructor de bacanal? En principio parece que si pq
// tiene que haber una instancia concreta en una casilla.

public void afectar(Jugador jugador){
//Deberiamos implementar un dado ¿?
int cantidadCopas = random.nextInt(CANTIDAD_COPAS_TOTAL) + 1;
jugador.recibirDanio(ENERGIA_POR_COPA * cantidadCopas);
}
}
17 changes: 17 additions & 0 deletions src/main/java/edu/fiuba/algo3/modelo/afectantes/Comida.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package edu.fiuba.algo3.modelo.afectantes;

import edu.fiuba.algo3.modelo.Afectante;
import edu.fiuba.algo3.modelo.Gladiador;
import edu.fiuba.algo3.modelo.Jugador;

public class Comida implements Afectante {
private int aumentoEnergia;

public Comida() {
this.aumentoEnergia = 15;
}

public void afectar(Jugador jugador) {
jugador.recibirEnergia(this.aumentoEnergia);
}
}
13 changes: 13 additions & 0 deletions src/main/java/edu/fiuba/algo3/modelo/afectantes/Fiera.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package edu.fiuba.algo3.modelo.afectantes;

import edu.fiuba.algo3.modelo.Afectante;
import edu.fiuba.algo3.modelo.Jugador;

public class Fiera implements Afectante {

public void afectar(Jugador jugador){
jugador.recibirAtaque();
}
}


5 changes: 5 additions & 0 deletions src/main/java/edu/fiuba/algo3/modelo/afectantes/Lesion.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package edu.fiuba.algo3.modelo.afectantes;

public class Lesion {
//el turno siguiente no avanza
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Buscar manera de que haga algo

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package edu.fiuba.algo3.modelo.afectantes;

import edu.fiuba.algo3.modelo.Afectante;
import edu.fiuba.algo3.modelo.Jugador;

public class MejorarEquipamiento implements Afectante {

public void afectar(Jugador jugador) {
jugador.mejorarEquipamiento();
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esta clase debería tener mas responsabilidad, porque sino todos los afectantes simplemente delegan o hacen poquitas cosas

    public void afectar(Jugador jugador) {
        jugador.mejorarEquipamiento(this);
    }

   public Equipamiento mejorarEquipamiento(Casco casco)
   //... asi para los equipamientos//

}
22 changes: 22 additions & 0 deletions src/main/java/edu/fiuba/algo3/modelo/equipamientos/Armadura.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package edu.fiuba.algo3.modelo.equipamientos;

import edu.fiuba.algo3.modelo.Afectante;
import edu.fiuba.algo3.modelo.Equipamiento;
import edu.fiuba.algo3.modelo.Jugador;
import edu.fiuba.algo3.modelo.equipamientos.DecoradorEquipamiento;

public class Armadura extends DecoradorEquipamiento {
private static final int DANIO = 10;

public Armadura(Equipamiento equipamiento){
this.equipamiento = equipamiento;
}

public Equipamiento mejorarEquipamiento() {
return new EscudoYEspada(this);
}

public int recibirAtaque(){
return DANIO;
}
}
22 changes: 22 additions & 0 deletions src/main/java/edu/fiuba/algo3/modelo/equipamientos/Casco.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package edu.fiuba.algo3.modelo.equipamientos;

import edu.fiuba.algo3.modelo.Afectante;
import edu.fiuba.algo3.modelo.Jugador;
import edu.fiuba.algo3.modelo.Equipamiento;
import edu.fiuba.algo3.modelo.equipamientos.DecoradorEquipamiento;

public class Casco extends DecoradorEquipamiento {
private static final int DANIO = 15;

public Casco(Equipamiento equipamiento) {
this.equipamiento = equipamiento;
}

public Equipamiento mejorarEquipamiento() {
return new Armadura(this);
}

public int recibirAtaque() {
return DANIO;
}
}
Loading
Loading