/*public void AktualizujCoJePodDuchem() * { * * char co = this.podDuchem; * * if (co == 'J' || co == 'B' || co == 'V' || co == 'G') Mapa.coByloPodDuchemModrym = co; * else * { * while (co != 'J' && co != 'B' && co != 'V' && co != 'G') * { * switch (co) * { * case '1': * co = Mapa.coByloPodDuchemOranzovym; * break; * case '2': * co = Mapa.coByloPodDuchemCervenym; * break; * case '3': * co = Mapa.coByloPodDuchemRuzovym; * break; * case '4': * co = Mapa.coByloPodDuchemModrym; * break; * default: * break; * } * * } * Mapa.coByloPodDuchemModrym = co; * } * }*/ public void Utec() { if (!Mapa.JePacman(y, x)) { if (paritaKroku % 2 == 0) { List <Policko> mozneTahy = new List <Policko>(); Policko novyTah = new Policko(0, 0); if (!Mapa.JeStena(y - 1, x)) { mozneTahy.Add(new Policko(y - 1, x)); } if (!Mapa.JeStena(y + 1, x)) { mozneTahy.Add(new Policko(y + 1, x)); } if (!Mapa.JeStena(y, x - 1)) { mozneTahy.Add(new Policko(y, x - 1)); } if (!Mapa.JeStena(y, x + 1)) { mozneTahy.Add(new Policko(y, x + 1)); } if (mozneTahy.Count > 1) { Policko pom = Mapa.VratNejPolickoSmeremKPacmanovi(y, x); if (pom != null) { Policko spatnePole = mozneTahy.First(p => p.x == pom.x && p.y == pom.y); mozneTahy.Remove(spatnePole); } Random generator = new Random(); int nahodneCislo = generator.Next(mozneTahy.Count); novyTah = mozneTahy[nahodneCislo]; } else { novyTah = mozneTahy.First(); } Mapa.PresunPriserku(this, y, x, novyTah.y, novyTah.x); x = novyTah.x; y = novyTah.y; paritaKroku++; } else { paritaKroku++; } } else { Zmiz(); } }
public override void UdelejKrok() //chodi podel leve steny { if (honim && zivy) { int nove_x = x; int nove_y = y; switch (this.smer) //otacim se proti smeru hodinovych rucicek { case Smer.left: if (Mapa.JeStena(nove_y + 1, nove_x) && !Mapa.JeStena(nove_y, nove_x - 1)) { PresunDoleva(nove_y, nove_x); } else if (Mapa.JeStena(nove_y, nove_x - 1) && Mapa.JeStena(nove_y + 1, nove_x)) { smer = Smer.up; if (!Mapa.JeStena(nove_y - 1, nove_x)) { PresunNahoru(nove_y, nove_x); } else { UdelejKrok(); } } else { smer = Smer.down; if (!Mapa.JeStena(nove_y + 1, nove_x) && Mapa.JeStena(nove_y + 1, nove_x + 1)) { PresunDolu(nove_y, nove_x); } else { UdelejKrok(); } } break; case Smer.right: if (Mapa.JeStena(nove_y - 1, nove_x) && !Mapa.JeStena(nove_y, nove_x + 1)) { PresunDoprava(nove_y, nove_x); } else if (Mapa.JeStena(nove_y, nove_x + 1) && Mapa.JeStena(nove_y - 1, nove_x)) //tam kam chci je zrovna stena a po me pravici je take stena { smer = Smer.down; if (!Mapa.JeStena(nove_y + 1, nove_x)) { PresunDolu(nove_y, nove_x); } else { UdelejKrok(); } } else { smer = Smer.up; if (!Mapa.JeStena(nove_y - 1, nove_x) && Mapa.JeStena(nove_y - 1, nove_x - 1)) { PresunNahoru(nove_y, nove_x); } else { UdelejKrok(); } } break; case Smer.up: if (Mapa.JeStena(nove_y, nove_x - 1) && !Mapa.JeStena(nove_y - 1, nove_x)) { PresunNahoru(nove_y, nove_x); } else if (Mapa.JeStena(nove_y - 1, nove_x) && Mapa.JeStena(nove_y, nove_x - 1)) { smer = Smer.right; if (!Mapa.JeStena(nove_y, nove_x + 1)) { PresunDoprava(nove_y, nove_x); } else { UdelejKrok(); } } else { smer = Smer.left; if (!Mapa.JeStena(nove_y, nove_x - 1) && Mapa.JeStena(nove_y + 1, nove_x - 1)) { PresunDoleva(nove_y, nove_x); } else { UdelejKrok(); } } break; case Smer.down: if (Mapa.JeStena(nove_y, nove_x + 1) && !Mapa.JeStena(nove_y + 1, nove_x)) { PresunDolu(nove_y, nove_x); } else if (Mapa.JeStena(nove_y + 1, nove_x) && Mapa.JeStena(nove_y, nove_x + 1)) { smer = Smer.left; if (!Mapa.JeStena(nove_y, nove_x - 1)) { PresunDoleva(nove_y, nove_x); } else { UdelejKrok(); } } else { smer = Smer.right; if (!Mapa.JeStena(nove_y, nove_x + 1) && Mapa.JeStena(nove_y - 1, nove_x + 1)) { PresunDoprava(nove_y, nove_x); } else { UdelejKrok(); } } break; default: break; } } else if (zivy) { Utec(); } else { if (oziveniTimer == 0) { Ozivni(); } else { oziveniTimer--; } } }
public override void UdelejKrok() //chodi podel prave steny { if (honim && zivy) { int nove_x = x; int nove_y = y; muzuJit = false; switch (this.smer) //otacim se podle smeru hodinovych rucicek { case Smer.left: if (Mapa.JeStena(nove_y - 1, nove_x) && (!Mapa.JeStena(nove_y, nove_x - 1))) { PresunDoleva(nove_y, nove_x); } else if (Mapa.JeStena(nove_y, nove_x - 1) && Mapa.JeStena(nove_y - 1, nove_x)) { smer = Smer.down; if (!Mapa.JeStena(nove_y + 1, nove_x)) { PresunDolu(nove_y, nove_x); } else { UdelejKrok(); } } else { smer = Smer.up; if (!Mapa.JeStena(nove_y - 1, nove_x) && Mapa.JeStena(nove_y - 1, nove_x + 1)) { PresunNahoru(nove_y, nove_x); } else { UdelejKrok(); } } break; case Smer.right: if (Mapa.JeStena(nove_y + 1, nove_x) && !Mapa.JeStena(nove_y, nove_x + 1)) { PresunDoprava(nove_y, nove_x); } else if (Mapa.JeStena(nove_y, nove_x + 1) && Mapa.JeStena(nove_y + 1, nove_x)) //tam kam chci je zrovna stena a po me pravici je take stena { smer = Smer.up; //otocim se tedy opacnym smerem (doleva) if (!Mapa.JeStena(nove_y - 1, nove_x)) { PresunNahoru(nove_y, nove_x); } else { UdelejKrok(); } } else { smer = Smer.down; if (!Mapa.JeStena(nove_y + 1, nove_x) && Mapa.JeStena(nove_y + 1, nove_x - 1)) { PresunDolu(nove_y, nove_x); } else { UdelejKrok(); } } break; case Smer.up: if (Mapa.JeStena(nove_y, nove_x + 1) && !Mapa.JeStena(nove_y - 1, nove_x)) { PresunNahoru(nove_y, nove_x); } else if (Mapa.JeStena(nove_y - 1, nove_x) && Mapa.JeStena(nove_y, nove_x + 1)) { smer = Smer.left; if (!Mapa.JeStena(nove_y, nove_x - 1)) { PresunDoleva(nove_y, nove_x); } else { UdelejKrok(); } } else { smer = Smer.right; if (!Mapa.JeStena(nove_y, nove_x + 1) && Mapa.JeStena(nove_y + 1, nove_x + 1)) { PresunDoprava(nove_y, nove_x); } else { UdelejKrok(); } } break; case Smer.down: if (Mapa.JeStena(nove_y, nove_x - 1) && !Mapa.JeStena(nove_y + 1, nove_x)) { PresunDolu(nove_y, nove_x); } else if (Mapa.JeStena(nove_y + 1, nove_x) && Mapa.JeStena(nove_y, nove_x - 1)) { smer = Smer.right; if (!Mapa.JeStena(nove_y, nove_x + 1)) { PresunDoprava(nove_y, nove_x); } else { UdelejKrok(); } } else { smer = Smer.left; if (!Mapa.JeStena(nove_y, nove_x - 1) && Mapa.JeStena(nove_y - 1, nove_x - 1)) { PresunDoleva(nove_y, nove_x); } else { UdelejKrok(); } } break; default: break; } // AktualizujCoJePodDuchem(); } else if (zivy) { Utec(); } else { if (oziveniTimer == 0) { Ozivni(); } else { oziveniTimer--; } } }