Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

java-java

class Lutador {

private String lutadorNome;
private int lutadorDano;
private int lutadorVida;
private int lutadorIniciativa;

public Lutador(String lutadorNome, int lutadorDano, int lutadorVida, int lutadorIniciativa) {
    this.lutadorNome = lutadorNome;
    this.lutadorDano = lutadorDano;
    this.lutadorVida = lutadorVida;
    this.lutadorIniciativa = lutadorIniciativa;
}

// Getters e Setters
public String getLutadorNome() {
    return lutadorNome;
}

public int getLutadorDano() {
    return lutadorDano;
}

public int getLutadorVida() {
    return lutadorVida;
}

public int getLutadorIniciativa() {
    return lutadorIniciativa;
}

public static void checarStatus(Lutador[] timeEstaticoStatus, int maximo) {
    // Verificar status de cada lutador
    for (int i = 0; i < maximo; i++) {
        if (timeEstaticoStatus[i] != null) {
            System.out.printf("Status de %s: Vida = %d | Iniciativa = %d\n",
                    timeEstaticoStatus[i].getLutadorNome(),
                    timeEstaticoStatus[i].getLutadorVida(),
                    timeEstaticoStatus[i].getLutadorIniciativa());
        }
    }
}

public static Lutador checarRemoverLutador(Lutador[] timeEstaticoRemover, String lutadorNome, int maximo) {
    for (int i = 0; i < maximo; i++) {
        if (timeEstaticoRemover[i] != null && timeEstaticoRemover[i].getLutadorNome().equals(lutadorNome)) {
            Lutador lutadorRemovido = timeEstaticoRemover[i];
            timeEstaticoRemover[i] = null;
            return lutadorRemovido;
        }
    }
    return null;
}
public void sofrerDano(int danoRecebido) {
    this.lutadorVida -= danoRecebido;
    if (this.lutadorVida < 0) {
        this.lutadorVida = 0;  // Garantir que a vida não fique negativa
    }
    System.out.printf("O lutador %s sofreu %d de dano e agora tem %d de vida.\n", lutadorNome, danoRecebido, lutadorVida);
}

} public class CombateAtivo {

// Método para simular o combate entre dois times
public static void realizarCombate(Lutador[] time1, Lutador[] time2, int maximo1, int maximo2) {
    // Lógica quando Time1 tem mais ou igual lutadores do que Time2
    if (maximo1 >= maximo2) {
        for (int i = 0; i < maximo2; i++) {
            combateIndividual(time1[i], time2[i]);
        }

        // Se Time1 tem mais lutadores, o último lutador do Time1 sofre dano de todos os lutadores restantes do Time2
        if (maximo1 > maximo2) {
            for (int i = maximo2; i < maximo1; i++) {
                for (int j = 0; j < maximo2; j++) {
                    time1[i].sofrerDano(time2[j].getLutadorDano());
                }
                verificarMorte(time1[i]);
            }
        }
    } else { // Caso Time2 tenha mais lutadores do que Time1
        for (int i = 0; i < maximo1; i++) {
            combateIndividual(time1[i], time2[i]);
        }

        // Se Time2 tem mais lutadores, o último lutador do Time2 sofre dano de todos os lutadores restantes do Time1
        if (maximo2 > maximo1) {
            for (int i = maximo1; i < maximo2; i++) {
                for (int j = 0; j < maximo1; j++) {
                    time2[i].sofrerDano(time1[j].getLutadorDano());
                }
                verificarMorte(time2[i]);
            }
        }
    }
}

// Método para realizar o combate entre dois lutadores
private static void combateIndividual(Lutador lutador1, Lutador lutador2) {
    int dano1 = lutador1.getLutadorDano();
    int dano2 = lutador2.getLutadorDano();

    // Ataque simultâneo: ambos os lutadores sofrem dano ao mesmo tempo
    lutador1.sofrerDano(dano2);  // Lutador 1 sofre dano do Lutador 2
    lutador2.sofrerDano(dano1);  // Lutador 2 sofre dano do Lutador 1

    // Verificar a morte de cada lutador após os ataques simultâneos
    verificarMorte(lutador1);
    verificarMorte(lutador2);
}

// Método para verificar se um lutador morreu e, se sim, mover para o cemitério
private static void verificarMorte(Lutador lutador) {
    if (lutador.getLutadorVida() <= 0) {
        System.out.printf("O lutador %s morreu!!\n", lutador.getLutadorNome());
        Time.inserirCemiterio(cemiterio1, lutador);
    }
}

} class Time {

private String nomeTime;
private Lutador[] lutadores;
private static final int CAPACIDADE = 10;
public static int maximo1 = 5;
public static int maximo2 = 5;

public Time(String nomeTime) {
    this.nomeTime = nomeTime;
    this.lutadores = new Lutador[CAPACIDADE];
}

public boolean inserirLutador(Lutador lutador) {
    for (int i = 0; i < lutadores.length; i++) {
        if (lutadores[i] == null) {
            lutadores[i] = lutador;
            System.out.println("Lutador " + lutador.getLutadorNome() + " adicionado ao time " + nomeTime);
            return true; // Lutador adicionado com sucesso
        }
    }
    return false; // Time cheio
}

public static void inserirCemiterio(Lutador cemiterio, String lutadorNome) {
    for (int i = 0; i < cemiterio.length; i++) {
        if (cemiterio[i] == null) {
            cemiterio[i] = lutador;
            System.out.println("Lutador " + lutadorNome + " adicionado ao cemitério.");
            return;
        }
    }
    System.out.println("O cemitério está cheio!");
}

// Getters e setters
public String getNomeTime() {
    return nomeTime;
}

public Lutador[] getLutadores() {
    return lutadores;
}
//funções diversas
public static int retirarDeMax(int maximo){
    return maximo--;
}
public static int adicionarDeMax(int maximo){
    return maximo++;
}

} //TIP To Run code, press or // click the icon in the gutter. /* começando pela classe time:

  • O identificador é o próprio objeto apresentado
  • O código gira em torno dos objetos instanciados Time1 e Time 2, que possuem alguns atributos
  • Ao final, adicionar comentários e fazer as devidas alterações necessárias
  • correção na linha 340
  • Há um problema no combate: se tiver menos combatentes em um do que em outro ??
  • Tirar os casters (sem razão)
  • Verificar aritmética de vetores
  • adicionar um metodo que aumenta o tamanho do vetor time no processo de adicionar elementos */

import java.util.Scanner;

import java.util.Scanner;

class Main { public static void main(String[] args) { // Criação dos times Time time1 = new Time("Time 1"); Time time2 = new Time("Time 2"); Lutador[] cemiterio1 = new Lutador[30]; Lutador[] cemiterio2 = new Lutador[30];

    // Instanciando lutadores
    Lutador lutador1 = new Lutador("GeraltDeRivia", 90, 28, 45);
    Lutador lutador2 = new Lutador("Ciri", (int) (Math.random() * 101), (int) (Math.random() * 101), 60);
    Lutador lutador3 = new Lutador("Lambert", (int) (Math.random() * 101), (int) (Math.random() * 101), 18);
    Lutador lutador4 = new Lutador("Yennefer", (int) (Math.random() * 101), (int) (Math.random() * 101), 30);
    Lutador lutador5 = new Lutador("Vesemir", (int) (Math.random() * 101), (int) (Math.random() * 101), 57);
    Lutador lutador6 = new Lutador("Cocatriz", (int) (Math.random() * 101), (int) (Math.random() * 101), 23);
    Lutador lutador7 = new Lutador("Moira1", (int) (Math.random() * 101), (int) (Math.random() * 101), 41);
    Lutador lutador8 = new Lutador("Moira2", (int) (Math.random() * 101), (int) (Math.random() * 101), 47);
    Lutador lutador9 = new Lutador("Grifo", (int) (Math.random() * 101), (int) (Math.random() * 101), 39);
    Lutador lutador10 = new Lutador("Lobisomem", (int) (Math.random() * 101), (int) (Math.random() * 101), 21);

    time1.inserirLutador(lutador1);
    time1.inserirLutador(lutador2);
    time1.inserirLutador(lutador3);
    time1.inserirLutador(lutador4);
    time1.inserirLutador(lutador5);
    time2.inserirLutador(lutador6);
    time2.inserirLutador(lutador7);
    time2.inserirLutador(lutador8);
    time2.inserirLutador(lutador9);
    time2.inserirLutador(lutador10);

