package pacman2000;

import pacman2000.maze.Graph;
import pacman2000.maze.Maze;




public class Ghost
{

    public Ghost()
    {
    }

    public Ghost(int i, int j, int col, int ai)
    {
        x = i;
        y = j;
        dir = 2;
        frame = 1;
        scared = false;
        dead = false;
        scaredTime = 0;
        fear = false;
        shock = false;
        pausedTime = 0;
        if(ai == 2 || ai == 3)
            speed = 4;
        else
        if(ai == 0)
            speed = 3;
        else
        if(ai == 1)
            speed = 5;
        if(level <= 4)
            speed--;
        if(level >= 10)
            speed++;
        if(level >= 15)
            speed++;
        defaultSpeed = speed;
        colour = col;
        AItype = ai;
        canPassDoor = false;
        leavingHouse = false;
        if(ghostCount == 0)
        {
            homeTime = 0;
            dx = -speed;
            dy = 0;
        } else
        if(ghostCount == 1)
        {
            homeTime = ghostCount * timeCount;
            dx = 0;
            dy = 3;
        } else
        {
            homeTime = ghostCount * timeCount;
            dx = 0;
            dy = -3;
        }
        ghostCount++;
        initFilenames();
    }

    public void initFilenames()
    {
        String path = "ghost/";
        ghostImageFilename = new String[113];
        ghostImageFilename[0] = (new StringBuilder()).append(path).append("null.gif").toString();
        ghostImageFilename[1] = (new StringBuilder()).append(path).append("redn1.gif").toString();
        ghostImageFilename[2] = (new StringBuilder()).append(path).append("redn2.gif").toString();
        ghostImageFilename[3] = (new StringBuilder()).append(path).append("redn3.gif").toString();
        ghostImageFilename[4] = (new StringBuilder()).append(path).append("redn4.gif").toString();
        ghostImageFilename[5] = (new StringBuilder()).append(path).append("reds1.gif").toString();
        ghostImageFilename[6] = (new StringBuilder()).append(path).append("reds2.gif").toString();
        ghostImageFilename[7] = (new StringBuilder()).append(path).append("reds3.gif").toString();
        ghostImageFilename[8] = (new StringBuilder()).append(path).append("reds4.gif").toString();
        ghostImageFilename[9] = (new StringBuilder()).append(path).append("redw1.gif").toString();
        ghostImageFilename[10] = (new StringBuilder()).append(path).append("redw2.gif").toString();
        ghostImageFilename[11] = (new StringBuilder()).append(path).append("redw3.gif").toString();
        ghostImageFilename[12] = (new StringBuilder()).append(path).append("redw4.gif").toString();
        ghostImageFilename[13] = (new StringBuilder()).append(path).append("rede1.gif").toString();
        ghostImageFilename[14] = (new StringBuilder()).append(path).append("rede2.gif").toString();
        ghostImageFilename[15] = (new StringBuilder()).append(path).append("rede3.gif").toString();
        ghostImageFilename[16] = (new StringBuilder()).append(path).append("rede4.gif").toString();
        ghostImageFilename[17] = (new StringBuilder()).append(path).append("purplen1.gif").toString();
        ghostImageFilename[18] = (new StringBuilder()).append(path).append("purplen2.gif").toString();
        ghostImageFilename[19] = (new StringBuilder()).append(path).append("purplen3.gif").toString();
        ghostImageFilename[20] = (new StringBuilder()).append(path).append("purplen4.gif").toString();
        ghostImageFilename[21] = (new StringBuilder()).append(path).append("purples1.gif").toString();
        ghostImageFilename[22] = (new StringBuilder()).append(path).append("purples2.gif").toString();
        ghostImageFilename[23] = (new StringBuilder()).append(path).append("purples3.gif").toString();
        ghostImageFilename[24] = (new StringBuilder()).append(path).append("purples4.gif").toString();
        ghostImageFilename[25] = (new StringBuilder()).append(path).append("purplew1.gif").toString();
        ghostImageFilename[26] = (new StringBuilder()).append(path).append("purplew2.gif").toString();
        ghostImageFilename[27] = (new StringBuilder()).append(path).append("purplew3.gif").toString();
        ghostImageFilename[28] = (new StringBuilder()).append(path).append("purplew4.gif").toString();
        ghostImageFilename[29] = (new StringBuilder()).append(path).append("purplee1.gif").toString();
        ghostImageFilename[30] = (new StringBuilder()).append(path).append("purplee2.gif").toString();
        ghostImageFilename[31] = (new StringBuilder()).append(path).append("purplee3.gif").toString();
        ghostImageFilename[32] = (new StringBuilder()).append(path).append("purplee4.gif").toString();
        ghostImageFilename[33] = (new StringBuilder()).append(path).append("greenn1.gif").toString();
        ghostImageFilename[34] = (new StringBuilder()).append(path).append("greenn2.gif").toString();
        ghostImageFilename[35] = (new StringBuilder()).append(path).append("greenn3.gif").toString();
        ghostImageFilename[36] = (new StringBuilder()).append(path).append("greenn4.gif").toString();
        ghostImageFilename[37] = (new StringBuilder()).append(path).append("greens1.gif").toString();
        ghostImageFilename[38] = (new StringBuilder()).append(path).append("greens2.gif").toString();
        ghostImageFilename[39] = (new StringBuilder()).append(path).append("greens3.gif").toString();
        ghostImageFilename[40] = (new StringBuilder()).append(path).append("greens4.gif").toString();
        ghostImageFilename[41] = (new StringBuilder()).append(path).append("greenw1.gif").toString();
        ghostImageFilename[42] = (new StringBuilder()).append(path).append("greenw2.gif").toString();
        ghostImageFilename[43] = (new StringBuilder()).append(path).append("greenw3.gif").toString();
        ghostImageFilename[44] = (new StringBuilder()).append(path).append("greenw4.gif").toString();
        ghostImageFilename[45] = (new StringBuilder()).append(path).append("greene1.gif").toString();
        ghostImageFilename[46] = (new StringBuilder()).append(path).append("greene2.gif").toString();
        ghostImageFilename[47] = (new StringBuilder()).append(path).append("greene3.gif").toString();
        ghostImageFilename[48] = (new StringBuilder()).append(path).append("greene4.gif").toString();
        ghostImageFilename[49] = (new StringBuilder()).append(path).append("cyann1.gif").toString();
        ghostImageFilename[50] = (new StringBuilder()).append(path).append("cyann2.gif").toString();
        ghostImageFilename[51] = (new StringBuilder()).append(path).append("cyann3.gif").toString();
        ghostImageFilename[52] = (new StringBuilder()).append(path).append("cyann4.gif").toString();
        ghostImageFilename[53] = (new StringBuilder()).append(path).append("cyans1.gif").toString();
        ghostImageFilename[54] = (new StringBuilder()).append(path).append("cyans2.gif").toString();
        ghostImageFilename[55] = (new StringBuilder()).append(path).append("cyans3.gif").toString();
        ghostImageFilename[56] = (new StringBuilder()).append(path).append("cyans4.gif").toString();
        ghostImageFilename[57] = (new StringBuilder()).append(path).append("cyanw1.gif").toString();
        ghostImageFilename[58] = (new StringBuilder()).append(path).append("cyanw2.gif").toString();
        ghostImageFilename[59] = (new StringBuilder()).append(path).append("cyanw3.gif").toString();
        ghostImageFilename[60] = (new StringBuilder()).append(path).append("cyanw4.gif").toString();
        ghostImageFilename[61] = (new StringBuilder()).append(path).append("cyane1.gif").toString();
        ghostImageFilename[62] = (new StringBuilder()).append(path).append("cyane2.gif").toString();
        ghostImageFilename[63] = (new StringBuilder()).append(path).append("cyane3.gif").toString();
        ghostImageFilename[64] = (new StringBuilder()).append(path).append("cyane4.gif").toString();
        ghostImageFilename[65] = (new StringBuilder()).append(path).append("scaredn1.gif").toString();
        ghostImageFilename[66] = (new StringBuilder()).append(path).append("scaredn2.gif").toString();
        ghostImageFilename[67] = (new StringBuilder()).append(path).append("scaredn3.gif").toString();
        ghostImageFilename[68] = (new StringBuilder()).append(path).append("scaredn4.gif").toString();
        ghostImageFilename[69] = (new StringBuilder()).append(path).append("scareds1.gif").toString();
        ghostImageFilename[70] = (new StringBuilder()).append(path).append("scareds2.gif").toString();
        ghostImageFilename[71] = (new StringBuilder()).append(path).append("scareds3.gif").toString();
        ghostImageFilename[72] = (new StringBuilder()).append(path).append("scareds4.gif").toString();
        ghostImageFilename[73] = (new StringBuilder()).append(path).append("scaredw1.gif").toString();
        ghostImageFilename[74] = (new StringBuilder()).append(path).append("scaredw2.gif").toString();
        ghostImageFilename[75] = (new StringBuilder()).append(path).append("scaredw3.gif").toString();
        ghostImageFilename[76] = (new StringBuilder()).append(path).append("scaredw4.gif").toString();
        ghostImageFilename[77] = (new StringBuilder()).append(path).append("scarede1.gif").toString();
        ghostImageFilename[78] = (new StringBuilder()).append(path).append("scarede2.gif").toString();
        ghostImageFilename[79] = (new StringBuilder()).append(path).append("scarede3.gif").toString();
        ghostImageFilename[80] = (new StringBuilder()).append(path).append("scarede4.gif").toString();
        ghostImageFilename[81] = (new StringBuilder()).append(path).append("scared2n1.gif").toString();
        ghostImageFilename[82] = (new StringBuilder()).append(path).append("scared2n2.gif").toString();
        ghostImageFilename[83] = (new StringBuilder()).append(path).append("scared2n3.gif").toString();
        ghostImageFilename[84] = (new StringBuilder()).append(path).append("scared2n4.gif").toString();
        ghostImageFilename[85] = (new StringBuilder()).append(path).append("scared2s1.gif").toString();
        ghostImageFilename[86] = (new StringBuilder()).append(path).append("scared2s2.gif").toString();
        ghostImageFilename[87] = (new StringBuilder()).append(path).append("scared2s3.gif").toString();
        ghostImageFilename[88] = (new StringBuilder()).append(path).append("scared2s4.gif").toString();
        ghostImageFilename[89] = (new StringBuilder()).append(path).append("scared2w1.gif").toString();
        ghostImageFilename[90] = (new StringBuilder()).append(path).append("scared2w2.gif").toString();
        ghostImageFilename[91] = (new StringBuilder()).append(path).append("scared2w3.gif").toString();
        ghostImageFilename[92] = (new StringBuilder()).append(path).append("scared2w4.gif").toString();
        ghostImageFilename[93] = (new StringBuilder()).append(path).append("scared2e1.gif").toString();
        ghostImageFilename[94] = (new StringBuilder()).append(path).append("scared2e2.gif").toString();
        ghostImageFilename[95] = (new StringBuilder()).append(path).append("scared2e3.gif").toString();
        ghostImageFilename[96] = (new StringBuilder()).append(path).append("scared2e4.gif").toString();
        ghostImageFilename[97] = (new StringBuilder()).append(path).append("eyesn1.gif").toString();
        ghostImageFilename[98] = (new StringBuilder()).append(path).append("eyesn2.gif").toString();
        ghostImageFilename[99] = (new StringBuilder()).append(path).append("eyesn3.gif").toString();
        ghostImageFilename[100] = (new StringBuilder()).append(path).append("eyesn4.gif").toString();
        ghostImageFilename[101] = (new StringBuilder()).append(path).append("eyess1.gif").toString();
        ghostImageFilename[102] = (new StringBuilder()).append(path).append("eyess2.gif").toString();
        ghostImageFilename[103] = (new StringBuilder()).append(path).append("eyess3.gif").toString();
        ghostImageFilename[104] = (new StringBuilder()).append(path).append("eyess4.gif").toString();
        ghostImageFilename[105] = (new StringBuilder()).append(path).append("eyesw1.gif").toString();
        ghostImageFilename[106] = (new StringBuilder()).append(path).append("eyesw2.gif").toString();
        ghostImageFilename[107] = (new StringBuilder()).append(path).append("eyesw3.gif").toString();
        ghostImageFilename[108] = (new StringBuilder()).append(path).append("eyesw4.gif").toString();
        ghostImageFilename[109] = (new StringBuilder()).append(path).append("eyese1.gif").toString();
        ghostImageFilename[110] = (new StringBuilder()).append(path).append("eyese2.gif").toString();
        ghostImageFilename[111] = (new StringBuilder()).append(path).append("eyese3.gif").toString();
        ghostImageFilename[112] = (new StringBuilder()).append(path).append("eyese4.gif").toString();
    }

    public static void setLevel(int l)
    {
        level = l;
        if(level <= 5)
            SCARED_SPEED = 2;
        else
            SCARED_SPEED = 3;
    }

    public static void setSpeed(double s)
    {
        game_speed = s;
    }

    public int getDirection()
    {
        if(dx < 0)
            return 2;
        if(dx > 0)
            return 3;
        if(dy < 0)
            return 0;
        return dy <= 0 ? 0 : 1;
    }

    public int getGhostFrame()
    {
        int num = getDirection();
        num *= 4;
        num += frame;
        if(!scared && !dead)
            num += colour * 16;
        if(scared)
            if(scaredTime > 50)
                num += 64;
            else
            if(scaredTime % 10 < 5)
                num += 64;
            else
                num += 80;
        if(dead)
            num += 96;
        return num;
    }

    public void getScared(Maze theMaze, int t)
    {
        if(leavingHouse)
        {
            speed = SCARED_SPEED;
            scared = true;
            scaredTime = t;
            return;
        }
        if(homeTime > 0)
        {
            homeTime = homeTime + t;
            speed = SCARED_SPEED;
            scared = true;
            scaredTime = t;
            return;
        }
        dx = -dx / speed;
        dy = -dy / speed;
        olddx = dx;
        olddy = dy;
        scared = true;
        scaredTime = t;
        speed = SCARED_SPEED;
        dx = dx * speed;
        dy = dy * speed;
        if(!checkMove(theMaze))
            bestDirection(theMaze);
    }

    public void recalcSpeed()
    {
        if(dx != 0)
            dx = dx / Math.abs(dx);
        if(dy != 0)
            dy = dy / Math.abs(dy);
        dx = dx * speed;
        dy = dy * speed;
    }

    public void moveGhost(Maze theMaze, Pacman player)
    {
        int a = x / 16;
        int b = y / 16;
        if(dead)
            canPassDoor = true;
        if(scared)
        {
            scaredTime--;
            if(scaredTime == 0)
            {
                scared = false;
                speed = defaultSpeed;
                recalcSpeed();
            }
        }
        olddx = dx;
        olddy = dy;
        frame++;
        if(frame > 4)
            frame = 1;
        nodeCloseCheck();
        if(pausedTime > 0)
        {
            pausedTime--;
            if(pausedTime == 0)
            {
                fear = false;
                shock = false;
            }
            if(shock)
                return;
        } else
        if(scared)
        {
            double rnd = Math.random();
            if(rnd < 0.0050000000000000001D * (1.0D / (double)noOfGhosts))
            {
                fear = true;
                pausedTime = 20;
                SoundManager.playSound(SoundManager.FEAR);
            }
        }
        if(canPassDoor && y == (theMaze.getMazeY() / 2) * 16)
            canPassDoor = false;
        if(dead && a >= (theMaze.getMazeX() - 1) / 2 && a <= (theMaze.getMazeX() + 1) / 2 && b >= (theMaze.getMazeY() - 1) / 2 && b <= (theMaze.getMazeY() + 1) / 2)
        {
            canPassDoor = true;
            speed = defaultSpeed;
            dx = 0;
            dy = -speed;
            dead = false;
            scared = false;
            homeTime = 0;
            x = ((theMaze.getMazeX() - 1) * 16) / 2;
            y = (theMaze.getMazeY() * 16) / 2;
            pausedTime = 20;
            shock = true;
        }
        if(homeTime == 0 && !dead && a > theMaze.getMazeX() / 2 - 3 && a <= theMaze.getMazeX() / 2 + 2 && b >= theMaze.getMazeY() / 2 - 2 && b <= theMaze.getMazeY() / 2 + 2)
        {
            canPassDoor = true;
            leavingHouse = true;
            dy = -speed;
            dx = 0;
            if(Math.abs(x - ((theMaze.getMazeX() - 2) * 16) / 2) < 16)
            {
                x = ((theMaze.getMazeX() - 2) * 16) / 2;
                dx = 0;
                dy = -speed;
            }
            if(x < ((theMaze.getMazeX() - 2) * 16) / 2)
            {
                dx = 0;
                dy = -speed;
                x = ((theMaze.getMazeX() - 2) * 16) / 2;
            } else
            if(x > (theMaze.getMazeX() * 16) / 2)
            {
                dx = 0;
                dy = -speed;
                x = (theMaze.getMazeX() * 16) / 2;
            }
        }
        if(homeTime > 0)
        {
            homeTime--;
            if(y <= (theMaze.getMazeY() / 2) * 16 && dy < 0)
                dy = -dy;
            else
            if(y >= (theMaze.getMazeY() / 2 + 2) * 16 && dy > 0)
                dy = -dy;
            y = y + dy;
        }
        if(homeTime > 0)
            return;
        if(x >= ((theMaze.getMazeX() - 2) * 16) / 2 && x <= (theMaze.getMazeX() * 16) / 2 && y == (theMaze.getMazeY() / 2 - 3) * 16 && dy < 0 && !dead)
        {
            double rnd = Math.random();
            if(rnd < 0.5D)
            {
                dx = -speed;
                dy = 0;
            } else
            {
                dx = speed;
                dy = 0;
            }
            canPassDoor = false;
            leavingHouse = false;
        }
        nodeCheck(theMaze, player);
        if(!checkMove(theMaze))
            bestDirection(theMaze);
        if(checkCheat())
            bestDirection(theMaze);
        x = x + dx;
        y = y + dy;
        if(x < 0)
            x = (theMaze.getMazeX() - 1) * 16;
        if(x > (theMaze.getMazeX() - 1) * 16)
            x = 0;
    }

