/*BATALLA POKÉMON * Fecha publicación enunciado: 29/08/22 * Fecha publicación resolución: 06/09/22 * Dificultad: MEDIA * * Enunciado: Crea un programa que calcule el daño de un ataque durante una batalla Pokémon. * - La fórmula será la siguiente: daño = 50 * (ataque / defensa) * efectividad * - Efectividad: x2 (súper efectivo), x1 (neutral), x0.5 (no es muy efectivo) * - Sólo hay 4 tipos de Pokémon: Agua, Fuego, Planta y Eléctrico (buscar su efectividad) * - El programa recibe los siguientes parámetros: * - Tipo del Pokémon atacante. * - Tipo del Pokémon defensor. * - Ataque: Entre 1 y 100. * - Defensa: Entre 1 y 100. */ private fun main() { println(battle(PokemonType.WATER, PokemonType.FIRE, 50, 30)) println(battle(PokemonType.WATER, PokemonType.FIRE, 101, -10)) println(battle(PokemonType.FIRE, PokemonType.WATER, 50, 30)) println(battle(PokemonType.FIRE, PokemonType.FIRE, 50, 30)) println(battle(PokemonType.GRASS, PokemonType.ELECTRIC, 30, 50)) } private fun battle(attacker: PokemonType, defender: PokemonType, attack: Int, defense: Int): Double? { if (attack <= 0 || attack > 100 || defense <= 0 || defense > 100) { println("Ataque o defensa incorrecto") return null } val typeEffects = mapOf( PokemonType.WATER to PokemonChart(PokemonType.FIRE, PokemonType.GRASS), PokemonType.FIRE to PokemonChart(PokemonType.GRASS, PokemonType.WATER), PokemonType.GRASS to PokemonChart(PokemonType.WATER, PokemonType.FIRE), PokemonType.ELECTRIC to PokemonChart(PokemonType.WATER, PokemonType.GRASS) ) val effectivity = when { (attacker == defender || typeEffects[attacker]?.notEffective == defender) -> { println("No es muy efectivo") 0.5 } (typeEffects[attacker]?.effective == defender) -> { println("Es súper efectivo") 2.0 } else -> { println("Es neutro") 1.0 } } return 50 * attack.toDouble() / defense.toDouble() * effectivity } enum class PokemonType { WATER, FIRE, GRASS, ELECTRIC } private data class PokemonChart(val effective: PokemonType, val notEffective: PokemonType)
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter