// 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); }
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"); }
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); } }
// 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 !"); } }
// 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); }
// 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); }
// 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); }
public void PridejTah(Tah tah) { tahy.Add(tah); }
// Metoda na redo public void ProvedPosunutiTahuVpred(Tah tah) { hra.PridejTah(tah); deska.ZahrajTah(tah); hra.AktualizujPocetTahuBezPreskoku(); }