Skip to content

Commit

Permalink
Implement attackcommand
Browse files Browse the repository at this point in the history
  • Loading branch information
SebastianCuneo committed Nov 15, 2024
1 parent b550342 commit ea80880
Show file tree
Hide file tree
Showing 8 changed files with 113 additions and 17 deletions.
31 changes: 31 additions & 0 deletions src/Library/Commands/AttackCommand.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using Discord.Commands;
using ClassLibrary;

namespace Library.Commands;

/// <summary>
/// Esta clase implementa el comando 'join' del bot. Este comando une al jugador
/// que envía el mensaje a la lista de jugadores esperando para jugar.
/// </summary>
// ReSharper disable once UnusedType.Global
public class AttackCommand : ModuleBase<SocketCommandContext>
{
/// <summary>
/// Implementa el comando 'join'. Este comando une al jugador que envía el
/// mensaje a la lista de jugadores esperando para jugar.
/// </summary>
[Command("attack")]
[Summary("Ejecuta el ataque")]
// ReSharper disable once UnusedMember.Global
public async Task ExecuteAsync([Remainder]string moveName)
{
//validar movename

string displayName = CommandHelper.GetDisplayName(Context);
string result = Facade.Instance.PlayerAttack(displayName, moveName);


await ReplyAsync(result);

}
}
38 changes: 38 additions & 0 deletions src/Library/Commands/InitCommand.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using Discord.Commands;
using ClassLibrary;

namespace Library.Commands;

/// <summary>
/// Esta clase implementa el comando 'join' del bot. Este comando une al jugador
/// que envía el mensaje a la lista de jugadores esperando para jugar.
/// </summary>
// ReSharper disable once UnusedType.Global
public class InitCommand : ModuleBase<SocketCommandContext>
{
/// <summary>
/// Implementa el comando 'join'. Este comando une al jugador que envía el
/// mensaje a la lista de jugadores esperando para jugar.
/// </summary>
[Command("init")]
[Summary("")]
// ReSharper disable once UnusedMember.Global
public async Task ExecuteAsync()
{
string[] attackerPokemons = new string[] { "Blaziken", "Tinkaton", "Salamence", };
string[] defenderPokemons = new string[] { "Tinkaton", "Zangoose", "Rayquaza", };
string move = "Patada Ígnea";
string move2 = "Carantoña";

string displayName = CommandHelper.GetDisplayName(Context);
string result = Facade.Instance.AddPlayerToWaitingList(displayName);
result = result + Facade.Instance.AddPlayerToWaitingList("player1");
result = result + Facade.Instance.StartBattle(displayName, "player1");
result = result + Facade.Instance.ChoosePokemons(displayName, attackerPokemons);
result = result + Facade.Instance.ChoosePokemons("player1", defenderPokemons);
Facade.Instance.ChoosePokemonAndMoveToAttack( displayName, move, attackerPokemons[0]);
Facade.Instance.ChoosePokemonAndMoveToAttack( "player1", move2, defenderPokemons[0]);

await ReplyAsync(result);
}
}
10 changes: 0 additions & 10 deletions src/Library/Domain/Domain/Expecions.cs

This file was deleted.

11 changes: 7 additions & 4 deletions src/Library/Domain/Domain/Facade.cs
Original file line number Diff line number Diff line change
Expand Up @@ -212,15 +212,16 @@ public string GetPokemonsHealth(string playerDisplayName)
/// <param name="defenderName">El nombre del jugador defensor.</param>
/// <param name="moveName">El nombre del movimiento seleccionado para el ataque.</param>
/// <returns>Un mensaje con el resultado del ataque.</returns>
public string PlayerAttack(string attackerName, string defenderName, string moveName)
public string PlayerAttack(string attackerName, string moveName)
{
//Encontrar el jugador
Player attacker = this.GameList.FindPlayerByDisplayName(attackerName);
Player defender = this.GameList.FindPlayerByDisplayName(defenderName);
Player defender = this.GameList.FindOpponentOfDisplayName(attackerName);

if (attacker == null || defender == null)
{
return "Uno o ambos jugadores no están en el juego.";
throw new PokemonException("Uno o ambos jugadores no están en el juego");
//return "Uno o ambos jugadores no están en el juego.";
}

//Encontrar los pokemones activos
Expand Down Expand Up @@ -292,7 +293,9 @@ public string PlayerAttack(string attackerName, string defenderName, string move

//Penalizar el turno del jugador
Game game = GameList.FindGameByPlayerDisplayName(attackerName);
game.Turn.PenalizeTurn(attacker);
game.Turn.ChangeTurn();

game.CheckIfGameEnds();

// Construye el mensaje de resultado
return UserInterface.ShowMessageAttackOcurred(attackingPokemon, defendingPokemon, attacker, defender);
Expand Down
10 changes: 10 additions & 0 deletions src/Library/Domain/Domain/PokemonException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace ClassLibrary;

public class PokemonException: ApplicationException

{
public PokemonException(string message) : base(message)
{
//está intencionalmente en blanco
}
}
26 changes: 25 additions & 1 deletion src/Library/Library.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion test/LibraryTests/UserStoriesTests/UserStory4Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public void SetUp()
public void PlayerAttack_Works_Correctly()
{
// Ejecutar el ataque
string message = Facade.Instance.PlayerAttack(attacker, defender, move);
string message = Facade.Instance.PlayerAttack(attacker, move);

Assert.That(message, Does.Contain(
$"""
Expand Down
2 changes: 1 addition & 1 deletion test/LibraryTests/UserStoriesTests/UserStory6Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void Player_Attack_Each_Other()
Facade.Instance.ChoosePokemonAndMoveToAttack("Player2", "Llamarada", "Blaziken");

// Act
string result = Facade.Instance.PlayerAttack("Player1", "Player2", "Corte");
string result = Facade.Instance.PlayerAttack("Player1", "Corte");
string expected =" Jugador Player1 usa al Pokémon Mew que ataca con Corte a Blaziken de Player2";
// Assert
Assert.That(result, Is.EqualTo(expected));
Expand Down

0 comments on commit ea80880

Please sign in to comment.