RE:Herramienta p/generar diagramas
Publicado por
luis (1 intervención) el 12/03/2024 05:22:59
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
// Definición de la estructura Karateka
struct Karateka {
std::string nombre;
std::string estilo;
double probabilidad_golpe;
double probabilidad_esquiva;
};
bool golpe_exitoso(double probabilidad) {
return static_cast<double>(rand()) / RAND_MAX < probabilidad;
}
// Función para mostrar el resultado gráficamente
void mostrar_resultado(Karateka* ganador, Karateka* perdedor) {
std::cout << "Resultado:\n";
std::cout << "-------------------------\n";
std::cout << " " << ganador->nombre << " (" << ganador->estilo << ")\n";
std::cout << " vs\n";
std::cout << " " << perdedor->nombre << " (" << perdedor->estilo << ")\n";
std::cout << "-------------------------\n";
}
Karateka* enfrentamiento(Karateka* karateka1, Karateka* karateka2) {
if (golpe_exitoso(karateka1->probabilidad_golpe)) {
std::cout << karateka1->nombre << " acertó un golpe en " << karateka2->nombre << "\n";
mostrar_resultado(karateka1, karateka2);
return karateka1;
} else if (golpe_exitoso(karateka2->probabilidad_esquiva)) {
std::cout << karateka2->nombre << " esquivó el golpe de " << karateka1->nombre << "\n";
mostrar_resultado(karateka2, karateka1);
return karateka2;
} else {
std::cout << "Ambos karatekas fallaron\n";
mostrar_resultado(karateka1, karateka2);
return nullptr;
}
}
void ajustar_probabilidades(Karateka* karateka) {
std::cout << "Ajustando probabilidades para " << karateka->nombre << ":\n";
std::cout << "Nueva probabilidad de golpe (0.0 - 1.0): ";
std::cin >> karateka->probabilidad_golpe;
std::cout << "Nueva probabilidad de esquiva (0.0 - 1.0): ";
std::cin >> karateka->probabilidad_esquiva;
}
int main() {
srand(static_cast<unsigned>(time(nullptr)));
int num_participantes;
std::cout << "Ingrese la cantidad de karatekas (debe ser un número par): ";
std::cin >> num_participantes;
std::vector<Karateka> participantes(num_participantes);
for (int i = 0; i < num_participantes; ++i) {
std::cout << "Karateka " << i + 1 << ":\n";
std::cout << "Nombre: ";
std::cin >> participantes[i].nombre;
std::cout << "Estilo de karate: ";
std::cin >> participantes[i].estilo;
ajustar_probabilidades(&participantes[i]);
}
// Simular enfrentamientos en el torneo
for (int ronda = 1; ronda <= num_participantes / 2; ++ronda) {
std::cout << "\nRonda " << ronda << ":\n";
for (int i = 0; i < num_participantes; i += 2) {
std::cout << "\nEnfrentamiento " << i + 1 << " vs " << i + 2 << ":\n";
enfrentamiento(&participantes[i], &participantes[i + 1]);
}
}
return 0;
}