Results 1 to 4 of 4
  1. #1
    Bullfrog is offline Member
    Join Date
    Jun 2010
    Posts
    2
    Rep Power
    0

    Default Huge problem. PacMan game.

    Hi

    Im new here , i've just started my IT studies.
    Im new to Java , and i have some problems with man PacMan app.
    I have alot of source code here.
    Java Code:
    package pacman;
    
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Event;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    
    import javax.swing.ImageIcon;
    import javax.swing.JPanel;
    import javax.swing.Timer;
    
    
    public class Board extends JPanel implements ActionListener {
    
        Dimension d;
        Font smallfont = new Font("Helvetica", Font.BOLD, 14);
    
        FontMetrics fmsmall, fmlarge;
        Image ii;
        Color dotcolor = new Color(192, 192, 0);
        Color mazecolor;
    
        boolean ingame = false;
        boolean dying = false;
    
        final int blocksize = 24;
        final int nrofblocks = 15;
        final int scrsize = nrofblocks * blocksize;
        final int pacanimdelay = 2;
        final int pacmananimcount = 4;
        final int maxghosts = 12;
        final int pacmanspeed = 6;
    
        int pacanimcount = pacanimdelay;
        int pacanimdir = 1;
        int pacmananimpos = 0;
        int nrofghosts = 6;
        int pacsleft, score;
        int deathcounter;
        int[] dx, dy;
        int[] ghostx, ghosty, ghostdx, ghostdy, ghostspeed;
    
        Image ghost;
        Image pacman1, pacman2up, pacman2left, pacman2right, pacman2down;
        Image pacman3up, pacman3down, pacman3left, pacman3right;
        Image pacman4up, pacman4down, pacman4left, pacman4right;
    
        int pacmanx, pacmany, pacmandx, pacmandy;
        int reqdx, reqdy, viewdx, viewdy;
    
        final short leveldata[] =
        { 19, 26, 26, 26, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 22,
          21, 0,  0,  0,  17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 20,
          21, 0,  0,  0,  17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 20,
          21, 0,  0,  0,  17, 16, 16, 24, 16, 16, 16, 16, 16, 16, 20,
          17, 18, 18, 18, 16, 16, 20, 0,  17, 16, 16, 16, 16, 16, 20,
          17, 16, 16, 16, 16, 16, 20, 0,  17, 16, 16, 16, 16, 24, 20,
          25, 16, 16, 16, 24, 24, 28, 0,  25, 24, 24, 16, 20, 0,  21,
          1,  17, 16, 20, 0,  0,  0,  0,  0,  0,  0,  17, 20, 0,  21,
          1,  17, 16, 16, 18, 18, 22, 0,  19, 18, 18, 16, 20, 0,  21,
          1,  17, 16, 16, 16, 16, 20, 0,  17, 16, 16, 16, 20, 0,  21,
          1,  17, 16, 16, 16, 16, 20, 0,  17, 16, 16, 16, 20, 0,  21,
          1,  17, 16, 16, 16, 16, 16, 18, 16, 16, 16, 16, 20, 0,  21,
          1,  17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 20, 0,  21,
          1,  25, 24, 24, 24, 24, 24, 24, 24, 24, 16, 16, 16, 18, 20,
          9,  8,  8,  8,  8,  8,  8,  8,  8,  8,  25, 24, 24, 24, 28 };
    
        final int validspeeds[] = { 1, 2, 3, 4, 6, 8 };
        final int maxspeed = 6;
    
        int currentspeed = 3;
        short[] screendata;
        Timer timer;
    
    
        public Board() {
    
            GetImages();
    
            addKeyListener(new TAdapter());
    
            screendata = new short[nrofblocks * nrofblocks];
            mazecolor = new Color(5, 100, 5);
            setFocusable(true);
    
            d = new Dimension(400, 400);
    
            setBackground(Color.black);
            setDoubleBuffered(true);
    
            ghostx = new int[maxghosts];
            ghostdx = new int[maxghosts];
            ghosty = new int[maxghosts];
            ghostdy = new int[maxghosts];
            ghostspeed = new int[maxghosts];
            dx = new int[4];
            dy = new int[4];
            timer = new Timer(40, this);
            timer.start();
        }
    
        @Override
        public void addNotify() {
            super.addNotify();
            GameInit();
        }
    
    
        public void DoAnim() {
            pacanimcount--;
            if (pacanimcount <= 0) {
                pacanimcount = pacanimdelay;
                pacmananimpos = pacmananimpos + pacanimdir;
                if (pacmananimpos == (pacmananimcount - 1) || pacmananimpos == 0)
                    pacanimdir = -pacanimdir;
            }
        }
    
    
        public void PlayGame(Graphics2D g2d) {
            if (dying) {
                Death();
            } else {
                MovePacMan();
                DrawPacMan(g2d);
                moveGhosts(g2d);
                CheckMaze();
            }
        }
    
    
        public void ShowIntroScreen(Graphics2D g2d) {
    
            g2d.setColor(new Color(0, 32, 48));
            g2d.fillRect(50, scrsize / 2 - 30, scrsize - 100, 50);
            g2d.setColor(Color.white);
            g2d.drawRect(50, scrsize / 2 - 30, scrsize - 100, 50);
    
            String s = "Press s to start.";
            Font small = new Font("Helvetica", Font.BOLD, 14);
            FontMetrics metr = this.getFontMetrics(small);
    
            g2d.setColor(Color.white);
            g2d.setFont(small);
            g2d.drawString(s, (scrsize - metr.stringWidth(s)) / 2, scrsize / 2);
        }
    
    
        public void DrawScore(Graphics2D g) {
            int i;
            String s;
    
            g.setFont(smallfont);
            g.setColor(new Color(96, 128, 255));
            s = "Score: " + score;
            g.drawString(s, scrsize / 2 + 96, scrsize + 16);
            for (i = 0; i < pacsleft; i++) {
                g.drawImage(pacman3left, i * 28 + 8, scrsize + 1, this);
            }
        }
    
    
        public void CheckMaze() {
            short i = 0;
            boolean finished = true;
    
            while (i < nrofblocks * nrofblocks && finished) {
                if ((screendata[i] & 48) != 0)
                    finished = false;
                i++;
            }
    
            if (finished) {
                score += 50;
    
                if (nrofghosts < maxghosts)
                    nrofghosts++;
                if (currentspeed < maxspeed)
                    currentspeed++;
                LevelInit();
            }
        }
    
        public void Death() {
    
            pacsleft--;
            if (pacsleft == 0)
                ingame = false;
            LevelContinue();
        }
    
    
        public void moveGhosts(Graphics2D g2d) {
            short i;
            int pos;
            int count;
    
            for (i = 0; i < nrofghosts; i++) {
                if (ghostx[i] % blocksize == 0 && ghosty[i] % blocksize == 0) {
                    pos =
     ghostx[i] / blocksize + nrofblocks * (int)(ghosty[i] / blocksize);
    
                    count = 0;
                    if ((screendata[pos] & 1) == 0 && ghostdx[i] != 1) {
                        dx[count] = -1;
                        dy[count] = 0;
                        count++;
                    }
                    if ((screendata[pos] & 2) == 0 && ghostdy[i] != 1) {
                        dx[count] = 0;
                        dy[count] = -1;
                        count++;
                    }
                    if ((screendata[pos] & 4) == 0 && ghostdx[i] != -1) {
                        dx[count] = 1;
                        dy[count] = 0;
                        count++;
                    }
                    if ((screendata[pos] & 8) == 0 && ghostdy[i] != -1) {
                        dx[count] = 0;
                        dy[count] = 1;
                        count++;
                    }
    
                    if (count == 0) {
                        if ((screendata[pos] & 15) == 15) {
                            ghostdx[i] = 0;
                            ghostdy[i] = 0;
                        } else {
                            ghostdx[i] = -ghostdx[i];
                            ghostdy[i] = -ghostdy[i];
                        }
                    } else {
                        count = (int)(Math.random() * count);
                        if (count > 3)
                            count = 3;
                        ghostdx[i] = dx[count];
                        ghostdy[i] = dy[count];
                    }
    
                }
                ghostx[i] = ghostx[i] + (ghostdx[i] * ghostspeed[i]);
                ghosty[i] = ghosty[i] + (ghostdy[i] * ghostspeed[i]);
                drawGhost(g2d, ghostx[i] + 1, ghosty[i] + 1);
    
                if (pacmanx > (ghostx[i] - 12) && pacmanx < (ghostx[i] + 12) &&
                    pacmany > (ghosty[i] - 12) && pacmany < (ghosty[i] + 12) &&
                    ingame) {
    
                    dying = true;
                    deathcounter = 64;
    
                }
            }
        }
    
    
        public void DrawGhost(Graphics2D g2d, int x, int y) {
            g2d.drawImage(ghost, x, y, this);
        }
    
    
        public void MovePacMan() {
            int pos;
            short ch;
    
            if (reqdx == -pacmandx && reqdy == -pacmandy) {
                pacmandx = reqdx;
                pacmandy = reqdy;
                viewdx = pacmandx;
                viewdy = pacmandy;
            }
            if (pacmanx % blocksize == 0 && pacmany % blocksize == 0) {
                pos =
     pacmanx / blocksize + nrofblocks * (int)(pacmany / blocksize);
                ch = screendata[pos];
    
                if ((ch & 16) != 0) {
                    screendata[pos] = (short)(ch & 15);
                    score++;
                }
    
                if (reqdx != 0 || reqdy != 0) {
                    if (!((reqdx == -1 && reqdy == 0 && (ch & 1) != 0) ||
                          (reqdx == 1 && reqdy == 0 && (ch & 4) != 0) ||
                          (reqdx == 0 && reqdy == -1 && (ch & 2) != 0) ||
                          (reqdx == 0 && reqdy == 1 && (ch & 8) != 0))) {
                        pacmandx = reqdx;
                        pacmandy = reqdy;
                        viewdx = pacmandx;
                        viewdy = pacmandy;
                    }
                }
    
                // Check for standstill
                if ((pacmandx == -1 && pacmandy == 0 && (ch & 1) != 0) ||
                    (pacmandx == 1 && pacmandy == 0 && (ch & 4) != 0) ||
                    (pacmandx == 0 && pacmandy == -1 && (ch & 2) != 0) ||
                    (pacmandx == 0 && pacmandy == 1 && (ch & 8) != 0)) {
                    pacmandx = 0;
                    pacmandy = 0;
                }
            }
            pacmanx = pacmanx + pacmanspeed * pacmandx;
            pacmany = pacmany + pacmanspeed * pacmandy;
        }
    
    
        public void DrawPacMan(Graphics2D g2d) {
            if (viewdx == -1)
                DrawPacManLeft(g2d);
            else if (viewdx == 1)
                DrawPacManRight(g2d);
            else if (viewdy == -1)
                DrawPacManUp(g2d);
            else
                DrawPacManDown(g2d);
        }
    
        public void DrawPacManUp(Graphics2D g2d) {
            switch (pacmananimpos) {
            case 1:
                g2d.drawImage(pacman2up, pacmanx + 1, pacmany + 1, this);
                break;
            case 2:
                g2d.drawImage(pacman3up, pacmanx + 1, pacmany + 1, this);
                break;
            case 3:
                g2d.drawImage(pacman4up, pacmanx + 1, pacmany + 1, this);
                break;
            default:
                g2d.drawImage(pacman1, pacmanx + 1, pacmany + 1, this);
                break;
            }
        }
    
    
        public void DrawPacManDown(Graphics2D g2d) {
            switch (pacmananimpos) {
            case 1:
                g2d.drawImage(pacman2down, pacmanx + 1, pacmany + 1, this);
                break;
            case 2:
                g2d.drawImage(pacman3down, pacmanx + 1, pacmany + 1, this);
                break;
            case 3:
                g2d.drawImage(pacman4down, pacmanx + 1, pacmany + 1, this);
                break;
            default:
                g2d.drawImage(pacman1, pacmanx + 1, pacmany + 1, this);
                break;
            }
        }
    
    
        public void DrawPacManLeft(Graphics2D g2d) {
            switch (pacmananimpos) {
            case 1:
                g2d.drawImage(pacman2left, pacmanx + 1, pacmany + 1, this);
                break;
            case 2:
                g2d.drawImage(pacman3left, pacmanx + 1, pacmany + 1, this);
                break;
            case 3:
                g2d.drawImage(pacman4left, pacmanx + 1, pacmany + 1, this);
                break;
            default:
                g2d.drawImage(pacman1, pacmanx + 1, pacmany + 1, this);
                break;
            }
        }
    
    
        public void DrawPacManRight(Graphics2D g2d) {
            switch (pacmananimpos) {
            case 1:
                g2d.drawImage(pacman2right, pacmanx + 1, pacmany + 1, this);
                break;
            case 2:
                g2d.drawImage(pacman3right, pacmanx + 1, pacmany + 1, this);
                break;
            case 3:
                g2d.drawImage(pacman4right, pacmanx + 1, pacmany + 1, this);
                break;
            default:
                g2d.drawImage(pacman1, pacmanx + 1, pacmany + 1, this);
                break;
            }
        }
    
    
        public void DrawMaze(Graphics2D g2d) {
            short i = 0;
            int x, y;
    
            for (y = 0; y < scrsize; y += blocksize) {
                for (x = 0; x < scrsize; x += blocksize) {
                    g2d.setColor(mazecolor);
                    g2d.setStroke(new BasicStroke(2));
    
                    if ((screendata[i] & 1) != 0) // draws left
                    {
                        g2d.drawLine(x, y, x, y + blocksize - 1);
                    }
                    if ((screendata[i] & 2) != 0) // draws top
                    {
                        g2d.drawLine(x, y, x + blocksize - 1, y);
                    }
                    if ((screendata[i] & 4) != 0) // draws right
                    {
                        g2d.drawLine(x + blocksize - 1, y, x + blocksize - 1,
                                     y + blocksize - 1);
                    }
                    if ((screendata[i] & 8) != 0) // draws bottom
                    {
                        g2d.drawLine(x, y + blocksize - 1, x + blocksize - 1,
                                     y + blocksize - 1);
                    }
                    if ((screendata[i] & 16) != 0) // draws point
                    {
                        g2d.setColor(dotcolor);
                        g2d.fillRect(x + 11, y + 11, 2, 2);
                    }
                    i++;
                }
            }
        }
    
        public void GameInit() {
            pacsleft = 3;
            score = 0;
            LevelInit();
            nrofghosts = 6;
            currentspeed = 3;
        }
    
    
        public void LevelInit() {
            int i;
            for (i = 0; i < nrofblocks * nrofblocks; i++)
                screendata[i] = leveldata[i];
    
            LevelContinue();
        }
    
    
        public void LevelContinue() {
            short i;
            int dx = 1;
            int random;
    
            for (i = 0; i < nrofghosts; i++) {
                ghosty[i] = 4 * blocksize;
                ghostx[i] = 4 * blocksize;
                ghostdy[i] = 0;
                ghostdx[i] = dx;
                dx = -dx;
                random = (int)(Math.random() * (currentspeed + 1));
                if (random > currentspeed)
                    random = currentspeed;
                ghostspeed[i] = validspeeds[random];
            }
    
            pacmanx = 7 * blocksize;
            pacmany = 11 * blocksize;
            pacmandx = 0;
            pacmandy = 0;
            reqdx = 0;
            reqdy = 0;
            viewdx = -1;
            viewdy = 0;
            dying = false;
        }
    
        public void GetImages()
        {
    
          ghost = new ImageIcon(Board.class.getResource("../pacpix/ghost.png")).getImage();
          pacman1 = new ImageIcon(Board.class.getResource("../pacpix/pacman.png")).getImage();
          pacman2up = new ImageIcon(Board.class.getResource("../pacpix/up1.png")).getImage();
          pacman3up = new ImageIcon(Board.class.getResource("../pacpix/up2.png")).getImage();
          pacman4up = new ImageIcon(Board.class.getResource("../pacpix/up3.png")).getImage();
          pacman2down = new ImageIcon(Board.class.getResource("../pacpix/down1.png")).getImage();
          pacman3down = new ImageIcon(Board.class.getResource("../pacpix/down2.png")).getImage();
          pacman4down = new ImageIcon(Board.class.getResource("../pacpix/down3.png")).getImage();
          pacman2left = new ImageIcon(Board.class.getResource("../pacpix/left1.png")).getImage();
          pacman3left = new ImageIcon(Board.class.getResource("../pacpix/left2.png")).getImage();
          pacman4left = new ImageIcon(Board.class.getResource("../pacpix/left3.png")).getImage();
          pacman2right = new ImageIcon(Board.class.getResource("../pacpix/right1.png")).getImage();
          pacman3right = new ImageIcon(Board.class.getResource("../pacpix/right2.png")).getImage();
          pacman4right = new ImageIcon(Board.class.getResource("../pacpix/right3.png")).getImage();
    
        }
    
        @Override
        public void paint(Graphics g)
        {
          super.paint(g);
    
          Graphics2D g2d = (Graphics2D) g;
    
          g2d.setColor(Color.black);
          g2d.fillRect(0, 0, d.width, d.height);
    
          DrawMaze(g2d);
          DrawScore(g2d);
          DoAnim();
          if (ingame)
            PlayGame(g2d);
          else
            ShowIntroScreen(g2d);
    
          g.drawImage(ii, 5, 5, this);
          Toolkit.getDefaultToolkit().sync();
          g.dispose();
        }
    
        private void drawGhost(Graphics2D g2d, int i, int i0) {
            throw new UnsupportedOperationException("Not yet implemented");
        }
    
        class TAdapter extends KeyAdapter {
            @Override
            public void keyPressed(KeyEvent e) {
    
              int key = e.getKeyCode();
    
              if (ingame)
              {
                if (key == KeyEvent.VK_LEFT)
                {
                  reqdx=-1;
                  reqdy=0;
                }
                else if (key == KeyEvent.VK_RIGHT)
                {
                  reqdx=1;
                  reqdy=0;
                }
                else if (key == KeyEvent.VK_UP)
                {
                  reqdx=0;
                  reqdy=-1;
                }
                else if (key == KeyEvent.VK_DOWN)
                {
                  reqdx=0;
                  reqdy=1;
                }
                else if (key == KeyEvent.VK_ESCAPE && timer.isRunning())
                {
                  ingame=false;
                }
                else if (key == KeyEvent.VK_PAUSE) {
                    if (timer.isRunning())
                        timer.stop();
                    else timer.start();
                }
              }
              else
              {
                if (key == 's' || key == 'S')
              {
                  ingame=true;
                  GameInit();
                }
              }
          }
    
              public void keyReleased(KeyEvent e) {
                  int key = e.getKeyCode();
    
                  if (key == Event.LEFT || key == Event.RIGHT ||
                     key == Event.UP ||  key == Event.DOWN)
                  {
                    reqdx=0;
                    reqdy=0;
                  }
              }
          }
    
        public void actionPerformed(ActionEvent e) {
            repaint();
        }
    }
    This is my Board class.
    And here we have main.
    Java Code:
    package pacman;
    
    import javax.swing.JFrame;
    
    
    
    public class PacMan extends JFrame
    {
    
      public PacMan()
      {
        add(new Board());
        setTitle("Pacman");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(380, 420);
        setLocationRelativeTo(null);
        setVisible(true);
      }
    
      public static void main(String[] args) {
          new PacMan();
      }}
    The problem is that i have some pronlems with this annoting NullPointer.
    Some problems during compilation.

    run:
    Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(ImageIcon.java:167)
    at pacman.Board.GetImages(Board.java:488)
    at pacman.Board.<init>(Board.java:88)
    at pacman.PacMan.<init>(PacMan.java:12)
    at pacman.PacMan.main(PacMan.java:21)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 1 second)


    Any one would like to help me pls? It's my first so complicated app and i dont know whats up with this pointer. There are "if x = null" so i dont get it.

  2. #2
    StormyWaters is offline Senior Member
    Join Date
    Feb 2009
    Posts
    306
    Rep Power
    6

    Default

    If you look at the exception, it will explain what the problem is.

    Inside you're Board.getImages() method, a null is being passed to the ImageIcon constructor, so either one of the images does not exist, or the way you are obtaining them is being done incorrectly. It's been awhile since I worked with images, so I would suggest making a Test class and just try to obtain all the images.

  3. #3
    Bullfrog is offline Member
    Join Date
    Jun 2010
    Posts
    2
    Rep Power
    0

    Default

    Oh thats right. But i am importinh these images from some kind of java library ye? Or i should just put them in a folder inside my netbeans projects and then images are going to be imported? I know that question is lame but ... you know im kind of a new one and havent any exp with importing images to my app.

  4. #4
    StormyWaters is offline Senior Member
    Join Date
    Feb 2009
    Posts
    306
    Rep Power
    6

    Default

    I don't know what your project setup looks like but usually, I believe, you pass the path from the top of the project to that method.

    I would try just removing the ".." from the beginning of the paths.

Similar Threads

  1. Help implementing Pacman
    By scheng12 in forum New To Java
    Replies: 2
    Last Post: 03-07-2010, 11:26 PM
  2. need help with pacman game!!
    By Newbie_Javaer in forum New To Java
    Replies: 2
    Last Post: 10-22-2009, 03:44 PM
  3. Replies: 3
    Last Post: 07-18-2009, 02:26 PM
  4. Huge VB.Net conversion
    By bullstreetboy in forum New To Java
    Replies: 3
    Last Post: 04-09-2009, 02:30 PM
  5. Java Pacman question
    By whdbstjr90 in forum New To Java
    Replies: 0
    Last Post: 12-12-2007, 12:28 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •