Ejemplo n.º 1
0
        /// <summary>
        /// Vrací všechny platné tahy pro zadanou pozici a pro zadaného hráče.
        /// </summary>
        public static List<Tah> VratPlatneTahy(Pozice pole, Manazer.StavPole hrac, HraciDeska hraciDeska)
        {
            if(hraciDeska.Hrac(pole) == hrac)
                return VratPlatneTahy(pole.Radek, pole.Sloupec, hrac, hraciDeska);

            return new List<Tah>();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Statická funkce převádějící stringové souřadnice do objektu Pozice
        /// </summary>
        public static Pozice StringNaSouradnice(string souradnice)
        {
            Pozice pole;
            int radek, sloupec;

            radek = Int32.Parse(souradnice.Remove(0, 1)) - 1;
            sloupec = (int)Enum.Parse(typeof(Prikazy.Souradnice), souradnice.Remove(1));

            pole = new Pozice(radek, sloupec);
            return pole;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Zvýrazní políčko, přes které zrovna přejedeme myší.
        /// </summary>
        private void Platno_MouseMove(object sender, MouseEventArgs e)
        {
            if(ManazerHry.KonecHry)
                return;

            Pozice HoverPozice = VratPoziciNaHraciDesce(e.X, e.Y);

            if(HoverPozice != null)
            {
                if(HraciDeska.Rohova(HoverPozice.Radek, HoverPozice.Sloupec))
                    return;

                // Status.Text = HoverPozice.ToString();
            }

            if(HoverPozice != MouseHoverPozice)
            {
                MouseHoverPozice = HoverPozice;
                Platno.Invalidate();
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Hlavní metoda, která zajišťuje dění poté, co se klikne na hrací desku.
        /// </summary>
        private void Platno_MouseClick(object sender, MouseEventArgs e)
        {
            // Jestliže není hra spuštěna, nebudeme na kliknutí vůbec reagovat
            if (ManazerHry.KonecHry || ManazerHry.DvaPocitace)
                return;

            // Jestli jen potvrzujeme vícenásobný skok, skočíme
            if(e.Button == MouseButtons.Left && VicenasobnySkok)
            {
                VicenasobnySkok = false;
                ProvedTah();
            }

            Pozice Pozice = VratPoziciNaHraciDesce(e.X, e.Y);

            // Jestliže jsme klikli mimo desku, jen resetujeme všechny uložené věci
            // Anebo ne
            if(Pozice == null || HraciDeska.Rohova(Pozice.Radek, Pozice.Sloupec))
            {
                /*AktivniPozice = null;
                PresunKamene = false;*/
                AktualizujGUI();
                return;
            }

            // Pokud už máme nastavené obránce, můžeme vytvářet normální tahy
            if (ManazerHry.NastaveniObranci)
            {
                // Už jsme klikli na kámen, se kterým budeme táhnout?
                if (PresunKamene)
                {
                    // Pokud jsme vybrali kámen a pak klikli na další kámen,
                    // dáme jako výchozí kámen ten druhý.
                    if(Manazer.Deska.Hrac(Pozice) == ManazerHry.hracNaTahu)
                    {
                        PresunKamene = true;
                        NactenePozice.Clear();
                        NactenePozice.Add((Pozice) Pozice.Clone());
                        AktivniPozice = Pozice;
                        AktualizujGUI();

                        return;
                    }

                    // Provádíme jednoduchý skok či tah?
                    // Nebo je na tahu útočník, který stejně skákat nemůže?
                    if(e.Button == MouseButtons.Left || ManazerHry.hracNaTahu == Manazer.StavPole.utok)
                    {
                        if(!VicenasobnySkok)
                            NactenePozice.Add((Pozice) Pozice.Clone());

                        ProvedTah();
                    }
                    // Provádíme vícenásobný skok?
                    else if(e.Button == MouseButtons.Right)
                    {
                        VicenasobnySkok = true;
                        NactenePozice.Add((Pozice) Pozice.Clone());
                    }
                }
                // Jestliže nemáme vybraný žádný kámen, pokusíme se nějaký vybrat
                else
                {
                    if(Manazer.Deska.Hrac(Pozice) == ManazerHry.hracNaTahu)
                    {
                        PresunKamene = true;
                        NactenePozice.Clear();
                        NactenePozice.Add((Pozice) Pozice.Clone());
                        AktivniPozice = Pozice;
                    }
                }
            }
            // Pokud nejsou nastavení obránci, zkusíme je nastavit
            else
            {
                try
                {
                    ManazerHry.NastavObrance(Pozice);
                    ZobrazHraceNaRade();
                    if (ManazerHry.NastaveniObranci)
                        if (ManazerHry.JePocitacNaTahu)
                            ManazerHry.Tahni();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

            AktualizujGUI();
        }
Ejemplo n.º 5
0
 private void ObnovaPoZpetVpredTazich()
 {
     NactenePozice.Clear();
     AktivniPozice = null;
     AktualizujGUI();
     AktualizujPanelHistorie();
     PresunKamene = false;
     VicenasobnySkok = false;
 }
Ejemplo n.º 6
0
        private void NastavPocatecniInformace()
        {
            ManazerHry.NastavObtiznost();
            PocitaciHraj.Enabled = false;

            MouseHoverPozice = null;
            AktivniPozice = null;

            VicenasobnySkok = false;

            Status.Text = NazevHry;

            restartHryToolStripMenuItem.Enabled = true;
            uložitHruToolStripMenuItem.Enabled = true;
            prohoďHráčeToolStripMenuItem.Enabled = true;
            uložitHruToolStripMenuItem.Enabled = true;
            restartHryToolStripMenuItem.Enabled = true;
            přehrátToolStripMenuItem.Enabled = true;
            možnostiToolStripMenuItem.Enabled = true;

            if(Minimax.vlakno != null)
                Minimax.vlakno.Abort();
        }
Ejemplo n.º 7
0
 public Skoky(Pozice odkud, List<Skoky> skoky)
 {
     this.odkud = odkud;
     this.skoky = skoky;
 }
Ejemplo n.º 8
0
 public void NastavObrance(Pozice Obrance)
 {
     if (PocetObrancu < 2)
     {
         if (Pevnost(Obrance.Radek, Obrance.Sloupec))
         {
             if (Volne(Obrance.Radek, Obrance.Sloupec))
             {
                 NastavKamen(Obrance, Manazer.StavPole.obrana);
                 PocetObrancu++;
             }
             else
             {
                 throw new Exception("Obránci jsou na stejném místě");
             }
         }
         else
         {
             throw new Exception("Obránci nejsou v pevnosti");
         }
     }
     else
     {
         throw new Exception("Všichni obránci již byli nastaveni");
     }
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Vrací všechny skoky jedné úrovně jednoho obránce.
        /// </summary>
        private static List<Tah> KamMuzeObranceSkocit(Pozice souradniceObrance, HraciDeska hraciDeska)
        {
            List<Tah> tahy;

            tahy = VratPlatneTahy(souradniceObrance, Manazer.StavPole.obrana, hraciDeska);
            tahy = OdstranObycejneTahy(tahy);

            return tahy;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Nastaví obránce na hrací desku.
        /// </summary>
        /// <param name="s1">První obránce</param>
        /// <param name="s2">Druhý obránce</param>
        /*public void NastavObrance(string s1, string s2)
        {
            NastavObrance(Prikazy.StringNaSouradnice(s1));
            NastavObrance(Prikazy.StringNaSouradnice(s2));
        }*/
        /// <summary>
        /// Nastaví obránce po jednom.
        /// </summary>
        /// <param name="Souradnice">Stringové souřadnice</param>
        public void NastavObrance(Pozice Souradnice)
        {
            if(!NastaveniObranci)
            {
                Deska.NastavObrance(Souradnice);
                Tah tah = new Tah(Souradnice);
                TahyZpet.Push(tah);
            }

            if (Deska.PocetObrancu == 2)
            {
                NastaveniObranci = true;
                hracNaTahu = Manazer.StavPole.utok;
            }
        }
Ejemplo n.º 11
0
 public static Pozice Stred(Pozice pole1, Pozice pole2)
 {
     return new Pozice((pole1.Radek + pole2.Radek) / 2, (pole1.Sloupec + pole2.Sloupec) / 2);
 }
Ejemplo n.º 12
0
 /// <summary>
 /// Jaký hráč stojí na pozici?
 /// </summary>
 /// <param name="pole">Souřadnice pole</param>
 /// <returns>Barva hráče</returns>
 public Manazer.StavPole Hrac(Pozice pole)
 {
     return Hrac(pole.Radek, pole.Sloupec);
 }
Ejemplo n.º 13
0
 /// <summary>
 /// Provede tah na desce.
 /// </summary>
 private void Tahni(Pozice odkud, Pozice kam)
 {
     Tahni(odkud.Radek, odkud.Sloupec, kam.Radek, kam.Sloupec);
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Bez kontroly nastaví kámen na desku.
 /// </summary>
 /// <param name="pole">Souřadnice, kam chceme kámen položit</param>
 /// <param name="hrac">Barva hráče, který táhne</param>
 private void NastavKamen(Pozice pole, Manazer.StavPole hrac)
 {
     NastavKamen(pole.Radek, pole.Sloupec, hrac);
 }
Ejemplo n.º 15
0
 /// <summary>
 /// Odebere kámen z desky, namísto něj vloží Hraci.volne.
 /// </summary>
 /// <param name="pole">Souřadnice pole</param>
 public void OdeberKamen(Pozice pole)
 {
     OdeberKamen(pole.Radek, pole.Sloupec);
 }
Ejemplo n.º 16
0
        /// <summary>
        /// Provede tah
        /// </summary>
        private void ProvedTah()
        {
            Tah AktualniTah = new Tah(NactenePozice);
            ManazerHry.VratHraceNaTahu().AktualniTah = AktualniTah;

            try
            {
                ManazerHry.Tahni();
                Status.Text = NazevHry;
            }
            catch(NeplatnyTah NT)
            {
                Status.Text = NT.Message;
                NactenePozice.Clear();
            }
            catch(ObranceMusiSkakat OMS)
            {
                Status.Text = OMS.Message;
                MessageBox.Show(OMS.Message);
            }

            ZobrazHraceNaRade();
            NactenePozice.Clear();

            PresunKamene = false;
            AktivniPozice = null;
        }
Ejemplo n.º 17
0
 /// <summary>
 /// Zvýrazní políčko, přes které se bude skákat
 /// </summary>
 private void VykresliPolickoSkoku(Graphics Platno, Pozice Pozice)
 {
     VykresliPolicko(Platno, Pozice.Radek, Pozice.Sloupec, Policka.skok);
 }
Ejemplo n.º 18
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;
        }