    public boolean checkCheat()
    {
        if(homeTime != 0)
            return false;
        if(olddy == dy && olddx == dx)
            return false;
        return olddy == dy || olddx == dx;
    }

    public void bestDirection(Maze theMaze)
    {
        if(dx < 0)
        {
            dx = 0;
            dy = -speed;
            if(checkMove(theMaze))
                return;
            dx = 0;
            dy = speed;
            if(checkMove(theMaze))
                return;
            dx = speed;
            dy = 0;
            if(checkMove(theMaze))
                return;
        } else
        if(dx > 0)
        {
            dx = 0;
            dy = -speed;
            if(checkMove(theMaze))
                return;
            dx = 0;
            dy = speed;
            if(checkMove(theMaze))
                return;
            dx = -speed;
            dy = 0;
            if(checkMove(theMaze))
                return;
        } else
        if(dy < 0)
        {
            dx = -speed;
            dy = 0;
            if(checkMove(theMaze))
                return;
            dx = speed;
            dy = 0;
            if(checkMove(theMaze))
                return;
            dx = 0;
            dy = speed;
            if(checkMove(theMaze))
                return;
        } else
        if(dy > 0)
        {
            dx = -speed;
            dy = 0;
            if(checkMove(theMaze))
                return;
            dx = speed;
            dy = 0;
            if(checkMove(theMaze))
                return;
            dx = 0;
            dy = -speed;
            if(checkMove(theMaze))
                return;
        }
    }

