示例#1
0
        /// <summary>
        /// meotda,ki izpiše vsa delovanja figur
        /// </summary>
        /// <param name="S">Object: objekt Sahovnica</param>
        public static void IzpišiVsePoteze(Sahovnica S)
        {
            foreach (var pair in S.VsePoteze())
            {
                Figura F = pair.Key;
                List<int[]> poteze = pair.Value;
                IzpišiPotezeEneFigure(F, poteze);

            }
        }
示例#2
0
        /// <summary>
        /// metoda,ki izpiše vse možne premike figur
        /// </summary>
        /// <param name="Sah">Object: objekt Sahovnica</param>
        public static void IzpisiMoznaPoteze(Sahovnica Sah)
        {
            Dictionary<Figura, List<int[]>> poteze = Sah.IzracunajPoteze();

            foreach (var pair in poteze)
            {
                string fig = pair.Key.IzpisFigure();
                string kam = "";
                foreach (int[] enaPoteza in pair.Value)
                {
                    kam += "" + enaPoteza[0] + enaPoteza[1] + " , ";
                }

                Console.WriteLine(fig + ": " + kam);
            }
        }
示例#3
0
 /// <summary>
 ///metoda,ki izpiše niz 8x8,ki predstavlja pozicijo 
 /// </summary>
 /// <param name="Sah">Object: objekt Sahovnica</param>
 public static void IzpisPozicije(Sahovnica Sah)
 {
     string pozicija = Sah.PovejPozicijoZaIzpis();
     Console.WriteLine(pozicija);
 }
示例#4
0
 /// <summary>
 /// metoda,ki za vse figure na sahovnici izpiše njihovo lokacijo,barvo in vrsto
 /// </summary>
 /// <param name="Sah">Object: objekt Sahovnica</param>
 public static void IzpisiVseFigure(Sahovnica Sah)
 {
     string vseFig = Sah.NastejFigure();
     Console.WriteLine(vseFig);
 }
示例#5
0
 public void DodajSahovnico(Sahovnica sah)
 {
     this.vsePozicije.Add(sah);
 }
示例#6
0
        /// <summary>
        /// ob kliku na gumb nazaj se vrnemo na prejšnjo pozicijo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BNazaj_Click(object sender, EventArgs e)
        {
            if (this.indeksPozicije == 0)
                return;

            this.indeksPozicije--;
            this.trenutnaPoz = new Sahovnica(this.novaPartija.SezPozicijZaPregledPartij[this.indeksPozicije], this.trenutnaPoz.KdoNaslednji(), false, false, false, false, null, 0, 0);
            this.VstaviSlike();
        }
示例#7
0
        /// <summary>
        /// ob kliku na gumb se razveljavi zadnja poteza(če je to možno)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BRazveljavi_Click(object sender, EventArgs e)
        {
            //gumb deluje samo med med igro,ko je potez več kot 0
            if (!this.jeIgra || !(this.Mod == "novaPartija") || this.novaPartija.Poteze.Count() == 0)
                return;

            if (this.novaPartija.Poteze.Count() % 2 == 0)
                this.LVPartija.Items[this.novaPartija.KateraPoteza()-1].SubItems[2].Text = "";
            else
                this.LVPartija.Items.RemoveAt(this.novaPartija.KateraPoteza() - 1);
            this.novaPartija.vsePozicije.RemoveAt(this.novaPartija.Poteze.Count());
            this.novaPartija.RazveljaviZadnjoPotezo();
            this.trenutnaPoz = this.novaPartija.vsePozicije[this.novaPartija.Poteze.Count()];
            this.moznePoteze = trenutnaPoz.IzracunajPoteze();
            this.VstaviSlike();

            this.jeOznaceno = false;
            this.izbranoPolje = null;
            this.izbranKralj = false;
            this.izbranKmetNaSedmi = false;
            this.obarvanaPolja.Clear();
            this.poljeEP = null;
            this.oznacenEP = false;
        }
