#1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Feb 2014
    Posts
    9
    Rep Power
    0

    Red face Help for Snake game


    Hi,
    I have Board.java and Snake.java run in netbeans IDE 7.2.
    But when i run this game,The window is black and Nothing will be displayed.
    Snake.java
    Code:
    package com.zetcode;
    
    import java.awt.EventQueue;
    import javax.swing.JFrame;
    
    
    public class Snake extends JFrame {
    
        public Snake() {
    
            add(new Board());        
            
            setTitle("Snake");
            pack();
            setResizable(false);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                
                @Override
                public void run() {                
                    JFrame ex = new Snake();
                    ex.setVisible(true);                
                }
            });
        }
    }
    Board.java
    Code:
    package com.zetcode;
    
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    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 {
    
        private final int B_WIDTH = 300;
        private final int B_HEIGHT = 300;
        private final int DOT_SIZE = 10;
        private final int ALL_DOTS = 900;
        private final int RAND_POS = 29;
        private final int DELAY = 140;
    
        private final int x[] = new int[ALL_DOTS];
        private final int y[] = new int[ALL_DOTS];
    
        private int dots;
        private int apple_x;
        private int apple_y;
    
        private boolean leftDirection = false;
        private boolean rightDirection = true;
        private boolean upDirection = false;
        private boolean downDirection = false;
        private boolean inGame = true;
    
        private Timer timer;
        private Image ball;
        private Image apple;
        private Image head;
    
        public Board() {
    
            addKeyListener(new TAdapter());
            setBackground(Color.black);
            setFocusable(true);
    
            setPreferredSize(new Dimension(B_WIDTH, B_HEIGHT));
    
            loadImages();
            initGame();
        }
    
        private void loadImages() {
    
            ImageIcon iid = new ImageIcon("dot.png");
            ball = iid.getImage();
    
            ImageIcon iia = new ImageIcon("apple.png");
            apple = iia.getImage();
    
            ImageIcon iih = new ImageIcon("head.png");
            head = iih.getImage();
        }
    
        private void initGame() {
    
            dots = 3;
    
            for (int z = 0; z < dots; z++) {
                x[z] = 50 - z * 10;
                y[z] = 50;
            }
    
            locateApple();
    
            timer = new Timer(DELAY, this);
            timer.start();
        }
    
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
    
            doDrawing(g);
        }
        
        private void doDrawing(Graphics g) {
            
            if (inGame) {
    
                g.drawImage(apple, apple_x, apple_y, this);
    
                for (int z = 0; z < dots; z++) {
                    if (z == 0) {
                        g.drawImage(head, x[z], y[z], this);
                    } else {
                        g.drawImage(ball, x[z], y[z], this);
                    }
                }
    
                Toolkit.getDefaultToolkit().sync();
                g.dispose();
    
            } else {
    
                gameOver(g);
            }        
        }
    
        private void gameOver(Graphics g) {
    
            String msg = "Game Over";
            Font small = new Font("Helvetica", Font.BOLD, 14);
            FontMetrics metr = getFontMetrics(small);
    
            g.setColor(Color.white);
            g.setFont(small);
            g.drawString(msg, (B_WIDTH - metr.stringWidth(msg)) / 2, B_HEIGHT / 2);
        }
    
        private void checkApple() {
    
            if ((x[0] == apple_x) && (y[0] == apple_y)) {
    
                dots++;
                locateApple();
            }
        }
    
        private void move() {
    
            for (int z = dots; z > 0; z--) {
                x[z] = x[(z - 1)];
                y[z] = y[(z - 1)];
            }
    
            if (leftDirection) {
                x[0] -= DOT_SIZE;
            }
    
            if (rightDirection) {
                x[0] += DOT_SIZE;
            }
    
            if (upDirection) {
                y[0] -= DOT_SIZE;
            }
    
            if (downDirection) {
                y[0] += DOT_SIZE;
            }
        }
    
        private void checkCollision() {
    
            for (int z = dots; z > 0; z--) {
    
                if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z])) {
                    inGame = false;
                }
            }
    
            if (y[0] > B_HEIGHT) {
                inGame = false;
            }
    
            if (y[0] < 0) {
                inGame = false;
            }
    
            if (x[0] > B_WIDTH) {
                inGame = false;
            }
    
            if (x[0] < 0) {
                inGame = false;
            }
        }
    
        private void locateApple() {
    
            int r = (int) (Math.random() * RAND_POS);
            apple_x = ((r * DOT_SIZE));
    
            r = (int) (Math.random() * RAND_POS);
            apple_y = ((r * DOT_SIZE));
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
    
            if (inGame) {
    
                checkApple();
                checkCollision();
                move();
            }
    
            repaint();
        }
    
        private class TAdapter extends KeyAdapter {
    
            @Override
            public void keyPressed(KeyEvent e) {
    
                int key = e.getKeyCode();
    
                if ((key == KeyEvent.VK_LEFT) && (!rightDirection)) {
                    leftDirection = true;
                    upDirection = false;
                    downDirection = false;
                }
    
                if ((key == KeyEvent.VK_RIGHT) && (!leftDirection)) {
                    rightDirection = true;
                    upDirection = false;
                    downDirection = false;
                }
    
                if ((key == KeyEvent.VK_UP) && (!downDirection)) {
                    upDirection = true;
                    rightDirection = false;
                    leftDirection = false;
                }
    
                if ((key == KeyEvent.VK_DOWN) && (!upDirection)) {
                    downDirection = true;
                    rightDirection = false;
                    leftDirection = false;
                }
            }
        }
    }
    I run the program and see same it.
    Code:
    http://upload7.ir/imgs/2014-03/76701531994073397809.jpg
  2. #2
  3. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Feb 2014
    Posts
    9
    Rep Power
    0
    Please help me!
  4. #3
  5. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Feb 2014
    Location
    India
    Posts
    200
    Rep Power
    5
    Hello Life24!

    Thank you for posting in Dev-Shed forums, We'll sure give an answer to your problems. But if you please read and follow the rules then it'll be good for you. You posted this question in Programming Languages> Java Help at March 1st 09:05 am (link: http://forums.devshed.com/java-help-9/snake-game-958914.html) and I also replied to it. But you're again posting here in Game Develpment and creating two similar threads in different areas of the forums is against the rules. If you think you've not got the adequate answer then change the title of the thread, add more information to your post but double threading is against the rules. So if you kindly follow my advises then it'll be good for both you and the forums.

    Thanks,

    Hexman
  6. #4
  7. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Mar 2014
    Location
    http://www.yepi8.org
    Posts
    1
    Rep Power
    0
    That is the good news for me.

IMN logo majestic logo threadwatch logo seochat tools logo