diff --git a/Poker12.Core.Test/CartaTest.cs b/Poker12.Core.Test/CartaTest.cs index 840c111..92e830d 100644 --- a/Poker12.Core.Test/CartaTest.cs +++ b/Poker12.Core.Test/CartaTest.cs @@ -1,9 +1,9 @@ namespace Poker12.Core.Test; public class CartaTest { - Carta _seisTrebol = new Carta(EPalo.Trebol, EValor.Seis); + Carta _seisTrebol = new(EPalo.Trebol, EValor.Seis); [Fact] public void ToStringOK() - => Assert.Equal("Seis Trebol", _seisTrebol.ToString()); + => Assert.Equal("Carta { Palo = Trebol, Valor = Seis }", _seisTrebol.ToString()); } diff --git a/Poker12.Core.Test/Jugadas/CartaAltaTest.cs b/Poker12.Core.Test/Jugadas/CartaAltaTest.cs new file mode 100644 index 0000000..537514a --- /dev/null +++ b/Poker12.Core.Test/Jugadas/CartaAltaTest.cs @@ -0,0 +1,47 @@ +using Poker12.Core.Jugadas; + +namespace Poker12.Core.Test.Jugadas; +public class CartaAltaTest +{ + private IJugada _cartaAlta; + public CartaAltaTest() => _cartaAlta = new CartaAlta(); + + [Fact] + public void FallaPorJugadaSinCartas() + { + var jugada = new List(); + + Assert.Throws(() => _cartaAlta.Aplicar(jugada)); + } + + [Fact] + public void PruebaConAS() + { + var jugada = new List() + { + new(EPalo.Corazon, EValor.Diez), + new(EPalo.Picas, EValor.As), + new(EPalo.Corazon, EValor.Tres) + }; + + var resultado = _cartaAlta.Aplicar(jugada); + + Assert.Equal(14, resultado.Valor); + } + + [Theory] + [InlineData(EValor.Dos)] + [InlineData(EValor.Cinco)] + [InlineData(EValor.J)] + public void CasoTrivialUnaCarta(EValor valor) + { + var jugada = new List() + { + new(EPalo.Corazon, valor) + }; + + var resultado = _cartaAlta.Aplicar(jugada); + + Assert.Equal((byte)valor, resultado.Valor); + } +} \ No newline at end of file diff --git a/Poker12.Core/Jugadas/CartaAlta.cs b/Poker12.Core/Jugadas/CartaAlta.cs new file mode 100644 index 0000000..8ac9b79 --- /dev/null +++ b/Poker12.Core/Jugadas/CartaAlta.cs @@ -0,0 +1,19 @@ +namespace Poker12.Core.Jugadas; +public class CartaAlta : IJugada +{ + public string Nombre => "Carta Alta"; + public byte Prioridad => 10; + public Resultado Aplicar(List cartas) + { + if (cartas.Count == 0) + throw new ArgumentException("No hay cartas"); + + var ordenadasPorValor = cartas.OrderBy(c => c.Valor); + + var valor = ordenadasPorValor.First().Valor == EValor.As ? + (byte)14 : // Aca use el valor 'Alto' del As + (byte)ordenadasPorValor.Last().Valor; // Como estan ordenadas, la ultima es la mayor + + return new Resultado(Prioridad, valor); + } +} diff --git a/Poker12.Core/Jugadas/IJugada.cs b/Poker12.Core/Jugadas/IJugada.cs index ea8a8a9..14eaeab 100644 --- a/Poker12.Core/Jugadas/IJugada.cs +++ b/Poker12.Core/Jugadas/IJugada.cs @@ -1,7 +1,14 @@ namespace Poker12.Core.Jugadas; +/// +/// Esta estructura, representa el resultado de aplicar una Jugada a una colección de cartas +/// +/// Representa la importancia de la jugada, en base 1 desde Escalera Real en adelante. +/// Si la jugada no se puede aplicar vale 0, caso contrario un valor mayor. +public readonly record struct Resultado(byte Prioridad, byte Valor = 0); + public interface IJugada { public string Nombre { get; } - public byte? Valor { get; } - public bool PuedeAplicar (List cartas); -} + public byte Prioridad { get; } + public Resultado Aplicar (List cartas); +} \ No newline at end of file