Search code examples
javacannot-find-symbol

Error with not finding symbol - variable in my program


Okay so i was trying to learn java (as i usually do stuff with html and css) and i am just working on a very basic and generic 2d block breaker game. I came across this error and have no clue why i am receiving. i have triple checked my spelling and have checked it in multiple areas.

Here is my Gameplay class code (Error line will be highlighted with asterisks):

package BrickBreaker;

import java.awt.*;
import java.awt.event.*;
import javax.swing.Timer;
import javax.swing.JPanel;

public class Gameplay extends JPanel implements KeyListener, ActionListener {
    private boolean play = false;
    private int score = 0;

    private int totalBricks = 21;

    private Timer timer;
    private int delay = 8;

    private int playerX = 310;
    private int ballposX = 120;
    private int ballposY = 350;
    private int ballXdir = -1;
    private int ballYdir = -2;

    private MapGenerator map;

    public Gameplay() {
        map = new MapGenerator(3, 7);
        addKeyListener(this);
        setFocusable(true);
        setFocusTraversalKeysEnabled(false);
        timer = new Timer(delay, this);
        timer.start();
    }

    public void paint(Graphics g) {
        // background
        g.setColor(Color.black);
        g.fillRect(1,1, 692, 592);

        // drawing map
        map.draw((Graphics2D)g);

        // borders
        g.setColor(Color.yellow);
        g.fillRect(0, 0, 3, 592);
        g.fillRect(0, 0, 692, 3);
        g.fillRect(691, 0, 3, 592);

        // paddle
        g.setColor(Color.green);
        g.fillRect(playerX, 550, 100, 8);

        // ball
        g.setColor(Color.yellow);
        g.fillOval(ballposX, ballposY, 20, 20);

        g.dispose();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        timer.start();
        if (play){
            if(new Rectangle(ballposX, ballposY, 20, 20).intersects(new Rectangle(playerX, 550, 100, 8))){
                ballYdir = -ballYdir;
            }

            A: for (int i = 0; i < map.map.length; i++) {
                for (int j = 0; j< map.map.length; j++) {
                    if (map.map[i][j] > 0) {
                        int brickX = j * map.brickWidth + 80;
                        int brickY = i * map.brickHeight + 50;
                        int brickWidth = map.brickWidth;
                        int brickLength = map.brickWidth;

************************Rectangle rect = new Rectangle(brickX, brickY, brickWidth, brickHeight);
                        Rectangle ballRect = new Rectangle(ballposX, ballposY, 20, 20);
                        Rectangle brickRect = rect;

                        if (ballRect.intersects(brickRect)) {
                            map.setBrickValue(0, i, j);
                            totalBricks--;
                            score += 5;

                            if (ballposX + 19 <= brickRect.x || ballposX + 1 >= brickRect.x + brickRect.width) {
                                ballXdir = -ballXdir;
                            }
                            else {
                                ballYdir = -ballYdir;
                            }

                            break A;
                        }
                    }
                }
            }

            ballposX += ballXdir;
            ballposY += ballYdir;
            if(ballposX < 0) {
                ballXdir = -ballXdir;
            }
            if(ballposY < 0) {
                ballYdir = -ballYdir;
            }
            if(ballposX > 670) {
                ballXdir = -ballXdir;
            }
        }

        repaint();
    }

    @Override
    public void keyTyped(KeyEvent e) {}
    @Override
    public void keyReleased(KeyEvent e) {}

    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            if (playerX >= 600) {
                playerX = 600;
            } else{
                moveRight();
            }
        }
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            if (playerX < 10) {
                playerX = 10;
            } else{
                moveLeft();
            }
        }
    }

    public void moveRight() {
        play = true;
        playerX +=20;
    }
    public void moveLeft() {
        play = true;
        playerX -=20;
    }


}

The error code that i am receiving is:

Blockquote cannot find symbol - variable brickHeight Blockquote

