diff --git a/src/Library/DamageCalculator.cs b/src/Library/DamageCalculator.cs
index a4f3ce8..843b1f3 100644
--- a/src/Library/DamageCalculator.cs
+++ b/src/Library/DamageCalculator.cs
@@ -10,9 +10,15 @@ namespace Library;
// Es una clase abstracta la cual nos permite evitar que el programa tenga interdependencias innecesarias (Aplicando DIP).
public static class DamageCalculator
{
+ ///
+ /// Proporciona el valor de efectividad de los ataques entre diferentes tipos de Pokémon.
+ ///
+ ///
+ /// Diccionario donde la clave es una tupla que representa el tipo del ataque y el tipo del Pokemon objetivo,
+ /// y el valor es un factor de efectividad (2.0 para súper efectivo, 0.5 para poco efectivo, 0.0 para sin efecto).
+ ///
private static Dictionary, double> EffectivnessDataBase
{
- // Izquierda tipo del ataque, derecha tipo del pokemon atacado
get
{
Type fire = Type.Fire;
@@ -117,7 +123,16 @@ private static Dictionary, double> EffectivnessDataBase
return effectivnessDataBase;
}
}
-
+
+ ///
+ /// Obtiene la efectividad de un ataque de un tipo específico contra el o los tipos de un Pokemon.
+ ///
+ /// El tipo del ataque.
+ /// Una lista de los tipos del Pokemon objetivo.
+ ///
+ /// Valor double indicando el factor de efectividad del ataque.
+ /// 2.0 para súper efectivo, 0.5 para poco efectivo, 0.0 si no tiene efecto, y 1.0 si no hay una relación específica.
+ ///
public static double GetEffectivness(Type type, List types)
{
foreach (Type type1 in types)
@@ -137,6 +152,13 @@ public static double GetEffectivness(Type type, List types)
return 1.0;
}
+ ///
+ /// Determina si un ataque resulta en un golpe crítico basado en una probabilidad aleatoria.
+ ///
+ ///
+ /// Un valor double: 1.20 si el ataque es crítico (10% de probabilidad),
+ /// o 1.0 si no es crítico.
+ ///
public static double CriticalCheck()
{
Random random = new Random();
@@ -147,8 +169,16 @@ public static double CriticalCheck()
}
return 1.0;
}
-
- public static void SpecialCheck(Pokemon attackedPokemon, IAttack attack)
+ ///
+ /// Aplica un efecto especial al Pokemon objetivo, siempre y cuando el ataque recibido sea especial y el Pokemon no tenga ya otro efecto.
+ ///
+ /// El Pokemon que recibe el ataque.
+ /// El ataque ejecutado.
+ ///
+ /// Si el ataque es un y el Pokemon objetivo no tiene un estado actual,
+ /// se aplica el efecto especial del ataque y se setea su cooldown.
+ ///
+ public static void SpecialCheck(Pokemon attackedPokemon, Attack attack)
{
if (attack is SpecialAttack specialAttack && attackedPokemon.CurrentState == null)
{
@@ -157,6 +187,16 @@ public static void SpecialCheck(Pokemon attackedPokemon, IAttack attack)
}
}
+ ///
+ /// Calcula el daño infligido a un Pokemon objetivo. Para esto tiene en cuenta el valor de ataque, la efectividad de tipos y
+ /// la probabilidad de golpe crítico, además de revisar si se trata de un ataque especial.
+ ///
+ /// El Pokemon que recibe el ataque.
+ /// El ataque que se está ejecutando.
+ ///
+ /// El daño calculado como un double.
+ /// Devuelve 0.0 si el ataque falla.
+ ///
public static double CalculateDamage(Pokemon attackedPokemon, Attack attack)
{
Random random = new Random();
diff --git a/src/Library/Facade.cs b/src/Library/Facade.cs
index 4da07b5..7991c65 100644
--- a/src/Library/Facade.cs
+++ b/src/Library/Facade.cs
@@ -1,11 +1,29 @@
namespace Library;
+
+///
+/// La clase Facade proporciona una interfaz simplificada para interactuar con el sistema de gestión de batallas Pokemon.
+/// Incluye funcionalidades para gestionar listas de espera, partidas en curso, ataques, estados de juego, y mucho más.
+///
public static class Facade
{
+ ///
+ /// Lista de espera para jugadores que aún no están en una partida.
+ ///
private static WaitingList WaitingList { get; } = new WaitingList();
-
- private static GameList GameList { get; } = new GameList();
-
+
+ ///
+ /// Lista de partidas en curso.
+ ///
+ public static GameList GameList{ get; } = new GameList();
+
+ ///
+ /// Historia 1:
+ /// Permite a un jugador agregar un Pokemon al equipo desde el catálogo.
+ ///
+ /// Nombre del jugador.
+ /// Nombre del Pokemon que se quiere añadir al equipo.
+ /// Mensaje indicando si el Pokemon fue añadido o si hubo un error.
public static string ChooseTeam(string playerName, string cPokemon)
{
PokemonCatalogue.SetCatalogue();
@@ -36,25 +54,32 @@ public static string ChooseTeam(string playerName, string cPokemon)
return "El equipo está incompleto, por favor elige 6 pokemones para poder comenzar la batalla";
}
-
- public static string ShowCatalogue()
- {
- PokemonCatalogue.SetCatalogue();
- return PokemonCatalogue.ShowCatalogue();
- }
-
- // historia de usuario 2
+
+
+ ///
+ /// Historia de usuario 2:
+ /// Muestra los ataques disponibles del Pokemon activo de un jugador.
+ ///
+ /// Nombre del jugador activo.
+ /// Una lista de los ataques del Pokémon activo o un mensaje de error en
+ /// caso de que el jugador no exista.
public static string ShowAtacks(string playerName)
{
-
Player player = GameList.FindPlayerByName(playerName);
if (player == null)
return $"El jugador {playerName} no está en ninguna partida.";
-
+
return player.GetPokemonAttacks();
}
-
- // historia de usuario 3
+
+ ///
+ /// Historia de usuario 3:
+ /// Muestra los puntos de vida (HP) de los Pokemon de un jugador.
+ ///
+ /// Nombre del jugador.
+ /// Nombre del jugador cuya lista de Pokemon se va a comprobar (opcional). Si es
+ /// null hace referencia al propio jugador. Si no, hace referencia a otro.
+ /// Una lista de los Pokemon y sus HP o un mensaje de error.
public static string ShowPokemonsHP(string playerName, string playerToCheckName = null)
{
Player player = GameList.FindPlayerByName(playerName);
@@ -84,7 +109,63 @@ public static string ShowPokemonsHP(string playerName, string playerToCheckName
}
}
- //Historia de usuario 5
+ ///
+ /// Historia de usuario 4:
+ /// Permite a un jugador elegir y ejecutar un ataque durante su turno en una partida.
+ ///
+ /// Nombre del jugador que realiza el ataque.
+ /// Nombre del ataque que se desea utilizar.
+ ///
+ /// Un mensaje que indica el resultado de la acción.
+ ///
+ public static string ChooseAttack(string playerName, string attackName)
+ {
+ Player player = GameList.FindPlayerByName(playerName);
+ if (player == null)
+ {
+ return "Para poder atacar necesitas estar en una batalla";
+ }
+
+ if (player.GetPokemonTeam().Count < 6)
+ {
+ return "El equipo está incompleto, por favor elige 6 pokemones para poder comenzar la batalla";
+ }
+
+ Attack attack = player.FindAttack(attackName);
+ if (attack == null)
+ {
+ return $"El ataque {attackName} no pudo ser encontrado";
+ }
+
+ Game actualGame = GameList.FindGameByPlayer(player);
+ if (actualGame == null)
+ {
+ return "Esa partida no está en curso";
+ }
+
+ foreach (Game game in GameList.GetGameList())
+ {
+ if (game.GetPlayers().Contains(player))
+ {
+ if (game.GetPlayers()[game.ActivePlayer].Name == player.Name)
+ {
+ string gameResult = game.ExecuteAttack(attack);
+ game.NextTurn();
+ string nextTurn = CheckGameStatus(game);
+ return gameResult + nextTurn;
+ }
+ return "No eres el jugador activo";
+ }
+ }
+ return "Error inesperado";
+ }
+
+ ///
+ /// Historia de usuario 5:
+ /// Comprueba si es el turno de un jugador y muestra las opciones disponibles.
+ ///
+ /// Nombre del jugador.
+ /// Mensaje indicando si es o no su turno, junto con las opciones.
public static string CheckTurn(string playerName)
{
Player player = GameList.FindPlayerByName(playerName);
@@ -110,9 +191,15 @@ public static string CheckTurn(string playerName)
return null;
}
-
- //Historia de usuario 6
- private static string CheckGameStatus(Game game)
+
+ ///
+ /// Historia de usuario 6:
+ /// Comprueba el estado de una partida y determina si continúa o hay un ganador.
+ ///
+ /// La partida actual.
+ /// "Próximo turno" en caso de que la partida siga o un string conteniendo el
+ /// ganador y el perdedor.
+ public static string CheckGameStatus(Game game)
{
if (game != null)
{
@@ -127,8 +214,17 @@ private static string CheckGameStatus(Game game)
return "La partida no pudo ser encontrada";
}
-
- //Historia de usuario 7
+
+
+ ///
+ /// Historia de usuario 7:
+ /// Permite a un jugador activo cambiar su Pokemon actual durante su turno en una partida.
+ ///
+ /// Nombre del jugador que desea cambiar de Pokemon.
+ /// Nombre del Pokemon al que se desea cambiar.
+ ///
+ /// Un mensaje que indica el resultado de la acción.
+ ///
public static string ChangePokemon(string playerName, string pokemonName)
{
Player player = GameList.FindPlayerByName(playerName);
@@ -170,7 +266,14 @@ public static string ChangePokemon(string playerName, string pokemonName)
return "No eres el jugador activo, no puedes realizar acciones";
}
- //Historia de usuario 8
+ ///
+ /// Historia de usuario 8
+ /// Permite a un jugador usar un item en un Pokemon.
+ ///
+ /// Nombre del jugador.
+ /// Nombre del item a usar.
+ /// Nombre del Pokemon objetivo.
+ /// Resultado del uso del item.
public static string UseAnItem(string playerName, string item, string pokemon)
{
Player player = GameList.FindPlayerByName(playerName);
@@ -188,9 +291,14 @@ public static string UseAnItem(string playerName, string item, string pokemon)
return game.UseItem(player.FindItem(item), player.FindPokemon(pokemon));
}
-
-
- // historia de usuario 9
+
+
+ ///
+ /// Historia de usuario 9:
+ /// Agrega un jugador a la lista de espera.
+ ///
+ /// Nombre del jugador.
+ /// Mensaje indicando si el jugador fue agregado o ya estaba en la lista.
public static string AddPlayerToWaitingList(string playerName)
{
if (WaitingList.AddPlayer(playerName))
@@ -200,27 +308,51 @@ public static string AddPlayerToWaitingList(string playerName)
return $"{playerName} ya está en la lista de espera";
}
-
+
+ ///
+ /// Historia de usuario 9.1:
+ /// Remueve un jugador de la lista de espera.
+ ///
+ /// Nombre del jugador.
+ /// Mensaje indicando si el jugador fue removido o no estaba en la lista.
public static string RemovePlayerFromWaitingList(string playerName)
{
if (WaitingList.RemovePlayer(playerName))
return $"{playerName} removido de la lista de espera";
return $"{playerName} no está en la lista de espera";
}
-
- //historia de usuario 10
+
+ ///
+ /// Historia de usuario 10
+ /// Muestra todos los jugadores actualmente en la lista de espera.
+ ///
+ /// Lista de jugadores en espera o un mensaje indicando que no hay nadie esperando.
public static string GetAllPlayersWaiting()
{
if (WaitingList.Count == 0)
+ {
return "No hay nadie esperando";
+ }
+
string result = "Esperan: ";
foreach (Player player in WaitingList.GetWaitingList())
+ {
result = result + player.Name + "; ";
+ }
+
return result;
}
-
- //historia de usuario 11
- public static string CreateGame(string playerName, string opponentName)
+
+ //
+ ///
+ /// Historia de usuario 11:
+ /// Crea una nueva partida entre dos jugadores, quitándolos de la lista de espera y agregando la partida a la lista de
+ /// juegos activos.
+ ///
+ /// Nombre del primer jugador.
+ /// Nombre del oponente.
+ /// Mensaje confirmando el inicio de la partida entre ambos jugadores.
+ private static string CreateGame(string playerName, string opponentName)
{
Player player = WaitingList.FindPlayerByName(playerName);
Player opponent = WaitingList.FindPlayerByName(opponentName);
@@ -229,7 +361,14 @@ public static string CreateGame(string playerName, string opponentName)
GameList.AddGame(player, opponent);
return $"Comienza {playerName} vs {opponentName}";
}
-
+
+ ///
+ /// Historia de usuario 11.1:
+ /// Inicia una batalla entre dos jugadores, eligiendo un oponente específico o con el primer oponente disponible.
+ ///
+ /// Nombre del jugador que inicia la batalla.
+ /// Nombre del oponente (opcional).
+ /// string indicando si la batalla comenzó o si hubo algún error.
public static string StartBattle(string playerName, string opponentName)
{
Player opponent;
@@ -264,47 +403,16 @@ bool OpponentFound()
return opponent != null;
}
}
-
- //Historia 4
- public static string ChooseAttack(string playerName, string attackName)
+
+
+ ///
+ /// Muestra el catálogo de Pokemon disponibles.
+ ///
+ /// Lista de Pokemon en el catálogo.
+ public static string ShowCatalogue()
{
- Player player = GameList.FindPlayerByName(playerName);
- if (player == null)
- {
- return "Para poder atacar necesitas estar en una batalla";
- }
-
- if (player.GetPokemonTeam().Count < 6)
- {
- return "El equipo está incompleto, por favor elige 6 pokemones para poder comenzar la batalla";
- }
-
- Attack attack = player.FindAttack(attackName);
- if (attack == null)
- {
- return $"El ataque {attackName} no pudo ser encontrado";
- }
-
- Game actualGame = GameList.FindGameByPlayer(player);
- if (actualGame == null)
- {
- return "Esa partida no está en curso";
- }
-
- foreach (Game game in GameList.GetGameList())
- {
- if (game.GetPlayers().Contains(player))
- {
- if (game.GetPlayers()[game.ActivePlayer].Name == player.Name)
- {
- string gameResult = game.ExecuteAttack(attack);
- game.NextTurn();
- string nextTurn = CheckGameStatus(game);
- return gameResult + nextTurn;
- }
- return "No eres el jugador activo";
- }
- }
- return "Error inesperado";
+ PokemonCatalogue.SetCatalogue();
+ return PokemonCatalogue.ShowCatalogue();
}
+
}
\ No newline at end of file