示例#8
0
        /// <summary>
        /// ko pride do promocije
        /// </summary>
        /// <param name="polje">PictureBox: polje promocije</param>
        /// <param name="kaj">string: v kaj promoviramo</param>
        public void Promocija(PictureBox polje, string kaj = "D")
        {
            int x = izbranoPolje.Name[2] - '1';
            int y = izbranoPolje.Name[1] - 'A';

            int novX = polje.Name[2] - '1';
            int novY = polje.Name[1] - 'A';

            Console.WriteLine(this.izbranoPolje.Name);
            Console.WriteLine(polje.Name);

            trenutnaPoz = trenutnaPoz.Promocija(kaj, y, novY);
            this.novaPartija.dodajPotezoPromocija(x, y, novX, novY, kaj);

            this.Mod = "novaPartija";
            this.Osvezi();
        }
示例#9
0
 /// <summary>
 /// ko pride do rokade
 /// </summary>
 /// <param name="polje">PictureBox: definira vrsto rokade</param>
 public void Rokiraj(PictureBox polje)
 {
     if (polje == PG8 || polje == PG1)
     {
         this.trenutnaPoz = trenutnaPoz.IzvediMaloRokado();
         this.novaPartija.DodajPotezoRokada(false);
     }
     else
     {
         this.trenutnaPoz = trenutnaPoz.IzvediVelRokado();
         this.novaPartija.DodajPotezoRokada(true);
     }
 }
示例#10
0
        public void PripraviPregledPartije(string partija)
        {
            this.BringToFront();
            this.Mod = "baza";
            this.novaPartija = new Partija(partija);
            this.indeksPozicije = 0;

            //izpisemo poteze na zaslon
            for (int i = 0; i < this.novaPartija.Poteze.Count(); i += 2)
            {
                ListViewItem enaPoteza = new ListViewItem("" + (i / 2 + 1));
                enaPoteza.SubItems.Add(this.novaPartija.PotezeZaIzpis[i]);
                if (i + 1 < this.novaPartija.Poteze.Count())
                    enaPoteza.SubItems.Add(this.novaPartija.PotezeZaIzpis[i + 1]);
                this.LVPartija.Items.Add(enaPoteza);
            }

            Sahovnica poz = new Sahovnica();
            this.trenutnaPoz = poz;
            novaPartija.DodajPozicijoZaOgled(poz.sahovnica);
            this.VstaviSlike();

            foreach (string pot in this.novaPartija.Poteze)
            {
                if (pot == "0-0")
                {
                    poz = poz.IzvediMaloRokado();
                }
                else if (pot == "0-0-0")
                {
                    poz = poz.IzvediVelRokado();
                }
                else if (pot.Length == 6)
                {
                    poz = poz.Promocija("" + pot[5], int.Parse("" + pot[2]), int.Parse("" + pot[4]));
                }
                else if (pot[0] == 'P' && pot[4] != pot[2] && poz.sahovnica[int.Parse("" + pot[3]), int.Parse("" + pot[4])] == ".")
                {
                    poz = poz.IzvediEP(int.Parse("" + pot[2]), int.Parse("" + pot[4]));
                }
                else
                {
                    poz = poz.Premik(int.Parse("" + pot[3]), int.Parse("" + pot[4]), new Figura(int.Parse("" + pot[1]), int.Parse("" + pot[2]), poz.sahovnica[int.Parse("" + pot[1]), int.Parse("" + pot[2])]));
                }
                novaPartija.DodajPozicijoZaOgled(poz.sahovnica);
            }
        }
示例#11
0
        /// <summary>
        /// ko ne gre za rokado ali promocijo
        /// </summary>
        /// <param name="polje">PictureBox: polje premika</param>
        public void NavadenPremik(PictureBox polje)
        {
            string imeIzb = this.izbranoPolje.Name;

            Figura fig = trenutnaPoz.vrniFiguroNaPolju(imeIzb[2] - '1', imeIzb[1] - 'A');

            string imeNovo = polje.Name;
            int novX = imeNovo[2] - '1'; int novY = imeNovo[1] - 'A';

            if (oznacenEP && polje == poljeEP)
            {
                this.trenutnaPoz = this.trenutnaPoz.IzvediEP(fig.y, this.poljeEP.Name[1] - 'A');
            }

            else
            {
                this.trenutnaPoz = trenutnaPoz.Premik(novX, novY, fig);
                trenutnaPoz.Naslednji();
            }

            this.novaPartija.DodajPotezo(fig.ImeFigure(), fig.x, fig.y, novX, novY);
        }
