예제 #1
0
        /*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();
            }
        }
예제 #2
0
        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--;
                }
            }
        }
예제 #3
0
        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--;
                }
            }
        }