示例#1
0
        public MainWindow()
        {
            InitializeComponent();

            MAIN_WINDOW = this;
            TABLE       = new TABLE_CLASS();

            LB = LB_messages;
        }
示例#2
0
        public int PLAY(TABLE_CLASS t, Giocatore gg)
        {
            int id_carta = 0;

            int punti_chiamante = 0;

            int chiamata = t.partita.chiamata;

            int punti_mancanti = 0;

            #region punti attuali chiamante

            Dictionary <Giocatore, int> dict = new Dictionary <Giocatore, int>();

            DC_partita p = t.partita;

            foreach (var g in t.giocatori)
            {
                dict.Add(g, 0);
            }

            foreach (var m in p.mani)
            {
                if (m.carte.Count > 0)
                {
                    var rx = m.ValutaMano(p.briscola);
                    dict[rx.vincente] += rx.punti;
                }
            }

            punti_chiamante = dict[p.chiamante];

            #endregion

            punti_mancanti = chiamata - punti_chiamante;

            int mani_mancanti = p.mani.Count - 1;

            Giocatore comp = null;

            #region il compagno e' uscito alla scoperta ?

            foreach (var m in p.mani)
            {
                foreach (var carta in m.carte)
                {
                    if (carta.carta == p.carta_chiamata)
                    {
                        comp = carta.giocatore;
                        break;
                    }
                }
            }

            #endregion

            if (comp != null)
            {
                punti_mancanti = punti_mancanti - dict[comp];
            }

            var briscole_in_mano = (from ci in gg.carte_in_mano
                                    where ci.seme == p.briscola
                                    orderby ci.potere descending
                                    select ci).ToList();

            var carichi_in_mano = (from ci in gg.carte_in_mano
                                   where ci.seme != p.briscola &&
                                   ci.potere > 8
                                   orderby ci.potere descending
                                   select ci).ToList();

            var punti_in_mano = (from ci in gg.carte_in_mano
                                 where ci.seme != p.briscola &&
                                 ci.potere <= 8 && ci.potere >= 6
                                 orderby ci.potere descending
                                 select ci).ToList();

            var lisci_in_mano = (from ci in gg.carte_in_mano
                                 where ci.seme != p.briscola &&
                                 ci.potere < 6
                                 orderby ci.potere descending
                                 select ci).ToList();

            var briscole_passate = (from mp in p.mani
                                    from cg in mp.carte
                                    where cg.carta.seme == p.briscola
                                    orderby cg.carta.potere descending
                                    select cg.carta).ToList();

            bool carta_chiamata_passata = briscole_passate.Contains(p.carta_chiamata);

            if (punti_mancanti <= 0)
            {
                // TENTATIVO DI CAPPOTTO
            }
            else
            {
                #region se ho in mano tutte le briscole rimaste

                if (briscole_in_mano.Count > 0)
                {
                    if ((briscole_in_mano.Count + briscole_passate.Count == 10) ||
                        ((briscole_in_mano.Count + briscole_passate.Count == 9) && (!carta_chiamata_passata)))
                    {
                        if ((briscole_in_mano.Count >= mani_mancanti) ||
                            ((briscole_in_mano.Count == mani_mancanti - 1) && (!carta_chiamata_passata)))
                        {
                            id_carta = gg.carte_in_mano.IndexOf(briscole_in_mano[0]);
                        }
                    }
                }

                #endregion

                // se sono l'ultimo a giocare
                else if (p.mano_corrente.turno.Count == 0)
                {
                    // se il mio compagno ha giocato
                    if (comp != null)
                    {
                        var rx_mano_attuale = p.mano_corrente.ValutaMano(p.briscola);

                        if (rx_mano_attuale.vincente == comp)
                        {
                            if (carichi_in_mano.Count > 0)
                            {
                                id_carta = gg.carte_in_mano.IndexOf(carichi_in_mano[0]);
                            }
                            else if (punti_in_mano.Count > 0)
                            {
                                id_carta = gg.carte_in_mano.IndexOf(punti_in_mano[0]);
                            }
                            else if (lisci_in_mano.Count > 0)
                            {
                                id_carta = gg.carte_in_mano.IndexOf(lisci_in_mano[0]);
                            }
                            else if (briscole_in_mano.Count > 0)
                            {
                                id_carta = gg.carte_in_mano.IndexOf(briscole_in_mano.Last());
                            }
                        }
                    }
                }

                // momentaneamente cerco di prendere
                else
                {
                    List <Carta> rxx = new List <Carta>();
                    var          rx  = p.mano_corrente.ValutaMano(p.briscola);

                    Carta c = rx.carta;

                    foreach (var cm in gg.carte_in_mano)
                    {
                        if ((cm.seme == c.seme) && (cm.potere > c.potere))
                        {
                            rxx.Add(cm);
                        }
                    }

                    if (c.seme != p.briscola)
                    {
                        foreach (var cm in gg.carte_in_mano)
                        {
                            if (cm.seme == p.briscola)
                            {
                                rxx.Add(cm);
                            }
                        }
                    }

                    if (rxx.Count > 0)
                    {
                        var carta_minima_no_briscola = (from cg in rxx
                                                        let min = rxx.Min(ccg => ccg.potere)
                                                                  where cg.potere == min && cg.seme != p.briscola
                                                                  select cg).ToList();

                        if (carta_minima_no_briscola.Count > 0)
                        {
                            id_carta = gg.carte_in_mano.IndexOf(carta_minima_no_briscola[0]);
                        }
                        else
                        {
                            var carta_minima_briscola = (from cg in rxx
                                                         let min = rxx.Min(ccg => ccg.potere)
                                                                   where cg.potere == min && cg.seme == p.briscola
                                                                   select cg).ToList();

                            if (carta_minima_briscola.Count > 0)
                            {
                                id_carta = gg.carte_in_mano.IndexOf(carta_minima_briscola[0]);
                            }
                        }
                    }
                    else
                    {
                        if (lisci_in_mano.Count > 0)
                        {
                            id_carta = gg.carte_in_mano.IndexOf(lisci_in_mano[0]);
                        }
                        else if (punti_in_mano.Count > 0)
                        {
                            id_carta = gg.carte_in_mano.IndexOf(punti_in_mano[0]);
                        }
                        else if (carichi_in_mano.Count > 0)
                        {
                            id_carta = gg.carte_in_mano.IndexOf(carichi_in_mano[0]);
                        }
                        else if (briscole_in_mano.Count > 0)
                        {
                            id_carta = gg.carte_in_mano.IndexOf(briscole_in_mano.Last());
                        }
                    }
                }
            }

            return(id_carta);
        }
示例#3
0
        public int PLAY(TABLE_CLASS t, Giocatore gg)
        {
            #region INIT

            int id_carta = 0;

            int punti_chiamante = 0;

            int chiamata = t.partita.chiamata;

            int punti_mancanti = 0;

            #region punti attuali chiamante

            Dictionary <Giocatore, int> dict = new Dictionary <Giocatore, int>();

            DC_partita p = t.partita;

            foreach (var g in t.giocatori)
            {
                dict.Add(g, 0);
            }

            foreach (var m in p.mani)
            {
                if (m.carte.Count > 0)
                {
                    var rx = m.ValutaMano(p.briscola);
                    dict[rx.vincente] += rx.punti;
                }
            }

            punti_chiamante = p.GetPunti_CHIAMANTE();

            #endregion

            punti_mancanti = chiamata - punti_chiamante;

            int mani_mancanti = p.mani.Count - 1;

            Giocatore compagno = p.GetCompagno();

            if (compagno != null)
            {
                punti_mancanti = punti_mancanti - dict[compagno];
            }

            var briscole_in_mano = (from ci in gg.carte_in_mano
                                    where ci.seme == p.briscola
                                    orderby ci.potere descending
                                    select ci).ToList();

            var carichi_in_mano = (from ci in gg.carte_in_mano
                                   where ci.seme != p.briscola &&
                                   ci.potere > 8
                                   orderby ci.potere descending
                                   select ci).ToList();

            var punti_in_mano = (from ci in gg.carte_in_mano
                                 where ci.seme != p.briscola &&
                                 ci.potere <= 8 && ci.potere >= 6
                                 orderby ci.potere descending
                                 select ci).ToList();

            var lisci_in_mano = (from ci in gg.carte_in_mano
                                 where ci.seme != p.briscola &&
                                 ci.potere < 6
                                 orderby ci.potere descending
                                 select ci).ToList();

            var briscole_passate = (from mp in p.mani
                                    from cg in mp.carte
                                    where cg.carta.seme == p.briscola
                                    orderby cg.carta.potere descending
                                    select cg.carta).ToList();

            bool carta_chiamata_passata = briscole_passate.Contains(p.carta_chiamata);

            #endregion

            #region GIOCO IN BASE A POSIZIONE E CARTE A TERRA

            #region GIOCO DA ULTIMO

            if (p.mano_corrente.SonoUltimo())
            {
                var situazione_attuale = p.mano_corrente.ValutaMano(p.briscola);

                #region SO GIA' CHI E' IL COMPAGNO

                if (compagno != null)
                {
                    if ((situazione_attuale.vincente == p.chiamante) || (situazione_attuale.vincente == compagno))
                    {
                        #region POSSO PRENDERE ?

                        var carte = gg.PossoPrendereSuperando();

                        if (carte.Count > 0)
                        {
                            id_carta = gg.carte_in_mano.IndexOf(carte[0]);
                        }
                        else
                        {
                            carte = gg.PossoPrendereConBriscola();

                            if (carte.Count > 0)
                            {
                                int punti_in_gioco    = situazione_attuale.punti;
                                int punti_dei_tre     = p.GetPunti_TRE();
                                var briscola_maggiore = carte[0];

                                int punti_3_ipotetici = punti_in_gioco + punti_dei_tre + briscola_maggiore.punti;
                                int soglia_vittoria   = 120 - p.chiamata;

                                var briscole_esplicite = p.GetBriscoleEspliciteNonPassate_DUE();

                                if ((punti_in_gioco >= 10) || (punti_3_ipotetici > soglia_vittoria) || (briscole_esplicite.Count >= (8 - p.mani.Count)))
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(carte[0]);
                                }
                                else // NON VOGLIO PRENDERE QUINDI CERCO DI DARE MENO PUNTI POSSIBILI
                                {
                                    if (lisci_in_mano.Count > 0)
                                    {
                                        id_carta = gg.carte_in_mano.IndexOf(lisci_in_mano[0]);
                                    }
                                    else if (punti_in_mano.Count > 0)
                                    {
                                        id_carta = gg.carte_in_mano.IndexOf(punti_in_mano[0]);
                                    }
                                    else if (carichi_in_mano.Count > 0)
                                    {
                                        id_carta = gg.carte_in_mano.IndexOf(carichi_in_mano[0]);
                                    }
                                    else if (briscole_in_mano.Count > 0)
                                    {
                                        id_carta = gg.carte_in_mano.IndexOf(briscole_in_mano.Last());
                                    }
                                }
                            }
                            else // NON POSSO PRENDERE QUINDI CERCO DI DARE MENO PUNTI POSSIBILI
                            {
                                if (lisci_in_mano.Count > 0)
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(lisci_in_mano[0]);
                                }
                                else if (punti_in_mano.Count > 0)
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(punti_in_mano[0]);
                                }
                                else if (carichi_in_mano.Count > 0)
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(carichi_in_mano[0]);
                                }
                                else if (briscole_in_mano.Count > 0)
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(briscole_in_mano.Last());
                                }
                            }
                        }

                        #endregion
                    }
                    else
                    {
                        if (carichi_in_mano.Count > 0)
                        {
                            id_carta = gg.carte_in_mano.IndexOf(carichi_in_mano[0]);
                        }
                        else if (punti_in_mano.Count > 0)
                        {
                            id_carta = gg.carte_in_mano.IndexOf(punti_in_mano[0]);
                        }
                        else if (lisci_in_mano.Count > 0)
                        {
                            id_carta = gg.carte_in_mano.IndexOf(lisci_in_mano[0]);
                        }
                        else if (briscole_in_mano.Count > 0)
                        {
                            id_carta = gg.carte_in_mano.IndexOf(briscole_in_mano.Last());
                        }
                    }
                }

                #endregion

                #region IL COMPAGNO NON E' ANCORA NOTO

                else
                {
                    if (situazione_attuale.vincente == p.chiamante)
                    {
                        #region POSSO PRENDERE ?

                        var carte = gg.PossoPrendereSuperando();

                        if (carte.Count > 0)
                        {
                            id_carta = gg.carte_in_mano.IndexOf(carte[0]);
                        }
                        else
                        {
                            carte = gg.PossoPrendereConBriscola();

                            if (carte.Count > 0)
                            {
                                int punti_in_gioco    = situazione_attuale.punti;
                                int punti_dei_tre     = p.GetPunti_TRE();
                                var briscola_maggiore = carte[0];

                                int punti_3_ipotetici = punti_in_gioco + punti_dei_tre + briscola_maggiore.punti;
                                int soglia_vittoria   = 120 - p.chiamata;

                                var briscole_esplicite = p.GetBriscoleEspliciteNonPassate_DUE();

                                if ((punti_in_gioco >= 10) || (punti_3_ipotetici > soglia_vittoria) || (briscole_esplicite.Count >= (8 - p.mani.Count)))
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(carte[0]);
                                }
                                else // NON VOGLIO PRENDERE QUINDI CERCO DI DARE MENO PUNTI POSSIBILI
                                {
                                    if (lisci_in_mano.Count > 0)
                                    {
                                        id_carta = gg.carte_in_mano.IndexOf(lisci_in_mano[0]);
                                    }
                                    else if (punti_in_mano.Count > 0)
                                    {
                                        id_carta = gg.carte_in_mano.IndexOf(punti_in_mano[0]);
                                    }
                                    else if (carichi_in_mano.Count > 0)
                                    {
                                        id_carta = gg.carte_in_mano.IndexOf(carichi_in_mano[0]);
                                    }
                                    else if (briscole_in_mano.Count > 0)
                                    {
                                        id_carta = gg.carte_in_mano.IndexOf(briscole_in_mano.Last());
                                    }
                                }
                            }
                            else // NON POSSO PRENDERE QUINDI CERCO DI DARE MENO PUNTI POSSIBILI
                            {
                                if (lisci_in_mano.Count > 0)
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(lisci_in_mano[0]);
                                }
                                else if (punti_in_mano.Count > 0)
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(punti_in_mano[0]);
                                }
                                else if (carichi_in_mano.Count > 0)
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(carichi_in_mano[0]);
                                }
                                else if (briscole_in_mano.Count > 0)
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(briscole_in_mano.Last());
                                }
                            }
                        }

                        #endregion
                    }
                    else
                    {
                        #region POSSO PRENDERE ?

                        var carte = gg.PossoPrendereSuperando();

                        if (carte.Count > 0)
                        {
                            id_carta = gg.carte_in_mano.IndexOf(carte[0]);
                        }
                        else
                        {
                            carte = gg.PossoPrendereConBriscola();

                            if (carte.Count > 0)
                            {
                                int punti_in_gioco    = situazione_attuale.punti;
                                int punti_dei_tre     = p.GetPunti_TRE();
                                var briscola_maggiore = carte[0];

                                int punti_3_ipotetici = punti_in_gioco + punti_dei_tre + briscola_maggiore.punti;
                                int soglia_vittoria   = 120 - p.chiamata;

                                var briscole_esplicite = p.GetBriscoleEspliciteNonPassate_DUE();

                                if ((punti_in_gioco >= 10) || (punti_3_ipotetici > soglia_vittoria) || (briscole_esplicite.Count >= (8 - p.mani.Count)))
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(carte[0]);
                                }
                                else // NON VOGLIO PRENDERE QUINDI CERCO DI DARE MENO PUNTI POSSIBILI
                                {
                                    if (punti_in_mano.Count > 0)
                                    {
                                        id_carta = gg.carte_in_mano.IndexOf(punti_in_mano[0]);
                                    }
                                    else if (lisci_in_mano.Count > 0)
                                    {
                                        id_carta = gg.carte_in_mano.IndexOf(lisci_in_mano[0]);
                                    }
                                    else if (carichi_in_mano.Count > 0)
                                    {
                                        id_carta = gg.carte_in_mano.IndexOf(carichi_in_mano[0]);
                                    }
                                    else if (briscole_in_mano.Count > 0)
                                    {
                                        id_carta = gg.carte_in_mano.IndexOf(briscole_in_mano.Last());
                                    }
                                }
                            }
                            else // NON POSSO PRENDERE QUINDI CERCO DI DARE MENO PUNTI POSSIBILI
                            {
                                if (lisci_in_mano.Count > 0)
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(lisci_in_mano[0]);
                                }
                                else if (punti_in_mano.Count > 0)
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(punti_in_mano[0]);
                                }
                                else if (carichi_in_mano.Count > 0)
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(carichi_in_mano[0]);
                                }
                                else if (briscole_in_mano.Count > 0)
                                {
                                    id_carta = gg.carte_in_mano.IndexOf(briscole_in_mano.Last());
                                }
                            }
                        }

                        #endregion
                    }
                }

                #endregion
            }

            #endregion

            #region SONO IL PRIMO

            else if (p.mano_corrente.SonoPrimo())
            {
                if (lisci_in_mano.Count > 0)
                {
                    id_carta = gg.carte_in_mano.IndexOf(lisci_in_mano[0]);
                }
                else if (punti_in_mano.Count > 0)
                {
                    id_carta = gg.carte_in_mano.IndexOf(punti_in_mano[0]);
                }
                else if (carichi_in_mano.Count > 0)
                {
                    id_carta = gg.carte_in_mano.IndexOf(carichi_in_mano[0]);
                }
                else if (briscole_in_mano.Count > 0)
                {
                    id_carta = gg.carte_in_mano.IndexOf(briscole_in_mano.Last());
                }
            }

            #endregion

            #region GIOCO IN MEZZO

            else // CODICE PROVVISORIO
            {
                if (lisci_in_mano.Count > 0)
                {
                    id_carta = gg.carte_in_mano.IndexOf(lisci_in_mano[0]);
                }
                else if (punti_in_mano.Count > 0)
                {
                    id_carta = gg.carte_in_mano.IndexOf(punti_in_mano[0]);
                }
                else if (carichi_in_mano.Count > 0)
                {
                    id_carta = gg.carte_in_mano.IndexOf(carichi_in_mano[0]);
                }
                else if (briscole_in_mano.Count > 0)
                {
                    id_carta = gg.carte_in_mano.IndexOf(briscole_in_mano.Last());
                }
            }

            #endregion

            #endregion



            return(id_carta);
        }