示例#12
0
        /// <summary>
        /// metoda,postavi figure na zacetna polja in razveljavi vse parametre
        /// </summary>
        public void NastaviZacStanje()
        {
            this.trenutnaPoz = new Sahovnica();

            NapolniTabeloPolj(); //ustvarimo tabelo polj in slovar informacij

            VstaviSlike(); //dodamo figure na sliko

            this.jeOznaceno = false; // ni označena nobena figura
            this.izbranKralj = false; //je izbran kralj na zacetnem polju
            this.izbranKmetNaSedmi = false; // je izrbran kmet na predzadnji vrsti
            this.oznacenEP = false;  //ali je izbran kmet in ima moznost EP

            this.obarvanaPolja.Clear();
        }
示例#13
0
        /// <summary>
        /// metoda,ki naredi premik ene figure na šahovnici s tem da ustvari nov objekt Sahovnica
        /// </summary>
        /// <param name="x">int: vrsta novega polja figure</param>
        /// <param name="y">int: stolpec novega polja figure</param>
        /// <param name="f">Object: objekt Figura,katero želimo premakniti</param>
        /// <returns>Object: objekt Sahovnica,ki predstavlja novo sahovnico</returns>
        public Sahovnica Premik(int novX, int novY, Figura f)
        {
            //novi sahovnici najprej naredimo ustrezno pozicijo
            string[,] novaSahovnica = (string[,])this.sahovnica.Clone();
            novaSahovnica[f.x, f.y] = ".";
            novaSahovnica[novX, novY] = f.IzpisFigure();

            //preverimo ali bo še možno narediti rokade
            bool novaMozMalRokBeli = this.moznaMalaRokadaBeli;
            bool novaMozMalRokCrni = this.moznaMalaRokadaCrni;
            bool novaMozVelRokBeli = this.moznaVelikaRokadaBeli;
            bool novaMozVelRokCrni = this.moznaVelikaRokadaCrni;
            int novPravilo50 = this.pravilo50+1;
            List<int[]> noviMozniEP = new List<int[]>();

            //če je prislo do jemanja ali se premakne kmet...zacnemo pravilo50 steti od zacetka
            if (f.ImeFigure() == "P" || this.sahovnica[novX, novY] != ".")
                novPravilo50 = 0;

            //pogledamo če bodo v naslednji potezi mozni EP
            if (f.ImeFigure() == "P")
            {
                if (this.kdo == "b")
                {
                    if (f.x == 1 && novX == 3)
                    {
                        if (f.y < 7 && f.y > 0)
                        {
                            if (this.sahovnica[3, f.y - 1] == "cP")
                            {
                                noviMozniEP.Add(new int[2] { f.y - 1, f.y });
                            }
                            if (this.sahovnica[3, f.y + 1] == "cP")
                                noviMozniEP.Add(new int[2] { f.y + 1, f.y });
                        }
                        else if (f.y == 7 && this.sahovnica[3, f.y - 1] == "cP")
                            noviMozniEP.Add(new int[2] { f.y - 1, f.y });
                        else if (f.y == 0 && this.sahovnica[3, f.y + 1] == "cP")
                            noviMozniEP.Add(new int[2] { f.y + 1, f.y });
                    }
                }
                if (this.kdo == "c")
                {
                    if (f.x == 6 && novX == 4)
                    {
                        if (f.y < 7 && f.y > 0)
                        {
                            if (this.sahovnica[4, f.y - 1] == "bP")
                                noviMozniEP.Add(new int[2] { f.y - 1, f.y });
                            if (this.sahovnica[4, f.y + 1] == "bP")
                                noviMozniEP.Add(new int[2] { f.y + 1, f.y });
                        }
                        else if (f.y == 7 && this.sahovnica[4, f.y - 1] == "bP")
                            noviMozniEP.Add(new int[2] { f.y - 1, f.y });
                        else if (f.y == 0 && this.sahovnica[4, f.y + 1] == "bP")
                            noviMozniEP.Add(new int[2] { f.y + 1, f.y });
                    }
                }
            }
            if (noviMozniEP.Count() == 0)
                noviMozniEP = null;

            //če beli premakne katero od trdnjav ali kralja
            if (f.x == 0)
            {
                if (f.y == 0)
                    novaMozVelRokBeli = false;

                else if (f.y == 7)
                    novaMozMalRokBeli = false;

                else if (f.y == 4)
                {
                    novaMozMalRokBeli = false;
                    novaMozVelRokBeli = false;
                }
            }

            //če črni premakne katero od trdnjav ali kralja
            else if (f.x == 7)
            {
                if (f.y == 0)
                    novaMozVelRokCrni = false;

                else if (f.y == 7)
                    novaMozMalRokCrni = false;

                else if (f.y == 4)
                {
                    novaMozMalRokCrni = false;
                    novaMozVelRokCrni = false;
                }
            }
            //če je bil izveden premik na katero od mest trdnjav ali kralja
            if (novX == 0)
            {
                if (novY == 0)
                    novaMozVelRokBeli = false;
                else if (novY == 7)
                    novaMozMalRokBeli = false;
                else if (novY == 4)
                {
                    novaMozMalRokBeli = false;
                    novaMozVelRokBeli = false;
                }
            }
            else if (novX == 7)
            {
                if (novY == 0)
                    novaMozVelRokCrni = false;
                else if (novY == 7)
                    novaMozMalRokCrni = false;
                else if (novY == 4)
                {
                    novaMozMalRokCrni = false;
                    novaMozVelRokCrni = false;
                }

            }

            //nato ustvarimo nov objekt Sahovnica z novimi parametri
            Sahovnica sah = new Sahovnica(novaSahovnica, this.kdo, novaMozMalRokBeli, novaMozMalRokCrni, novaMozVelRokBeli, novaMozVelRokCrni, noviMozniEP, novPravilo50,this.kateraPoteza+1);

            return sah;
        }
示例#14
0
        /// <summary>
        /// metoda,ki izvrši veliko rokado
        /// </summary>
        /// <returns>Sahovnica: vrne nov objekt Sahovnica,ki predstavlja novo pozicijo po veliki rokadi</returns>
        public Sahovnica IzvediVelRokado()
        {
            //preverimo ali bo še možno narediti rokade
            bool novaMozMalRokBeli = this.moznaMalaRokadaBeli;
            bool novaMozMalRokCrni = this.moznaMalaRokadaCrni;
            bool novaMozVelRokBeli = this.moznaVelikaRokadaBeli;
            bool novaMozVelRokCrni = this.moznaVelikaRokadaCrni;

            string naslednji = ".";
            string[,] novaSahovnica = null;
            if (this.kdo == "b")
            {
                novaSahovnica = (string[,])this.sahovnica.Clone();
                novaSahovnica[0, 4] = ".";
                novaSahovnica[0, 3] = "bT";
                novaSahovnica[0, 2] = "bK";
                novaSahovnica[0, 0] = ".";

                naslednji = "c";

                novaMozMalRokBeli = false;
                novaMozVelRokBeli = false;
            }
            else
            {
                novaSahovnica = (string[,])this.sahovnica.Clone();
                novaSahovnica[7, 4] = ".";
                novaSahovnica[7, 3] = "cT";
                novaSahovnica[7, 2] = "cK";
                novaSahovnica[7, 0] = ".";

                naslednji = "b";

                novaMozMalRokCrni = false;
                novaMozVelRokCrni = false;
            }
            Sahovnica sah = new Sahovnica(novaSahovnica, naslednji, novaMozMalRokBeli, novaMozMalRokCrni, novaMozVelRokBeli, novaMozVelRokCrni, null, this.pravilo50,this.kateraPoteza+1);

            return sah;
        }