Coder Social home page Coder Social logo

tp2_algoritmos3's People

Contributors

camiboj avatar chortas avatar elementalcharge avatar maxiyung avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

chortas

tp2_algoritmos3's Issues

Corrección

NOTA: 7

Respecto al informe

  • En la sección detalles de implementación no se detallan o muestran razones por las cuales el diseño que persistió fue el propuesto. Por ejemplo:
    • Porqué herencia vs delegación.
    • Porqué utilicé tal o cuál patrón.

Diagrama de clases

  • Diagrama 1:

    • Existen múltiples relaciones sin multiplicidad.
    • Mazo contiene lista de cartas pero no figura en diagrama.
    • Mazo duplicado.
    • Mazo contiene métodos no diagramados.
  • Diagrama 3:

    • Las clases que implementan Estado no tienen contrato.
    • La clase Modo no cuenta con contrato.
    • La clase CartaMagica no tiene el contrato que dice el diagrama.

Diagrama de secuencia

Los diagramas de secuencia esquematizan interacciones entre cases a los efectos de resolver un caso de uso. El diagrama 4 no esquematiza un caso de uso.

  • Diagrama 4:
    • El nombre de las instancias no siguen el standard que sugiere la cátedra.
    • Cuando EfectoInsectoComeHombres recibe el mensaje activarEfectoDeVolteoAnteAtaque existe una iteración que no se evidencia.
for (Carta destruida: cartaDestruidasDelAtacantePorElEfecto){
            tablero.colocarCementerio(destruida,jugadorEnemigo);
            if (destruida instanceof modelo.cartas.cartasMonstruo.CartaMonstruo)
                tablero.get(jugadorEnemigo).eliminarDeZonaMonstruo((modelo.cartas.cartasMonstruo.CartaMonstruo) destruida);
        }

Respecto al código

  • Utilización recurrente del instanceof (20 ocurrencias):

Archivo: InvocacionCartaDragonDefinitivoOjosAzules

    private boolean validarSacrificios() {
        boolean resultado = true;
        for (CartaMonstruo cartaMonstruo : sacrificios) {
            resultado = cartaMonstruo instanceof DragonBlancoDeOjosAzules;
            if (! resultado) { break; }
        }
        return sacrificios.size() == 3 && resultado;
    }

Archivo: Tablero

    private void colocarCartaEnCementerio(Carta carta, Jugador jugador) {
		if(carta instanceof CartaMonstruo){
			divisiones.get(jugador).eliminarDeZonaMonstruo((CartaMonstruo) carta);
		}else{
		divisiones.get(jugador).eliminarDeZonaTrampaMagica(carta);
		}
		divisiones.get(jugador).colocarCementerio(carta);
	}

Archivo: Mano

    public boolean sonTodasExodia() {
        Set<CartaMonstruoExodia> piezasDeExodia= new HashSet<CartaMonstruoExodia>();
        for (Carta carta: cartas) {
           if( carta instanceof CartaMonstruoExodia){
                piezasDeExodia.add((CartaMonstruoExodia)carta);
           }

        }
        if (piezasDeExodia.size()==5)
        return true;
        else return false;
    }
  • Código mazo: Código susceptible de ser refactorizado aplicando polimorfísmo en lugar del switch.
        try{

            while(cartas.size()<40 - 18){
                Scanner cartasMonstruo = new Scanner(new File("resources/Nombres Monstruos.txt"));
                Scanner cartasMagicasTrampa = new Scanner(new File("resources/Nombres Cartas Magicas Trampas.txt"));
                Scanner cartasEspeciales = new Scanner(new File("resources/Nombres Cartas Especiales.txt"));
                Random r = new Random();

                int numeroMonstruos = 0;

                int mazoNumero = r.nextInt(4-1) +1;
                Random numeroRandomCarta = new Random();
                int numeroElegido;
                switch (mazoNumero) {
                    case 1:
                        if(numeroMonstruos < 15){
                        numeroElegido = numeroRandomCarta.nextInt(TOTAL_CARTAS_MONSTRUO);
                        int numero = 0;
                        while (numero <= numeroElegido) {
                            nombreDeCarta = cartasMonstruo.nextLine();
                            numero++;
                        }
                        agregarCarta(nombreDeCarta, jugador, jugadorContrario, zonaMonstruoAtacante, zonaMonstruoPropia, tablero);
                        cartasMonstruo.reset();
                }break;

                    case 2:
                        //if (contadorDeCartasMagicasTrampa<TOTAL_CARTAS_MAGICAS_TRAMPA){
                        numeroElegido = numeroRandomCarta.nextInt(TOTAL_CARTAS_MAGICAS_TRAMPA);
                        int numeroMagico = 0;
                        while (numeroMagico <= numeroElegido){
                            nombreDeCarta = cartasMagicasTrampa.nextLine();
                            numeroMagico++; }
                        agregarCarta(nombreDeCarta, jugador, jugadorContrario, zonaMonstruoAtacante, zonaMonstruoPropia, tablero);
                        cartasMagicasTrampa.reset();
                        contadorDeCartasMagicasTrampa++;
                    break;
                //}
                    case 3:
                        //if(contadorDeCartasEspeciales < TOTAL_CARTAS_ESPECIALES) {
                        numeroElegido = numeroRandomCarta.nextInt(TOTAL_CARTAS_ESPECIALES);
                        int numeroEspecial = 0;
                        while (numeroEspecial <= numeroElegido) {
                            nombreDeCarta = cartasEspeciales.nextLine();
                            numeroEspecial++; }
                        //if (!registroCartasEspeciales.contains(nombreDeCarta)){
                        agregarCarta(nombreDeCarta, jugador, jugadorContrario, zonaMonstruoAtacante, zonaMonstruoPropia, tablero);
                        contadorDeCartasEspeciales++;
                        registroCartasEspeciales.add(nombreDeCarta);
                         //}
                         cartasEspeciales.reset();
                    //}
                        break;
                     default:
                         break;
                        }

                cartasEspeciales.close();
                cartasMagicasTrampa.close();
                cartasMonstruo.close();
            }

Reporte cobertura

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.