/// <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); } }
/// <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); } }
/// <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); }
/// <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); }
public void DodajSahovnico(Sahovnica sah) { this.vsePozicije.Add(sah); }
/// <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(); }
/// <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; }
/// <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(); }
/// <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); } }
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); } }
/// <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); }
/// <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(); }
/// <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; }
/// <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; }