My MapGenerator class code is: (this is where i originally used the "brickHeight" variable.

package BrickBreaker;

import java.awt.*;

public class MapGenerator {
    public int map[][];
    public int brickWidth;
    public int brickHeight;
    public MapGenerator(int row, int col) {
        map = new int[row][col];
        for(int i = 0; i < map.length; i++) {
            for(int j = 0; j < map[0].length; j++) {
                map[i][j] = 1;
            }
        }

        brickWidth = 540/col;
        brickHeight = 150/col;
    }
    public void draw(Graphics2D g) {
        for(int i = 0; i < map.length; i++) {
            for(int j = 0; j < map[0].length; j++) {
                if (map[i][j] > 0) {
                    g.setColor(Color.white);
                    g.fillRect(j * brickWidth + 80, i * brickHeight + 50, brickWidth, brickHeight);

                    g.setStroke(new BasicStroke(3));
                    g.setColor(Color.black);
                    g.drawRect(j * brickWidth + 80, i * brickHeight + 50, brickWidth, brickHeight);
                }
            }
        }
    }

    public void setBrickValue(int value, int row, int col) {
        map[row][col] = value;
    }
}

Take note that i am a java beginner, and i am still learning so any tips or pointers will be much appreciated. i also am not finished with this project so some things may seem incomplete for that reason.


Solution

  • You used the variable 'brickHeight' which is not defined. I think you meant brickHeight to be equal to map.brickHeight.

    See if this code for your Gameplay class works as you want it to work

    package BrickBreaker;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.Timer;
    import javax.swing.JPanel;
    
    public class Gameplay extends JPanel implements KeyListener, ActionListener {
        private boolean play = false;
        private int score = 0;
    
        private int totalBricks = 21;
    
        private Timer timer;
        private int delay = 8;
    
        private int playerX = 310;
        private int ballposX = 120;
        private int ballposY = 350;
        private int ballXdir = -1;
        private int ballYdir = -2;
    
        private MapGenerator map;
    
        public Gameplay() {
            map = new MapGenerator(3, 7);
            addKeyListener(this);
            setFocusable(true);
            setFocusTraversalKeysEnabled(false);
            timer = new Timer(delay, this);
            timer.start();
        }
    
        public void paint(Graphics g) {
            // background
            g.setColor(Color.black);
            g.fillRect(1,1, 692, 592);
    
            // drawing map
            map.draw((Graphics2D)g);
    
            // borders
            g.setColor(Color.yellow);
            g.fillRect(0, 0, 3, 592);
            g.fillRect(0, 0, 692, 3);
            g.fillRect(691, 0, 3, 592);
    
            // paddle
            g.setColor(Color.green);
            g.fillRect(playerX, 550, 100, 8);
    
            // ball
            g.setColor(Color.yellow);
            g.fillOval(ballposX, ballposY, 20, 20);
    
            g.dispose();
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            timer.start();
            if (play){
                if(new Rectangle(ballposX, ballposY, 20, 20).intersects(new Rectangle(playerX, 550, 100, 8))){
                    ballYdir = -ballYdir;
                }
    
                A: for (int i = 0; i < map.map.length; i++) {
                    for (int j = 0; j< map.map.length; j++) {
                        if (map.map[i][j] > 0) {
                            int brickX = j * map.brickWidth + 80;
                            int brickY = i * map.brickHeight + 50;
                            int brickWidth = map.brickWidth;
                            int brickHeight = map.brickHeight;
    
                            Rectangle rect = new Rectangle(brickX, brickY, brickWidth, brickHeight);
                            Rectangle ballRect = new Rectangle(ballposX, ballposY, 20, 20);
                            Rectangle brickRect = rect;
    
                            if (ballRect.intersects(brickRect)) {
                                map.setBrickValue(0, i, j);
                                totalBricks--;
                                score += 5;
    
                                if (ballposX + 19 <= brickRect.x || ballposX + 1 >= brickRect.x + brickRect.width) {
                                    ballXdir = -ballXdir;
                                }
                                else {
                                    ballYdir = -ballYdir;
                                }
    
                                break A;
                            }
                        }
                    }
                }
    
                ballposX += ballXdir;
                ballposY += ballYdir;
                if(ballposX < 0) {
                    ballXdir = -ballXdir;
                }
                if(ballposY < 0) {
                    ballYdir = -ballYdir;
                }
                if(ballposX > 670) {
                    ballXdir = -ballXdir;
                }
            }
    
            repaint();
        }
    
        @Override
        public void keyTyped(KeyEvent e) {}
        @Override
        public void keyReleased(KeyEvent e) {}
    
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                if (playerX >= 600) {
                    playerX = 600;
                } else{
                    moveRight();
                }
            }
            if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                if (playerX < 10) {
                    playerX = 10;
                } else{
                    moveLeft();
                }
            }
        }
    
        public void moveRight() {
            play = true;
            playerX +=20;
        }
        public void moveLeft() {
            play = true;
            playerX -=20;
        }
    
    
    }