    public boolean checkMove(Maze theMaze)
    {
        if(x % 16 != 0 && y % 16 == 0 || x % 16 == 0 && y % 16 != 0)
            return true;
        if((x + dx) % 16 != 0 && (y + dy) % 16 != 0)
            return false;
        int tx = x / 16;
        int ty = y / 16;
        if(dx > 0)
            tx++;
        if(dx < 0)
            tx--;
        if(dy > 0)
            ty++;
        if(dy < 0)
            ty--;
        if(tx < 0 || tx >= theMaze.getMazeX())
            return true;
        if(ty < 0 || ty >= theMaze.getMazeY())
            return false;
        if(theMaze.wall(tx, ty))
            return false;
        return theMaze.getBlock(tx, ty) != 30 || canPassDoor || dead;
    }

    public void nodeCloseCheck()
    {
        if(homeTime > 0)
            return;
        int range = speed - 1;
        int i = x % 16;
        int j = y % 16;
        if(i <= range)
            x = x - i;
        else
        if(i >= 16 - range)
            x = x + (16 - i);
        if(j <= range)
            y = y - j;
        else
        if(j >= 16 - range)
            y = y + (16 - j);
    }

    public char randomDirection()
    {
        char d = 'a';
        double rnd = Math.random();
        if(rnd < 0.25D)
            d = 'l';
        else
        if(rnd < 0.5D)
            d = 'r';
        else
        if(rnd < 0.75D)
            d = 'u';
        else
            d = 'd';
        return d;
    }

    public char ghostDir(Maze theMaze, Pacman player)
    {
        char d = 'a';
        if(dx < 0)
            d = 'l';
        if(dx > 0)
            d = 'r';
        if(dy < 0)
            d = 'u';
        if(dy > 0)
            d = 'd';
        if(leavingHouse)
            return d;
        if(dead)
        {
            char ghostdir = theMaze.getGraph().newDir(d, x / 16, y / 16, theMaze.getMazeX() / 2, theMaze.getMazeY() / 2);
            return ghostdir;
        }
        if(AItype == 0)
        {
            char ghostdir = theMaze.getGraph().newDir(d, x / 16, y / 16, player.x / 16, player.y / 16);
            return ghostdir;
        }
        if(AItype == 1)
        {
            double rnd = Math.random();
            if(rnd < 0.10000000000000001D)
            {
                char ghostdir = theMaze.getGraph().newDir(d, x / 16, y / 16, player.x / 16, player.y / 16);
                return ghostdir;
            } else
            {
                char ghostdir = randomDirection();
                return ghostdir;
            }
        }
        if(AItype == 2)
        {
            if(!sameQuadrant(theMaze, player))
            {
                char ghostdir = moveToQuadrant(theMaze, player);
                return ghostdir;
            }
            double rnd = Math.random();
            if(rnd < 0.10000000000000001D)
            {
                char ghostdir = theMaze.getGraph().newDir(d, x / 16, y / 16, player.x / 16, player.y / 16);
                return ghostdir;
            } else
            {
                char ghostdir = randomDirection();
                return ghostdir;
            }
        }
        if(AItype == 3)
        {
            double rnd = Math.random();
            if(rnd < 0.10000000000000001D)
            {
                char ghostdir = theMaze.getGraph().newDir(d, x / 16, y / 16, player.x / 16, player.y / 16);
                return ghostdir;
            }
            rnd = Math.random();
            if(rnd < 0.5D)
            {
                char ghostdir = theMaze.getGraph().newDir(d, x / 16, y / 16, player.x / 16, player.y / 16);
                ghostdir = invertDirection(ghostdir);
                return ghostdir;
            } else
            {
                char ghostdir = randomDirection();
                return ghostdir;
            }
        } else
        {
            return d;
        }
    }

    public char invertDirection(char a)
    {
        char b = 'a';
        if(a == 'u')
            b = 'd';
        if(a == 'd')
            b = 'u';
        if(a == 'l')
            b = 'r';
        if(a == 'r')
            b = 'l';
        return b;
    }

    public char moveToQuadrant(Maze theMaze, Pacman player)
    {
        int a = getQuadrant(theMaze, player.x, player.y);
        int i;
        int j;
        if(a == 1)
        {
            i = 2;
            j = 2;
        } else
        if(a == 2)
        {
            i = theMaze.getMazeX() - 3;
            j = 2;
        } else
        if(a == 3)
        {
            i = 2;
            j = theMaze.getMazeY() - 3;
        } else
        {
            i = theMaze.getMazeX() - 3;
            j = theMaze.getMazeY() - 3;
        }
        char d = 'a';
        if(dx < 0)
            d = 'l';
        if(dx > 0)
            d = 'r';
        if(dy < 0)
            d = 'u';
        if(dy > 0)
            d = 'd';
        char ghostdir = theMaze.getGraph().newDir(d, x / 16, y / 16, i, j);
        return ghostdir;
    }

    public boolean sameQuadrant(Maze theMaze, Pacman player)
    {
        int a = getQuadrant(theMaze, player.x, player.y);
        int b = getQuadrant(theMaze, x, y);
        return a == b;
    }

    public int getQuadrant(Maze theMaze, int i, int j)
    {
        if(i < ((theMaze.getMazeX() - 1) / 2) * 16)
            return j >= ((theMaze.getMazeY() - 1) / 2) * 16 ? 3 : 1;
        return j >= ((theMaze.getMazeY() - 1) / 2) * 16 ? 4 : 2;
    }

