예제 #1
0
        // pomoci deskaCopy zkousim pozdeji legalnost mych tahu:
        public Deska ZkusZahratTah(Tah tah)
        {
            List <Pozice> seznamPozic = tah.GetSeznamPozic;
            Pozice        odkud       = null;
            Deska         deskaCopy   = cloneDJ();

            if (seznamPozic.Count() == 2)
            {
                Pozice kam;
                odkud = seznamPozic[0];
                if (deskaCopy.ProvedPosunKamene(odkud, kam = seznamPozic[1], tah))
                {
                    return(deskaCopy);
                }
                return(null);
            }

            foreach (Pozice kam in seznamPozic)
            {
                if (odkud != null && !deskaCopy.JePosunPreskokemKameneProtihrace(odkud, kam))
                {
                    return(null);
                }
                if (odkud != null)
                {
                    deskaCopy.ProvedPosunKamene(odkud, kam, tah);
                }
                odkud = kam;
            }
            return(deskaCopy);
        }
예제 #2
0
        public void PridejDoHistorie(Tah tah, bool kopie)
        {
            ObservableCollection <string> tahy          = new ObservableCollection <string>();
            ObservableCollection <string> stavajiciTahy = new ObservableCollection <string>();

            dispecer2 = MainWindow.GetDispecerHry();

            // Vypis preskocenych kamenu:
            string preskoceneKameny = "";

            foreach (Pozice pozice in tah.GetPreskoceneKameny)
            {
                preskoceneKameny += pozice.VratJakoText();
            }

            // muj oficialni seznam tahu v Historii tahu tvoreny ciste tridami Tah
            cistySeznamOdehranychTahu.Add(tah);
            SetPocetTahuCelkem = cistySeznamOdehranychTahu.Count();

            // tady v historii budu ukladat pocet tahu bez preskoku:
            int pocetBP = dispecer2.GetHra.GetPocetTahuBezPreskoku;

            int    aktualniIndexTahu = cistySeznamOdehranychTahu.Count();
            string jmenoHrace;
            Hrac   kdoJeNaTahu = dispecer2.GetHracNaTahu;
            Hrac   protiHrac   = dispecer2.VratProtihrace(kdoJeNaTahu);

            if (kopie == true)
            {
                jmenoHrace = protiHrac.GetJmeno;
            }
            else
            {
                jmenoHrace = kdoJeNaTahu.GetJmeno;
            }
            string jedenTah = aktualniIndexTahu + ".tah " + jmenoHrace + " " + tah.ToString();

            if (preskoceneKameny != "")
            {
                int pulka = preskoceneKameny.Length / 2;
                if (dispecer2.GetHracNaTahu.GetJePocitacovyHrac)
                {
                    preskoceneKameny = preskoceneKameny.Substring(0, pulka);
                }
                jedenTah += " odstraněno " + preskoceneKameny.ToUpper();
            }

            tahy = GetTahyVypsaneDetailne;
            tahy.Add(jedenTah);
            SetTahyVypsaneDetilane = tahy;
            VyvolejZmenu("TahyDoH");
            VyvolejZmenu("GetTahyVypsaneDetailne");
        }
예제 #3
0
        public void OdeberZHistorie(string tahTextove, Tah tah)
        {
            ObservableCollection <string> tahyZHistorieTahu = new ObservableCollection <string>();

            tahyZHistorieTahu = GetTahyVypsaneDetailne;

            if (tahyZHistorieTahu.Contains(tahTextove))
            {
                tahyZHistorieTahu.Remove(tahTextove);
                cistySeznamOdehranychTahu.Remove(tah);
            }
        }
예제 #4
0
 // Test na to, zda-li hrac hraje svymi kameny
 // metodu volam prostrednictvim dispecera, tam mam vytvoreny a obslouzeny instance trid Hrac (this)
 public bool HrajeHracSvymKamenem(Tah tah)
 {
     if (dispecerHry.GetHrac1.Equals(this))
     {
         return(VratTypKameneHrace() == dispecerHry.GetDeska.VratObsahPole(tah.GetSeznamPozic.First()));
     }
     if (dispecerHry.GetHrac2.Equals(this))
     {
         return(VratTypKameneHrace() == dispecerHry.GetDeska.VratObsahPole(tah.GetSeznamPozic.First()));
     }
     else
     {
         throw new Exception("Hrac " + GetJmeno + " neni evidovany v dispecerovi hry !");
     }
 }
