//Kontrola jestli zmenit figurku na damu private void JeFigurkaNaKonci(Policko p) { if (p.hodnota == 1 && p.y == 7) { p.fig.mesh.Destroy(); LFB.Remove(p.fig); Figurka f = new Figurka(p.x, p.y, 3); LFB.Add(f); f.mesh = new TVMesh(); f.mesh = Scene.CreateMeshBuilder(); f.mesh = Cylinder(2, 1, 100, 0, 0, 0, 1, 1); f.mesh.SetPosition((float)5 * f.x + xc, yc + 1.5f, (float)5 * f.y + zc); f.mesh.SetMeshName(f.x.ToString() + "F" + f.y.ToString()); f.mesh.SetTexture(Globals.GetTex("bilad"), -1); p.hodnota = f.hodnota; p.fig = f; Upozorneni("Bílý dojel na konec šachovnice, měním figurku na dámu."); } if (p.hodnota == 2 && p.y == 0) { p.fig.mesh.Destroy(); LFC.Remove(p.fig); Figurka f = new Figurka(p.x, p.y, 4); LFC.Add(f); f.mesh = new TVMesh(); f.mesh = Scene.CreateMeshBuilder(); f.mesh = Cylinder(2, 1, 100, 0, 0, 0, 1, 1); f.mesh.SetPosition((float)5 * f.x + xc, yc + 1.5f, (float)5 * f.y + zc); f.mesh.SetMeshName(f.x.ToString() + "F" + f.y.ToString()); f.mesh.SetTexture(Globals.GetTex("cernad"), -1); Pole[f.x, f.y].hodnota = f.hodnota; Pole[f.x, f.y].fig = f; Upozorneni("Černý dojel na konec šachovnice, měním figurku na dámu."); } }
//Ulozi vstupni Policko do listu ke smazani private void PridatKeSmazani(Policko p) { OznacKeSmazani(p); p.skoceno = true; LPSmaz.Add(p); }
//Incializace a vytvoreni sachovnice i s figurkama private void VytvorSachovnici(float x, float y, float z) { //Inicializace sachovnice Pole = new Policko[8, 8]; //Vytvoreni jednotlivych policek a jejich nastaveni for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { Pole[i, j] = new Policko(i, j); Pole[i, j].mesh = new TVMesh(); Pole[i, j].mesh = Scene.CreateMeshBuilder(); Pole[i, j].mesh.CreateBox(5, 2, 5, true); Pole[i, j].mesh.SetPosition((float)5 * i + x, y, (float)5 * j + z); Pole[i, j].mesh.SetMeshName(i.ToString() + "P" + j.ToString()); if ((((j % 2) == 0) && ((i % 2) == 1)) || (((j % 2) == 1) && ((i % 2) == 0))) { Pole[i, j].barva = "bila"; Pole[i, j].hodnota = 10; Pole[i, j].mesh.SetTexture(Globals.GetTex("bila"), -1); } else { Pole[i, j].barva = "seda"; Pole[i, j].mesh.SetTexture(Globals.GetTex("seda"), -1); } } } }
private void OznacTahnutelne(Policko p) { p.oznaceno = true; p.mesh.SetTexture(Globals.GetTex("sedaoznaceni"), -1); }
/*Přesune figurku z bodu A do bodu B Jestli mezi A a B je figurka protivnika, prida se ke smazani*/ private void Presun(ref Policko a, Policko b) { //Nastaveni i podle smeru posuvu int x = b.x - a.x, y = b.y - a.y, i = 10; if (x > 0 && y > 0) i = 0; if (x > 0 && y < 0) i = 1; if (x < 0 && y < 0) i = 2; if (x < 0 && y > 0) i = 3; Policko pom; pom = GetPolicko(a.x, a.y); x = a.x; y = a.y; if (i == 0) { x++; y++; } else if (i == 1) { x++; y--; } else if (i == 2) { x--; y--; } else if (i == 3) { x--; y++; } pom = GetPolicko(x, y); while (pom.x != b.x && pom.y != b.y) { if (pom.hodnota != 0) { PridatKeSmazani(pom); break; } if (i == 0) { x++; y++; } else if (i == 1) { x++; y--; } else if (i == 2) { x--; y--; } else if (i == 3) { x--; y++; } pom = GetPolicko(x, y); } //Prenastaveni hodnot -> presun b.hodnota = a.hodnota; b.fig = a.fig; b.fig.mesh.SetPosition((float)5 * b.x + xc, 1.0f + yc, (float)5 * b.y + zc); b.fig.x = b.x; b.fig.y = b.y; b.fig.mesh.SetMeshName(b.x.ToString() + "F" + b.y.ToString()); a.hodnota = 0; a.fig = null; a.mesh.SetTexture(Globals.GetTex("seda"), -1); NecoOznaceno = false; a.oznaceno = false; a = null; }
private void OznacPolicko(Policko pom) { //Odoznaci kliknute policko if (pom != null && pom.oznaceno && pom.barva == "seda") { pom.mesh.SetTexture(Globals.GetTex("seda"), -1); NecoOznaceno = false; pom.oznaceno = false; lastPoleOZN = null; if (LPOznac.Count != 0) { foreach (Policko item in LPOznac) { OdOznacTahnutelne(item); } LPOznac.Clear(); } } //Oznaci kliknute policko else if (!pom.oznaceno && lastPoleOZN == null && pom.barva == "seda") { pom.oznaceno = true; pom.mesh.SetTexture(Globals.GetTex("sedaoznp"), -1); NecoOznaceno = true; lastPoleOZN = pom; } }
private void OznacSmazane(Policko p) { p.mesh.SetTexture(Globals.GetTex("SedaSmazane"), -1); }
//Oznacovani a odoznacovani policek ze vstupu private void OznacNajete(Policko pom) { //Pokud je nejake policko uz oznacene najetim, tak ho odoznaci if (lastNajete != null && lastNajete != lastPoleOZN && lastNajete.barva == "seda") { if (lastNajete.oznaceno) lastNajete.mesh.SetTexture(Globals.GetTex("sedaoznaceni"), -1); else lastNajete.mesh.SetTexture(Globals.GetTex("seda"), -1); if (lastSmazane != null && lastSmazane == lastNajete) lastNajete.mesh.SetTexture(Globals.GetTex("SedaSmazane"), -1); lastNajete.najeto = false; lastNajete = null; } //Pokud neni nic najeto, oznaci najete if (pom != null && lastPoleOZN != pom && pom.barva == "seda") { if (lastPoleOZN != null && pom.hodnota == 0) { pom.najeto = true; pom.mesh.SetTexture(Globals.GetTex("sedaozn"), -1); lastNajete = pom; } else if (lastPoleOZN == null) { pom.najeto = true; pom.mesh.SetTexture(Globals.GetTex("sedaozn"), -1); lastNajete = pom; } } }
private void OznacKeSmazani(Policko p) { if (p.hodnota == 1 || p.hodnota == 3) p.fig.mesh.SetTexture(Globals.GetTex("bdelet"), -1); else if (p.hodnota == 2 || p.hodnota == 4) p.fig.mesh.SetTexture(Globals.GetTex("cdelet"), -1); }
//Pocatecni nastaveni vsech potrebnych promennych private void NastavPromenne() { //Zvuky sTah = new SoundPlayer("Zvuky\\tah.wav"); sTah.Load(); sChyba = new SoundPlayer("Zvuky\\Chyba.wav"); sChyba.Load(); sKonec = new SoundPlayer("Zvuky\\Konec.wav"); sKonec.Load(); sVarovani = new SoundPlayer("Zvuky\\Varovani.wav"); sVarovani.Load(); sVitezBily = new SoundPlayer("Zvuky\\VitezBily.wav"); sVitezBily.Load(); sVitezCerny = new SoundPlayer("Zvuky\\VitezCerny.wav"); sVitezCerny.Load(); //Naplneni pomocnych promennych pro oznaceni lastNajete = null; lastPoleOZN = null; NecoOznaceno = false; LzeOdoznacit = true; LFB = null; LFC = null; //Naplneni promennych tahu TAH = true; Tahnuto = false; VTahu = false; PoTahu = false; Vitez = 0; //Inicializace listu pro predvypocitani tahu/skoku/smazani LPTah = new List<Policko>(); LPSkok = new List<Policko>(); LPSmaz = new List<Policko>(); LPOznac = new List<Policko>(); //Nastaveni timeru pro otaceni timer2.Enabled = false; timer3.Enabled = false; LastRadius = Polomer; //Inicializace listu figurek LFB = new List<Figurka>(); LFC = new List<Figurka>(); Pause = true; Konec = false; label2.Text = "BÍLÝ"; }
//Naplnění listu LPTah všemi možnými možnosti táhnutí pro dané Policko private void Naplneni_LPTah(Policko p) { if (LPTah.Count != 0) LPTah.Clear(); int Hod = p.hodnota; int x = p.x, y = p.y, lHod = 10, pHod = 10, llHod = 10, ppHod = 10; switch (Hod) { case 1: // Bila obicejna figurka if (y <= 6) //Horni okraj o jedno policko { if (x >= 1) //Levy okraj o jedno policko { lHod = Pole[x - 1, y + 1].hodnota; if (lHod == 0) LPTah.Add(Pole[x - 1, y + 1]); } if (x <= 6) //Pravy okraj o jedno policko { pHod = Pole[x + 1, y + 1].hodnota; if (pHod == 0) LPTah.Add(Pole[x + 1, y + 1]); } if (y <= 5) //Horni okraj o dve policka { if (x >= 2) //Levy oraj o dve policka { llHod = Pole[x - 2, y + 2].hodnota; if ((lHod == 2 || lHod == 4) && llHod == 0) LPTah.Add(Pole[x - 2, y + 2]); } if (x <= 5) //Pravy okraj o dve policka { ppHod = Pole[x + 2, y + 2].hodnota; if ((pHod == 2 || pHod == 4) && ppHod == 0) LPTah.Add(Pole[x + 2, y + 2]); } } } break; case 2: // Cerna obicejna figurka if (y >= 1) //Dolni okraj o jedno policko { if (x >= 1) //Levy okraj o jedno policko { lHod = Pole[x - 1, y - 1].hodnota; if (lHod == 0) LPTah.Add(Pole[x - 1, y - 1]); } if (x <= 6) //Pravy okraj o jedno policko { pHod = Pole[x + 1, y - 1].hodnota; if (pHod == 0) LPTah.Add(Pole[x + 1, y - 1]); } if (y >= 2) //Dolni okraj o dve policka { if (x >= 2) //Levy oraj o dve policka { llHod = Pole[x - 2, y - 2].hodnota; if ((lHod == 1 || lHod == 3) && llHod == 0) LPTah.Add(Pole[x - 2, y - 2]); } if (x <= 5) //Pravy okraj o dve policka { ppHod = Pole[x + 2, y - 2].hodnota; if ((pHod == 1 || pHod == 3) && ppHod == 0) LPTah.Add(Pole[x + 2, y - 2]); } } } break; //TODO: figurky DAM case 3: // Bila dama Policko pom; Policko LastPom; for (int i = 0; i < 4; i++) { pom = GetPolicko(p.x, p.y); x = p.x; y = p.y; LastPom = null; if (i == 0) { x++; y++; } else if (i == 1) { x++; y--; } else if (i == 2) { x--; y--; } else if (i == 3) { x--; y++; } pom = GetPolicko(x, y); while (pom != null) { if (pom.hodnota == 1 || pom.hodnota == 3) break; if ((pom.hodnota == 2 || pom.hodnota == 4) && LastPom != null) break; if (pom.hodnota == 0 && LastPom == null) LPTah.Add(pom); if (pom.hodnota == 0 && LastPom != null) if (!LastPom.skoceno) LPTah.Add(pom); if ((pom.hodnota == 2 || pom.hodnota == 4) && LastPom == null) LastPom = pom; if (i == 0) { x++; y++; } else if (i == 1) { x++; y--; } else if (i == 2) { x--; y--; } else if (i == 3) { x--; y++; } pom = GetPolicko(x, y); } } break; case 4: // Cerna dama for (int i = 0; i < 4; i++) { pom = GetPolicko(p.x, p.y); x = p.x; y = p.y; LastPom = null; if (i == 0) { x++; y++; } else if (i == 1) { x++; y--; } else if (i == 2) { x--; y--; } else if (i == 3) { x--; y++; } pom = GetPolicko(x, y); while (pom != null) { if (pom.hodnota == 2 || pom.hodnota == 4) break; if ((pom.hodnota == 1 || pom.hodnota == 3) && LastPom != null) break; if (pom.hodnota == 0 && LastPom == null) LPTah.Add(pom); if (pom.hodnota == 0 && LastPom != null) if (!LastPom.skoceno) LPTah.Add(pom); if ((pom.hodnota == 1 || pom.hodnota == 3) && LastPom == null) LastPom = pom; if (i == 0) { x++; y++; } else if (i == 1) { x++; y--; } else if (i == 2) { x--; y--; } else if (i == 3) { x--; y++; } pom = GetPolicko(x, y); } } break; default: MessageBox.Show("Error pri naplneni LPT policka bez figurky!!"); break; } }
//Naplnění listu LPSkok Policky takovymi na ktere muzem z daneho Policka skakat private void Naplneni_LPSkok(Policko pp) { if (LPSkok.Count != 0) LPSkok.Clear(); int Hod = pp.hodnota; int x = pp.x, y = pp.y, lHod = 10, pHod = 10, llHod = 10, ppHod = 10; switch (Hod) { case 1: // Bila normalni figurka if (y <= 5) //Horni okraj o dve policka { if (x >= 2) //Levy oraj o dve policka { lHod = Pole[x - 1, y + 1].hodnota; llHod = Pole[x - 2, y + 2].hodnota; if ((lHod == 2 || lHod == 4) && llHod == 0) LPSkok.Add(Pole[x - 2, y + 2]); } if (x <= 5) //Pravy okraj o dve policka { pHod = Pole[x + 1, y + 1].hodnota; ppHod = Pole[x + 2, y + 2].hodnota; if ((pHod == 2 || pHod == 4) && ppHod == 0) LPSkok.Add(Pole[x + 2, y + 2]); } } break; case 2: // Cerna normalni figurka if (y >= 2) //Dolni okraj o dve policka { if (x >= 2) //Levy oraj o dve policka { lHod = Pole[x - 1, y - 1].hodnota; llHod = Pole[x - 2, y - 2].hodnota; if ((lHod == 1 || lHod == 3) && llHod == 0) LPSkok.Add(Pole[x - 2, y - 2]); } if (x <= 5) //Pravy okraj o dve policka { pHod = Pole[x + 1, y - 1].hodnota; ppHod = Pole[x + 2, y - 2].hodnota; if ((pHod == 1 || pHod == 3) && ppHod == 0) LPSkok.Add(Pole[x + 2, y - 2]); } } break; //TODO: Lze skocit s damou? case 3: // Bila dama Policko pom; Policko LastPom; for (int i = 0; i < 4; i++) { pom = GetPolicko(pp.x, pp.y); x = pp.x; y = pp.y; LastPom = null; if (i == 0) { x++; y++; } else if (i == 1) { x++; y--; } else if (i == 2) { x--; y--; } else if (i == 3) { x--; y++; } pom = GetPolicko(x, y); while (pom != null) // Doprava nahoru { if (pom.hodnota == 1 || pom.hodnota == 3) break; if ((pom.hodnota == 2 || pom.hodnota == 4) && LastPom != null) break; if (pom.hodnota == 0 && LastPom != null) if (!LastPom.skoceno) LPSkok.Add(pom); if ((pom.hodnota == 2 || pom.hodnota == 4) && LastPom == null) LastPom = pom; if (i == 0) { x++; y++; } else if (i == 1) { x++; y--; } else if (i == 2) { x--; y--; } else if (i == 3) { x--; y++; } pom = GetPolicko(x, y); } } break; case 4: // Cerna dama for (int i = 0; i < 4; i++) { pom = GetPolicko(pp.x, pp.y); x = pp.x; y = pp.y; LastPom = null; if (i == 0) { x++; y++; } else if (i == 1) { x++; y--; } else if (i == 2) { x--; y--; } else if (i == 3) { x--; y++; } pom = GetPolicko(x, y); while (pom != null) // Doprava nahoru { if (pom.hodnota == 2 || pom.hodnota == 4) break; if ((pom.hodnota == 1 || pom.hodnota == 3) && LastPom != null) break; if (pom.hodnota == 0 && LastPom != null) if (!LastPom.skoceno) LPSkok.Add(pom); if ((pom.hodnota == 1 || pom.hodnota == 3) && LastPom == null) LastPom = pom; if (i == 0) { x++; y++; } else if (i == 1) { x++; y--; } else if (i == 2) { x--; y--; } else if (i == 3) { x--; y++; } pom = GetPolicko(x, y); } } break; } }