    public void nodeCheck(Maze theMaze, Pacman player)
    {
        if(homeTime != 0)
            return;
        if(x % 16 != 0 || y % 16 != 0)
            return;
        char d = 'a';
        if(dx < 0)
            d = 'l';
        if(dx > 0)
            d = 'r';
        if(dy < 0)
            d = 'u';
        if(dy > 0)
            d = 'd';
        char ghostdir = ghostDir(theMaze, player);
        if(d != ghostdir)
            if(!scared)
            {
                if(ghostdir == 'u')
                {
                    dx = 0;
                    dy = -speed;
                } else
                if(ghostdir == 'd')
                {
                    dx = 0;
                    dy = speed;
                } else
                if(ghostdir == 'l')
                {
                    dx = -speed;
                    dy = 0;
                } else
                if(ghostdir == 'r')
                {
                    dx = speed;
                    dy = 0;
                }
            } else
            if(scared)
                if(ghostdir == 'u')
                {
                    dx = 0;
                    dy = speed;
                } else
                if(ghostdir == 'd')
                {
                    dx = 0;
                    dy = -speed;
                } else
                if(ghostdir == 'l')
                {
                    dx = speed;
                    dy = 0;
                } else
                if(ghostdir == 'r')
                {
                    dx = -speed;
                    dy = 0;
                }
    }

    static final int BLOCKSIZE = 16;
    static final int INITIAL_SPEED = 4;
    static final int SPEED = 4;
    static final double FAST_SPEED = 1.25D;
    static final double SLOW_SPEED = 0.90000000000000002D;
    static final double RANDOM_AI = 0.10000000000000001D;
    static final double FEAR_CHANCE = 0.0050000000000000001D;
    static final int FEAR_TIME = 20;
    static int SCARED_SPEED = 2;
    static final int UP = 0;
    static final int DOWN = 1;
    static final int LEFT = 2;
    static final int RIGHT = 3;
    static final int FRAMES = 4;
    static final int FIRST_FRAME = 1;
    static final int GHOST_FRAMES = 113;
    static final int SINGLE_GHOST_FRAMES = 16;
    static final int RED = 0;
    static final int PURPLE = 1;
    static final int GREEN = 2;
    static final int CYAN = 3;
    static final int SCARED = 4;
    static final int SCARED2 = 5;
    static final int EYES = 6;
    static final int FOLLOWS = 0;
    static final int FAST = 1;
    static final int QUADRANT = 2;
    static final int STUPID = 3;
    static int ghostCount = 0;
    static int timeCount = 100;
    static int gameFrame = 0;
    static int level = 1;
    static double game_speed = 1.0D;
    int x;
    int y;
    int dir;
    int dx;
    int dy;
    int olddx;
    int olddy;
    int frame;
    int AItype;
    int colour;
    int defaultSpeed;
    int speed;
    int homeTime;
    int scaredTime;
    boolean scared;
    boolean dead;
    boolean canPassDoor;
    boolean leavingHouse;
    boolean fear;
    boolean shock;
    int pausedTime;
    static String ghostImageFilename[];
    static int noOfGhosts = 4;

}
最近下载更多
wangjialiang1  LV17 2023年8月24日
yerwiu  LV10 2023年8月12日
养乐多  LV3 2021年4月28日
iRichard1314  LV6 2020年9月23日
zipper  LV8 2020年1月8日
小黑鱼  LV3 2019年12月18日
zhangxinwangheng  LV2 2019年12月8日
mCptoucb  LV1 2019年12月8日
WUJIEYANGYULING  LV4 2019年11月24日
qweqweqwe321321233  LV10 2019年11月7日
最近浏览更多
暂无贡献等级
wangjialiang1  LV17 2023年8月23日
yerwiu  LV10 2023年8月12日
Jane Jenny 2022年12月4日
暂无贡献等级
special__tt  LV1 2022年10月27日
203698476 2021年12月22日
暂无贡献等级
windyLS 2021年12月12日
暂无贡献等级
alexcheung  LV3 2021年12月10日
会吹牛皮的羊 2021年7月20日
暂无贡献等级
pipichao  LV6 2021年6月20日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友