Esempio n. 1
0
 public override int getTargetJ()
 {
     if (Form1.manhattanDistance(Form1.pacman.I, Form1.pacman.J, i, j) > 8)
     {
         return(Form1.pacman.J);
     }
     else
     {
         return(-100);
     }
 }
Esempio n. 2
0
        // Voće se smije pojaviti na kvadratima na kojima nije
        // zid i neko drugo voće.
        public bool viableLocation(int i, int j)
        {
            bool noWall             = Form1.grid.getSquareValue(i, j) != '#';
            bool noStrawberry       = Form1.strawberry.i != i || Form1.strawberry.j != j;
            bool noRottenStrawberry = Form1.rottenStrawberry.i != i || Form1.rottenStrawberry.j != j;
            bool noPear             = Form1.pear.i != i || Form1.pear.j != j;
            bool noRottenPear       = Form1.rottenPear.i != i || Form1.rottenPear.j != j;
            bool noCherry           = Form1.cherry.i != i || Form1.cherry.j != j;
            bool noRottenCherry     = Form1.rottenCherry.i != i || Form1.rottenCherry.j != j;
            bool noGoldenApple      = Form1.goldenApple.i != i || Form1.goldenApple.j != j;
            // Pacman mora biti udaljen od voća.
            bool pacmanFarAway = Form1.manhattanDistance(Form1.pacman.I, Form1.pacman.J, i, j) > 8;

            return(noWall && noGoldenApple &&
                   noStrawberry && noRottenStrawberry &&
                   noPear && noRottenPear &&
                   noCherry && noRottenCherry &&
                   pacmanFarAway);
        }
Esempio n. 3
0
        public override void moveCharacter()
        {
            // Ako duh i dalje čeka u kući.
            if (waitElapsed < waitTreshold)
            {
                // Timer se ne povećava ako traje super kolačić.
                // if (s == State.Chase) waitElapsed += 1;

                // Duh uvjek pokušava izaći.
                waitElapsed += 1;
            }

            // Ako je duh u procesu izlaženja iz kuće.
            else if (exitingBox < 3)
            {
                currentDirection = Direction.Up;
                exitingBox      += 1;
                i -= 1; // Svi duhovi se penju gore da bi izašli iz kuće.
                loadStandardImage();
            }

            // Ako je duh na portalu.
            // Lijevi portal se nalazi na indeksu [16, 0], a desni na [16, 27].
            // Isto kao i u movableCharacter klasi.
            else if (i == 16 && j == 0 && currentDirection == Direction.Left)
            {
                j = 27;
            }
            else if (i == 16 && j == 27 && currentDirection == Direction.Right)
            {
                j = 0;
            }

            else // Ako duh nalazi na normalnom dijelu ploče.
            {
                int ti, tj;

                if (s == State.Chase)
                {
                    ti = getTargetI();
                    tj = getTargetJ();
                }
                else                               // U ovom slučaju duhovi se random ponašaju.
                {
                    ti = rand.Next(2) * 200 - 100; // -100 ili 100
                    tj = rand.Next(2) * 200 - 100; // -100 ili 100
                }


                Direction bestDir  = Direction.None;
                int       bestDist = 1000000; // "Beskonačnost".
                foreach (Direction newDir in orderedDirections)
                {
                    // Duhovi se ne smiju okretati.
                    if (newDir == oppositeDirection(currentDirection))
                    {
                        continue;
                    }

                    if (!movePossible(newDir))
                    {
                        continue;
                    }

                    int ni = i, nj = j;
                    switch (newDir)
                    {
                    case Direction.Left:
                        nj -= 1;
                        break;

                    case Direction.Right:
                        nj += 1;
                        break;

                    case Direction.Up:
                        ni -= 1;
                        break;

                    case Direction.Down:
                        ni += 1;
                        break;
                    }

                    // Euklidska udaljenost.
                    int newDist = Form1.manhattanDistance(ti, tj, ni, nj);

                    if (newDist < bestDist)
                    {
                        bestDist = newDist;
                        bestDir  = newDir;
                    }
                }

                currentDirection = bestDir;
                switch (bestDir)
                {
                case Direction.Left:
                    j -= 1;
                    break;

                case Direction.Right:
                    j += 1;
                    break;

                case Direction.Up:
                    i -= 1;
                    break;

                case Direction.Down:
                    i += 1;
                    break;
                }
                loadStandardImage();
            }


            // Ako je duh ušao, tj. izašao iz tunela od portala.
            // Duhovi se miču duplo sporije u portalu.
            if (i == 16 && (j == 5 || j == 22))
            {
                enterTunnel();
            }
            else if (i == 16 && (j == 6 || j == 21))
            {
                exitTunnel();
            }
        }