예제 #1
0
        /// <summary>
        /// Vrací všechny (i násobné) skoky jednoho obránce.
        /// </summary>
        private static Skoky VsechnySkoky(Pozice souradniceObrance, HraciDeska hraciDeska)
        {
            List<Tah> obrancovySkoky;

            Skoky skok = new Skoky();
            skok.odkud = souradniceObrance;
            skok.skoky = null;

            obrancovySkoky = KamMuzeObranceSkocit(souradniceObrance, hraciDeska);

            if(obrancovySkoky.Count != 0)
            {
                skok.skoky = new List<Skoky>();

                foreach(Tah tah in obrancovySkoky)
                {
                    HraciDeska novaHraciDeska;
                    novaHraciDeska = hraciDeska.Copy();
                    // novaHraciDeska = (HraciDeska) hraciDeska.Clone();
                    novaHraciDeska.Tahni(tah);
                    novaHraciDeska.OdstranPreskoceneKameny(tah);

                    Skoky novySkok = new Skoky(tah.seznamTahu[1], null);
                    novySkok.deska = novaHraciDeska;
                    skok.skoky.Add(novySkok);
                }

                HelpSkoky(skok);
            }

            return skok;
        }
예제 #2
0
        /// <summary>
        /// Serializuje (linearizuje) strom skoků do seznamu (listu).
        /// </summary>
        private static List<Tah> Serializace(Skoky skok)
        {
            List<Tah> serializovaneSkoky = new List<Tah>();

            while(true)
            {
                try
                {
                    Tah t = SerializaceSkoku(skok);
                    serializovaneSkoky.Add(t);
                }
                catch
                {
                    break;
                }
            }

            return serializovaneSkoky;
        }
예제 #3
0
        /// <summary>
        /// Serializuje (linearizuje) jednu větev stromu do seznamu (listu).
        /// </summary>
        private static Tah SerializaceSkoku(Skoky skok)
        {
            Tah tah = new Tah();
            Skoky pomoc = null;
            List<Skoky> uloziste = new List<Skoky>();

            if(skok.skoky == null || skok.skoky.Count == 0)
                throw new Exception("Konec cyklu");

            while(true)
            {
                pomoc = skok;
                //tah.kam = skok.odkud;
                tah.seznamTahu.Add(skok.odkud);
                uloziste.Add(skok);

                if(skok.skoky != null && skok.skoky.Count > 0)
                    skok = skok.skoky[0];
                else
                    break;
            }

            if(uloziste.Count > 1)
            {
                int index = uloziste.Count - 2;

                if(uloziste[index].skoky.Count == 0)
                    uloziste[index].skoky = null;
                else
                    uloziste[index].skoky.Remove(uloziste[index].skoky[0]);
            }

            /*if(pomoc.skoky != null)
                pomoc.skoky.Remove(pomoc.skoky[0]);
            else if(pomoc.skoky.Count == 0)
                pomoc.skoky = null;*/

            return tah;
        }
예제 #4
0
        /// <summary>
        /// Pomocná funkce pro výpočet všech skoků jednoho obránce.
        /// </summary>
        private static Skoky HelpSkoky(Skoky skok)
        {
            List<Tah> obrancovySkoky;

            if(skok.skoky != null)
            {
                foreach(Skoky s in skok.skoky)
                {
                    obrancovySkoky = KamMuzeObranceSkocit(s.odkud, s.deska);

                    if(obrancovySkoky.Count != 0)
                    {
                        s.skoky = new List<Skoky>();

                        foreach(Tah tah in obrancovySkoky)
                        {
                            HraciDeska novaHraciDeska;
                            novaHraciDeska = s.deska.Copy();
                            // novaHraciDeska = (HraciDeska) s.deska.Clone();
                            novaHraciDeska.Tahni(tah);
                            novaHraciDeska.OdstranPreskoceneKameny(tah);

                            Skoky novySkok = new Skoky(tah.seznamTahu[1], null);
                            novySkok.deska = novaHraciDeska;
                            s.skoky.Add(novySkok);
                        }
                    }

                    HelpSkoky(s);
                }
            }

            return skok;
        }