public static int Desempata(Mao mao1, Jogo jogo1, Mao mao2, Jogo jogo2)
 {
     var sobraMao1 = mao1.Cartas.Where(x => !jogo1._cartas.Any(y => y.Valor == x.Valor));
     var sobraMao2 = mao2.Cartas.Where(x => !jogo2._cartas.Any(y => y.Valor == x.Valor));
     var descobreCartaAlta1 = DescobreCartaAlta(new Mao(sobraMao1));
     var descobreCartaAlta2 = DescobreCartaAlta(new Mao(sobraMao2));
     return descobreCartaAlta1 > descobreCartaAlta2 ? 1 : 2;
 }
 public void So_posso_ter_cinco_cartas()
 {
     var mao = new Mao();
     mao.AdicionarCarta(new Carta(TipoCarta.C1, TipoNaipe.C));
     mao.AdicionarCarta(new Carta(TipoCarta.C2, TipoNaipe.C));
     mao.AdicionarCarta(new Carta(TipoCarta.C3, TipoNaipe.C));
     mao.AdicionarCarta(new Carta(TipoCarta.C4, TipoNaipe.C));
     mao.AdicionarCarta(new Carta(TipoCarta.C5, TipoNaipe.C));
     mao.AdicionarCarta(new Carta(TipoCarta.C6, TipoNaipe.C));
 }
        public void Posso_descobrir_quadra()
        {
            var mao = new Mao();
            mao.AdicionarCarta(new Carta(TipoCarta.C1, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C3, TipoNaipe.H));
            mao.AdicionarCarta(new Carta(TipoCarta.C3, TipoNaipe.D));
            mao.AdicionarCarta(new Carta(TipoCarta.C3, TipoNaipe.S));
            mao.AdicionarCarta(new Carta(TipoCarta.C3, TipoNaipe.C));

            var tipoJogo = AvaliadorDeMao.Avalia(mao);

            Assert.AreEqual(TipoJogo.Quadra, tipoJogo);
        }
        public void Posso_descobrir_flush()
        {
            var mao = new Mao();
            mao.AdicionarCarta(new Carta(TipoCarta.C1, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C2, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C3, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C8, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C5, TipoNaipe.C));

            var tipoJogo = AvaliadorDeMao.Avalia(mao);

            Assert.AreEqual(TipoJogo.Flush, tipoJogo);
        }
        public void Posso_descobrir_dois_pares()
        {
            var mao = new Mao();
            mao.AdicionarCarta(new Carta(TipoCarta.C1, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C2, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C1, TipoNaipe.D));
            mao.AdicionarCarta(new Carta(TipoCarta.C5, TipoNaipe.D));
            mao.AdicionarCarta(new Carta(TipoCarta.C5, TipoNaipe.C));

            var tipoJogo = AvaliadorDeMao.Avalia(mao);

            Assert.AreEqual(TipoJogo.DoisPares, tipoJogo);
        }
        public void Posso_descobrir_a_carta_alta()
        {
            var mao = new Mao();
            mao.AdicionarCarta(new Carta(TipoCarta.C1, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C2, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C3, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C4, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C5, TipoNaipe.C));

            var maiorCarta = new Carta(TipoCarta.C5, TipoNaipe.C);

            var carta = AvaliadorDeMao.DescobreCartaAlta(mao);
            Assert.AreEqual(maiorCarta, carta);
        }
        public void Posso_descobri_o_vencedor_da_quinta_entrada()
        {
            var mao = new Mao();
            mao.AdicionarCarta(new Carta(TipoCarta.C2, TipoNaipe.H));
            mao.AdicionarCarta(new Carta(TipoCarta.C2, TipoNaipe.D));
            mao.AdicionarCarta(new Carta(TipoCarta.C4, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C4, TipoNaipe.D));
            mao.AdicionarCarta(new Carta(TipoCarta.C4, TipoNaipe.S));

            var mao2 = new Mao();
            mao2.AdicionarCarta(new Carta(TipoCarta.C3, TipoNaipe.C));
            mao2.AdicionarCarta(new Carta(TipoCarta.C3, TipoNaipe.D));
            mao2.AdicionarCarta(new Carta(TipoCarta.C3, TipoNaipe.S));
            mao2.AdicionarCarta(new Carta(TipoCarta.C9, TipoNaipe.S));
            mao2.AdicionarCarta(new Carta(TipoCarta.C9, TipoNaipe.D));

            var jogo = new JogoPoker(mao, mao2);
            int numeroMao = jogo.Vencedor();

            Assert.AreEqual(1, numeroMao);
        }
        public static TipoJogo Avalia(Mao mao)
        {
            if (TemRoyalFlush(mao.Cartas))
                return TipoJogo.RoyalFlush;
            if (TemSequenciaFlush(mao.Cartas))
                return TipoJogo.SequenciaFlush;
            if (TemQuadra(mao.Cartas))
                return TipoJogo.Quadra;
            if (TemFullHouse(mao.Cartas))
                return TipoJogo.FullHouse;
            if (TemFlush(mao.Cartas))
                return TipoJogo.Flush;
            if (TemSequencia(mao.Cartas))
                return TipoJogo.Sequencia;
            if (TemTrinca(mao.Cartas, out cartaDaTrinca))
                return TipoJogo.Trinca;
            if (TemDoisPares(mao.Cartas))
                return TipoJogo.DoisPares;
            if (TemUmPar(mao.Cartas))
                return TipoJogo.Par;

            return TipoJogo.CartaAlta;
        }
 public JogoPoker(Mao mao, Mao mao2)
 {
     _mao = mao;
     _mao2 = mao2;
 }
 public static Carta DescobreCartaAlta(Mao mao)
 {
     return mao.Cartas.OrderBy(car => car.Valor).Last();
 }
 public void Nao_posso_adicionar_carta_ja_existente()
 {
     var mao = new Mao();
     mao.AdicionarCarta(new Carta(TipoCarta.C1, TipoNaipe.C));
     mao.AdicionarCarta(new Carta(TipoCarta.C1, TipoNaipe.C));
 }
        public void Posso_descobrir_royal_flush()
        {
            var mao = new Mao();
            mao.AdicionarCarta(new Carta(TipoCarta.CA, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.CK, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.CQ, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.C10, TipoNaipe.C));
            mao.AdicionarCarta(new Carta(TipoCarta.CJ, TipoNaipe.C));

            var tipoJogo = AvaliadorDeMao.Avalia(mao);

            Assert.AreEqual(TipoJogo.RoyalFlush, tipoJogo);
        }