예제 #5
0
        // Zahraj tah:
        // Pomocna kontrola, kde se mi stala chyba
        public bool ZahrajTah(Tah tah)
        {
            List <Pozice> seznamPozic    = tah.GetSeznamPozic;
            Pozice        odkud          = null;
            List <Pozice> odehranePozice = new List <Pozice>();

            foreach (Pozice kam in seznamPozic)
            {
                odehranePozice.Add(kam);
                if (odkud != null && !ProvedPosunKamene(odkud, kam, tah))
                {
                    MessageBox.Show("VYJIMKA: Metoda ProvedPosunKamene(odkud, kam) nebyla provedena !");
                    MessageBox.Show("ZahrajTah-vstupni parametr tah byl: " + tah.VratJakoText());

                    throw new Exception("metoda ZahrajTah byla zavolana pro neplatny tah !");
                }
                odkud = kam;
            }
            return(true);
        }
예제 #6
0
        // pouziti pozdeji v metodach GenerujTahy, GenerujNejlepsiTah
        public bool vratTahZpet(Tah tah)
        {
            Pozice        odkud       = null;
            List <Pozice> seznamPozic = new List <Pozice>(tah.GetSeznamPozic);

            seznamPozic.Reverse();
            List <Pozice> preskoceneKameny = new List <Pozice>(tah.GetPreskoceneKameny);

            foreach (Pozice kam in seznamPozic)
            {
                if (odkud != null)
                {
                    Pozice preskocena = new Pozice();

                    if (preskoceneKameny.Count() == 0)
                    {
                        preskocena = null;
                    }
                    else
                    {
                        preskocena = preskoceneKameny.Last();
                        int index = preskoceneKameny.Count() - 1;
                        preskoceneKameny.RemoveAt(index);
                    }
                    if (!VratZpetPosunKamene(odkud, kam, preskocena))
                    {
                        MessageBox.Show("VYJIMKA: metoda vratTahZpet byla zavolana pro neplatny tah!");
                        MessageBox.Show("vratTahZpet Odkud: " + odkud.VratJakoText() + "vratTahZpet Kam: " + kam.VratJakoText() + "vratTahZpet preskocena: " + preskocena);

                        throw new Exception("metoda vratTahZpet byla zavolana pro neplatny tah!");
                    }
                }
                odkud = kam;
            }
            return(true);
        }
예제 #7
0
        // Prakticky presun, vymazani kamenu z desky, cili pole jako takove
        // meni hodnoty [8,8] svych prvku, muze to byt vzdy jen jedna ze tri hodnot:
        // 0 = volno, 1 = bily hrac, 2 = cerny hrac
        public bool ProvedPosunKamene(Pozice odkud, Pozice kam, Tah tah)
        {
            int odkudKamen = hraciDeska[odkud.GetVyska, odkud.GetSirka];

            if (JdeOLegalniPosunBezPreskoku(odkud, kam))
            {
                hraciDeska[kam.GetVyska, kam.GetSirka]     = odkudKamen;
                hraciDeska[odkud.GetVyska, odkud.GetSirka] = 0;
                return(true);
            }
            if (JePosunPreskokemKameneProtihrace(odkud, kam))
            {
                Pozice preskakovanyKamen = VratPoziciMeziPosunem(odkud, kam);
                hraciDeska[kam.GetVyska, kam.GetSirka]     = odkudKamen;
                hraciDeska[odkud.GetVyska, odkud.GetSirka] = 0;
                hraciDeska[preskakovanyKamen.GetVyska, preskakovanyKamen.GetSirka] = 0;
                if (tah != null)
                {
                    tah.PridejPreskocenyKamen(preskakovanyKamen); // ve tride Tah je slot na preskocene kameny
                }
                return(true);
            }
            return(false);
        }
예제 #8
0
 public void PridejTah(Tah tah)
 {
     tahy.Add(tah);
 }
예제 #9
0
 // Metoda na redo
 public void ProvedPosunutiTahuVpred(Tah tah)
 {
     hra.PridejTah(tah);
     deska.ZahrajTah(tah);
     hra.AktualizujPocetTahuBezPreskoku();
 }