    System.out.println("Bem vindo ao RPG Tucano !!!!!");
    System.out.println("\nVamos ao jogo:\n\nTime 1:\n");

    // Imprimindo os nomes dos lutadores do time 1
    System.out.println("Time 1:");
    for (int i = 0; i < Time.maximo1; i++) {
        System.out.printf("%s", time1.getLutadores()[i].getLutadorNome());
        if ((i + 1) % 2 == 0) {
            System.out.println(); // Quebra de linha após cada par de nomes
        }
    }
    if (Time.maximo1 % 2 != 0) {
        System.out.println(); // Adiciona uma linha extra caso o número de lutadores seja ímpar
    }

    // Imprimindo os nomes dos lutadores do time 2
    System.out.println("Time 2:");
    for (int i = 0; i < Time.maximo2; i++) {
        System.out.printf("%s", time2.getLutadores()[i].getLutadorNome());
        if ((i + 1) % 2 == 0) {
            System.out.println(); // Quebra de linha após cada par de nomes
        }
    }
    if (Time.maximo2 % 2 != 0) {
        System.out.println(); // Adiciona uma linha extra caso o número de lutadores seja ímpar
    }

    System.out.println("Vamos começar? (s/n)");
    Scanner scanner = new Scanner(System.in);
    String opcao = scanner.nextLine();
    if (opcao.equals("s")) {
        do{
            System.out.println("\nDeseja dar um trato na sua equipe?");
            System.out.println("1 - Checar status de um time");
            System.out.println("2 - Remover lutador de um time");
            System.out.println("3 - Adicionar um novo lutador");
            System.out.println("0 - Sair");
            System.out.print("Opção: ");
            opcao = scanner.nextLine();

            switch (opcao) {
                case "1":
                    System.out.println("Checar status de qual time? (1 ou 2): ");
                    int timeEscolhido = scanner.nextInt();
                    if (timeEscolhido == 1) {
                        Lutador.checarStatus(time1.getLutadores(), Time.maximo1);  // Checa o status do Time 1
                    } else if (timeEscolhido == 2) {
                        Lutador.checarStatus(time2.getLutadores(), Time.maximo2);  // Checa o status do Time 2
                    }
                    break;
                case "2":
                    System.out.println("Digite o nome do lutador para remover: ");
                    scanner.nextLine(); // Consumir quebra de linha
                    String nomeParaRemover = scanner.nextLine();
                    System.out.println("Remover de qual time? (1 ou 2): ");
                    int timeRemover = scanner.nextInt();
                    if (timeRemover == 1) {
                        Lutador.checarRemoverLutador(time1.getLutadores(), nomeParaRemover, Time.maximo1);
                        Time.retirarDeMax(Time.maximo1);
                    } else if (timeRemover == 2) {
                        Lutador.checarRemoverLutador(time2.getLutadores(), nomeParaRemover, Time.maximo2);
                        Time.retirarDeMax(Time.maximo2);
                    }
                    break;
                case "3": // Adicionar um novo lutador a um time
                    System.out.print("Digite o nome do lutador: ");
                    scanner.nextLine(); // Consumir quebra de linha
                    String nomeLutador = scanner.nextLine();

                    System.out.print("Digite o dano causado pelo lutador (0-100): ");
                    int lutadorDano = scanner.nextInt();

                    System.out.print("Digite a vida inicial do lutador (0-100): ");
                    int lutadorVida = scanner.nextInt();

                    System.out.print("Digite a iniciativa do lutador: ");
                    int lutadorIniciativa = scanner.nextInt();

                    // Criação do novo lutador com os dados fornecidos
                    Lutador novoLutador = new Lutador(nomeLutador, lutadorDano, lutadorVida, lutadorIniciativa);

                    // Perguntar em qual time adicionar o lutador
                    System.out.print("Adicionar o lutador ao Time 1 ou Time 2? (1 ou 2): ");
                    int timeAdicionar = scanner.nextInt();

                    boolean adicionado = false;

                    if (timeAdicionar == 1) {
                        // Adicionar ao Time 1
                        adicionado = time1.inserirLutador(novoLutador);
                        if (adicionado) {
                            Time.adicionarDeMax(Time.maximo1);
                        }
                    } else if (timeAdicionar == 2) {
                        // Adicionar ao Time 2
                        adicionado = time2.inserirLutador(novoLutador);
                        if (adicionado) {
                            Time.adicionarDeMax(Time.maximo2);
                        }
                    } else {
                        System.out.println("Time inválido! Escolha 1 ou 2.");
                    }
                    break;
                case "0":
                    System.out.println("\n\n------------------\nCombate iniciado:\n-----------------\n\n");
                    CombateAtivo.realizarCombate(time1.getLutadores(), time2.getLutadores(), Time.maximo1, Time.maximo2);
                    break;

                default:
                    System.out.println("Opção inválida!");
            }
            scanner.close();
            // Após o combate, chame a fase de resultados
            FaseResultados.executarFaseResultados(time1, time2, cemiterio1, cemiterio2);

        }while(!FaseResultados.continuarJogo(time1, time2));
    }
}

} public class FaseResultados {

// Função que executa a fase de resultados após o combate
public static void executarFaseResultados(Time time1, Time time2, Lutador[] cemiterio1, Lutador[] cemiterio2) {
    int scoreTime1 = calcularScore(cemiterio1);  // Calcula o score do Time 1
    int scoreTime2 = calcularScore(cemiterio2);  // Calcula o score do Time 2

    boolean time1ComLutadorVivo = verificarLutadoresVivos(time1);
    boolean time2ComLutadorVivo = verificarLutadoresVivos(time2);

    // Condição 1: Se um time tiver ao menos um lutador vivo e o adversário não
    if (time1ComLutadorVivo && !time2ComLutadorVivo) {
        System.out.println("O Time 1 venceu!");
        return;
    } else if (!time1ComLutadorVivo && time2ComLutadorVivo) {
        System.out.println("O Time 2 venceu!");
        return;
    }

    // Condição 2: Se ambos os times tiverem lutadores vivos e um time alcançar score >= 20
    if (time1ComLutadorVivo && time2ComLutadorVivo) {
        if (scoreTime1 >= 20 && scoreTime2 < 20) {
            System.out.println("O Time 1 venceu por score maior que 20!");
            return;
        } else if (scoreTime2 >= 20 && scoreTime1 < 20) {
            System.out.println("O Time 2 venceu por score maior que 20!");
            return;
        }

        // Condição 3: Se ambos os times tiverem score > 20, o time com maior score vence
        if (scoreTime1 > scoreTime2) {
            System.out.println("O Time 1 venceu por maior score!");
            return;
        } else if (scoreTime2 > scoreTime1) {
            System.out.println("O Time 2 venceu por maior score!");
            return;
        }

        // Condição 4: Se ambos os times ficaram vazios e o score for igual, empate
        if (!time1ComLutadorVivo && !time2ComLutadorVivo) {
            if (scoreTime1 == scoreTime2) {
                System.out.println("Empate!");
            } else {
                System.out.println("O time com maior score venceu!");
            }
            return;
        }
    }

    // Se nenhuma condição de término for atendida, o jogo continua
}

// Função que verifica se há lutadores vivos em um time
private static boolean verificarLutadoresVivos(Time time) {
    for (Lutador lutador : time.getLutadores()) {
        if (lutador != null && lutador.getLutadorVida() > 0) {
            return true; // Encontrou um lutador vivo
        }
    }
    return false; // Nenhum lutador vivo encontrado
}

// Função que calcula o score do time, baseado na quantidade de lutadores no cemitério adversário
private static int calcularScore(Lutador[] cemiterio) {
    int score = 0;
    for (Lutador lutador : cemiterio) {
        if (lutador != null) {
            score++;
        }
    }
    return score;
}

// Função que verifica se o jogo deve continuar
public static boolean continuarJogo(Time time1, Time time2) {
    // Se ambos os times tiverem lutadores vivos, o jogo continua
    boolean time1ComLutadorVivo = verificarLutadoresVivos(time1);
    boolean time2ComLutadorVivo = verificarLutadoresVivos(time2);

    // O jogo só continuará se ambos os times tiverem lutadores vivos
    return time1ComLutadorVivo && time2ComLutadorVivo;
}

}

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors