public Policko(int x, int y) { this.x = x; this.y = y; oznaceno = false; najeto = false; skoceno = false; hodnota = 0; fig = null; }
//Kontrola jestli s danou figurkou muzeme skakat private bool Lze_Skocit(Figurka f) { int Hod = f.hodnota; int lHod = 10, pHod = 10, llHod = 10, ppHod = 10; bool skoc = true; switch (Hod) { case 1: // Bila normalni figurka if (f.y <= 5) //Horni okraj o dve policka { if (f.x >= 2) //Levy oraj o dve policka { skoc = Pole[f.x - 1, f.y + 1].skoceno; lHod = Pole[f.x - 1, f.y + 1].hodnota; llHod = Pole[f.x - 2, f.y + 2].hodnota; if ((lHod == 2 || lHod == 4) && llHod == 0 && !skoc) return true; } if (f.x <= 5) //Pravy okraj o dve policka { skoc = Pole[f.x + 1, f.y + 1].skoceno; pHod = Pole[f.x + 1, f.y + 1].hodnota; ppHod = Pole[f.x + 2, f.y + 2].hodnota; if ((pHod == 2 || pHod == 4) && ppHod == 0 && !skoc) return true; } } break; case 2: // Cerna normalni figurka if (f.y >= 2) //Dolni okraj o dve policka { if (f.x >= 2) //Levy oraj o dve policka { skoc = Pole[f.x - 1, f.y - 1].skoceno; lHod = Pole[f.x - 1, f.y - 1].hodnota; llHod = Pole[f.x - 2, f.y - 2].hodnota; if ((lHod == 1 || lHod == 3) && llHod == 0 && !skoc) return true; } if (f.x <= 5) //Pravy okraj o dve policka { skoc = Pole[f.x + 1, f.y - 1].skoceno; pHod = Pole[f.x + 1, f.y - 1].hodnota; ppHod = Pole[f.x + 2, f.y - 2].hodnota; if ((pHod == 1 || pHod == 3) && ppHod == 0 && !skoc) return true; } } break; case 3: // Bila dama Policko pom; int x, y; Policko LastPom; for (int i = 0; i < 4; i++) { pom = GetPolicko(f.x, f.y); x = f.x; y = f.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) return true; 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(f.x, f.y); x = f.x; y = f.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) return true; 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; } return false; }
//Provedeni zmeny tahu a otoceni kamery private void JeTahnuto() { if (Tahnuto) { //Prepnuti tahu if (TAH) TAH = false; else TAH = true; if (Zvuky && sVarovani.Tag == null) sTah.Play(); //Nastaveni ridicich promennych PoTahu = true; Tahnuto = false; VTahu = false; SloSkocit = null; Smazano = false; LzeOdoznacit = true; MouseDOWN = true; sVarovani.Tag = null; MStrip.Enabled = false; //Smazani skocenych figurek if (LPSmaz.Count != 0) SmazList(); if (LPOznac.Count != 0) { foreach (Policko item in LPOznac) { OdOznacTahnutelne(item); } LPOznac.Clear(); } } }
//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."); } }
//Vraci figurku se kterou slo v danou chvili skakat private void SloNecoSkocit() { //V nasledujicich dvou ifech se zjistuje prvni figurka kterou jde skocit a ulozi se do SloSkocit if ((lastPoleOZN.hodnota == 1 || lastPoleOZN.hodnota == 3) && TAH) { foreach (Figurka item2 in LFB) { if (Lze_Skocit(item2) && !Smazano) { SloSkocit = item2; break; } } } if ((lastPoleOZN.hodnota == 2 || lastPoleOZN.hodnota == 4) && !TAH) { foreach (Figurka item2 in LFC) { if (Lze_Skocit(item2) && !Smazano) { SloSkocit = item2; break; } } } }