Christopher Snyder
Christopher Snyder

Reputation: 70

Processing. Class Does Not Exist

I am creating a breakout game for a Programming class.

import processing.serial.*;
//sets the conditions for winning
int lose = 1;
boolean flip_sensor_value = false;

//variable declarations for ports, paddles, conditions, and start/end 
Serial myPort;
PFont myFont;
int lf = 10;
Paddle Paddle; //Error Here
Ball breakout;
int padWidth = 15;
int padHeight = 60;
int leftPaddlePos = 0;
int distWall = 20;
float lpp;
boolean Win = false;
PImage pStart;
PImage pEnd;
boolean Contact = false;
boolean started = false;
int timePlayed = 0;

//sets the game window up 
void setup(){
   size(1000, 600);

   myFont = createFont("FFScala", 16);
   textFont(myFont);

   rectMode(CENTER);
   ellipseMode(CENTER);

   println(Serial.list());
   //If the paddle isn't working set the number in the [] to 1, 2, or 3
   myPort = new Serial(this, Serial.list()[0], 9600);
   myPort.bufferUntil('\n');

   Paddle = new Paddle(padWidth, padHeight, distWall, leftPaddlePos); //Error Here
   //creates the ball
   breakout = new Ball (15, width/2, height/2, 8, 2, 1, 1);
}
void showGUI() {

  stroke(87, 36, 124);
  line(width/2, 0, width/2, height);

  textSize(16);
  pushStyle();
  fill(87, 36, 124);
  popStyle();
  //Tells you that you won
  if (Win == true) {
    textSize(48);
    image(pEnd, 0, 0, width, height);
    pushStyle();
    fill(87, 36, 124);
    text("YOU WIN!!!", width/2 - 175, 100);
    popStyle();
  }
}
void draw(){
  background(247);
  //dislplays and updates the Ball
  breakout.display();
  breakout.update();

   Paddle.display(lpp);
  //Shows the graphical user interface
  showGUI();

  if (started == false){
    image(pStart, 0, 0, width, height);
    println("Start");
  }
  timePlayed ++;  //Controls the timer in the game
  breakout.bRadius = breakout.bRadius + (timePlayed * 0.5);
}
void serialEvent(Serial myPort) {

  String myString = myPort.readStringUntil('\n');
  if (myString != null) {

    myString = trim(myString);

    // if you haven't heard from the microncontroller yet, listen:
    if (Contact == false) {
      if (myString.equals("hello")) { 
        myPort.clear();          // clear the serial port buffer
        Contact = true;     // you've had first contact from the microcontroller
        myPort.write('A');       // ask for more
        println("contact");
      }
    }else {
      int sensors[] = int(split(myString, ','));
      for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) {
        println("Sensor " + sensorNum + ": " + sensors[sensorNum]);
      }
      if(sensors.length>1){
        leftPaddlePos = sensors[0];

        lpp = (float)leftPaddlePos;
        if ( flip_sensor_value == false ) {
          lpp = map(lpp, 0, 1023, 1, height);
        } 
        else if ( flip_sensor_value == true ) {
          lpp = map(lpp, 1023, 0, 1, height);
        }
      }
    }
    myPort.write("A");
  }
}
void keyPressed() {
  if (started == true) {   //added for Start Screen
    breakout.keyPressed();
  }                        //added for Start Screen
  if (started == false) {  //added for Start Screen
    started = true;        //added for Start Screen
  }                        //added for Start Screen
}

Paddle class

    class Paddle{

  float pWidth;
  float pHeight;
  float yPos;
  float xPos;

  Paddle(float ipWidth, float ipHeight, float ixPos, float iyPos) {

    pWidth = ipWidth;
    pHeight = ipHeight;
    xPos = ixPos;
    yPos = iyPos;
  }

  void display(float yPos) {
    pushStyle();
    fill(87, 36, 124);// or littleBits white(247)
    rect(xPos, yPos, pWidth, pHeight);
    popStyle();
  }
}}

Ball class

    class Ball {
  Paddle Paddle; //Added so that it would accept the Class Paddle
  float bAngle = 0; //added to keep track of ball's current angle
  float bRadius; //add this line to create a vector for the ball

  int bSize;
  float xpos, ypos;
  float xspeed, yspeed;
  float xdir, ydir;

  Ball(int ibSize, float ixpos, float iypos, float ixspeed, float iyspeed, float ixdir, float iydir) {

    bSize = ibSize;
    xpos = ixpos;
    ypos = iypos;
    xspeed = ixspeed;
    yspeed = iyspeed;
    xdir = ixdir;
    ydir = iydir;
  }
  void display() {
    pushStyle();
    fill(87, 36, 124);
    ellipse(xpos+bSize/2, ypos+bSize/2, bSize, bSize);
    popStyle();
  }
void update(){

    xpos = xpos + (xspeed * xdir);
    ypos = ypos + (yspeed * ydir);

    calcRadius();
}
  void keyPressed() {

    if (keyCode=='`') {
      newGame();
    }

    if (keyCode=='1') {
      bSize++;
    }
    if (keyCode=='2') {
      bSize--;
    }
    if (keyCode=='3') {
      Paddle.pHeight++;
    }    
    if (keyCode=='4') {
      Paddle.pHeight--;
    }
  }

  void reset() {
    xpos = width;
    ypos = height/2;
    ydir = random(-1, 1);
    float dir = random(-1, 1);
    if (dir > 0) {
      xdir = 1;
    }
    else if (dir <= 0) {
      xdir = -1;
    }
    breakout.xspeed = 8; //reset ball speed
    breakout.yspeed = 2; //reset ball speed
    timePlayed = 0;  //reset time played counter
    bRadius = 8.25;  //reset ball vector
  }
void newGame(){
  reset();
}
 void calcRadius() { //added to calculate radius/vector of ball trajectory
    bRadius = sqrt(pow(abs(xspeed), 2) + pow(abs(yspeed), 2)); //added to figure out ball vector
  }
   void lPadHitTest() {
    if (xpos < Paddle.xPos - Paddle.pWidth/2 - bSize/2  //check to see if it's hitting paddle side to side
    && ypos < lpp + Paddle.pHeight/2 + bSize/2           //check to see if it's hitting paddle up and down
    && ypos > lpp - Paddle.pHeight/2 - bSize/2)          //check to see if it's hitting paddle up and down
    {
      lPadAngle();                                            //change the angle of the ball depending where it hits the paddle
      xdir *= -1;                                             //turn the ball around so it bounces
    }
  }
    void lPadAngle() {
    if (ypos < lpp - 10) {  //checks if y position is above the middle section of the right paddle
      println(bAngle);
      bAngle = bAngle + (map(abs(lpp - 10 - ypos), 0, 50, 0, 15));  //adds to angle of ball trajectory
      xspeed = cos (radians(bAngle)) * bRadius; //change ball's x speed
      yspeed = sin (radians(bAngle)) * bRadius; //change ball's y spped
      println(bAngle);
    }
    if (ypos < lpp + 10) {  //checks if y position is below the middle section of the right paddle
      println(bAngle);
      bAngle = bAngle - (map(abs(lpp + 10 - ypos), 0, 50, 0, 15));  //subtracts from angle of ball trajectory
      xspeed = cos (radians(bAngle)) * bRadius; //change ball's x speed
      yspeed = sin (radians(bAngle)) * bRadius; //change ball's y spped
      println(bAngle);
    }
    xpos = Paddle.xPos + Paddle.pWidth/2 + bSize/2; //corrects for sticking in right paddle
  }

I am not finished with the parts that actually make the game breakout but, the problem is that I am being thrown an error that reads "the class 'Paddle' does not exist."

I have tried re-ordering the variable declarations (even though that shouldn't matter) and I have tried fixing all of the errors in the "Paddle" class itself.

I used to have the problem within the "Ball" class but, I added

class Ball {
  Paddle Paddle; //Added so that it would accept the Class Paddle
  float bAngle = 0; //added to keep track of ball's current angle
   ...
}

And it accepted it so I'm not sure what the problem is.

Is it a syntax thing or did I omit something important?

Upvotes: 2

Views: 7905

Answers (1)

Kevin Workman
Kevin Workman

Reputation: 42176

You have a misplaced curly bracket: you have an extra closing curly bracket at the end of your Paddle class, and you are missing a closing curly bracket at the end of your Ball class.

This is a quick and dirty example, but if I fix that problem (I've also removed the Serial stuff because it presumably has nothing to do with your problem), then your code at least runs:

//sets the conditions for winning
int lose = 1;
boolean flip_sensor_value = false;

PFont myFont;
int lf = 10;
Paddle Paddle; //Error Here
Ball breakout;
int padWidth = 15;
int padHeight = 60;
int leftPaddlePos = 0;
int distWall = 20;
float lpp;
boolean Win = false;
PImage pStart;
PImage pEnd;
boolean Contact = false;
boolean started = false;
int timePlayed = 0;

//sets the game window up 
void setup() {
  size(1000, 600);

  myFont = createFont("FFScala", 16);
  textFont(myFont);

  rectMode(CENTER);
  ellipseMode(CENTER);

  Paddle = new Paddle(padWidth, padHeight, distWall, leftPaddlePos); //Error Here
  //creates the ball
  breakout = new Ball (15, width/2, height/2, 8, 2, 1, 1);
}
void showGUI() {

  stroke(87, 36, 124);
  line(width/2, 0, width/2, height);

  textSize(16);
  pushStyle();
  fill(87, 36, 124);
  popStyle();
  //Tells you that you won
  if (Win == true) {
    textSize(48);
    image(pEnd, 0, 0, width, height);
    pushStyle();
    fill(87, 36, 124);
    text("YOU WIN!!!", width/2 - 175, 100);
    popStyle();
  }
}
void draw() {
  background(247);
  //dislplays and updates the Ball
  breakout.display();
  breakout.update();

  Paddle.display(lpp);
  //Shows the graphical user interface
  showGUI();

  if (started == false) {
    image(pStart, 0, 0, width, height);
    println("Start");
  }
  timePlayed ++;  //Controls the timer in the game
  breakout.bRadius = breakout.bRadius + (timePlayed * 0.5);
}


void keyPressed() {
  if (started == true) {   //added for Start Screen
    breakout.keyPressed();
  }                        //added for Start Screen
  if (started == false) {  //added for Start Screen
    started = true;        //added for Start Screen
  }                        //added for Start Screen
}
//Separate Tab
class Paddle {

  float pWidth;
  float pHeight;
  float yPos;
  float xPos;

  Paddle(float ipWidth, float ipHeight, float ixPos, float iyPos) {

    pWidth = ipWidth;
    pHeight = ipHeight;
    xPos = ixPos;
    yPos = iyPos;
  }

  void display(float yPos) {
    pushStyle();
    fill(87, 36, 124);// or littleBits white(247)
    rect(xPos, yPos, pWidth, pHeight);
    popStyle();
  }
}

//Separate Tab
class Ball {
  Paddle Paddle; //Added so that it would accept the Class Paddle
  float bAngle = 0; //added to keep track of ball's current angle
  float bRadius; //add this line to create a vector for the ball

  int bSize;
  float xpos, ypos;
  float xspeed, yspeed;
  float xdir, ydir;

  Ball(int ibSize, float ixpos, float iypos, float ixspeed, float iyspeed, float ixdir, float iydir) {

    bSize = ibSize;
    xpos = ixpos;
    ypos = iypos;
    xspeed = ixspeed;
    yspeed = iyspeed;
    xdir = ixdir;
    ydir = iydir;
  }
  void display() {
    pushStyle();
    fill(87, 36, 124);
    ellipse(xpos+bSize/2, ypos+bSize/2, bSize, bSize);
    popStyle();
  }
  void update() {

    xpos = xpos + (xspeed * xdir);
    ypos = ypos + (yspeed * ydir);

    calcRadius();
  }
  void keyPressed() {

    if (keyCode=='`') {
      newGame();
    }

    if (keyCode=='1') {
      bSize++;
    }
    if (keyCode=='2') {
      bSize--;
    }
    if (keyCode=='3') {
      Paddle.pHeight++;
    }    
    if (keyCode=='4') {
      Paddle.pHeight--;
    }
  }

  void reset() {
    xpos = width;
    ypos = height/2;
    ydir = random(-1, 1);
    float dir = random(-1, 1);
    if (dir > 0) {
      xdir = 1;
    } else if (dir <= 0) {
      xdir = -1;
    }
    breakout.xspeed = 8; //reset ball speed
    breakout.yspeed = 2; //reset ball speed
    timePlayed = 0;  //reset time played counter
    bRadius = 8.25;  //reset ball vector
  }
  void newGame() {
    reset();
  }
  void calcRadius() { //added to calculate radius/vector of ball trajectory
    bRadius = sqrt(pow(abs(xspeed), 2) + pow(abs(yspeed), 2)); //added to figure out ball vector
  }
  void lPadHitTest() {
    if (xpos < Paddle.xPos - Paddle.pWidth/2 - bSize/2  //check to see if it's hitting paddle side to side
      && ypos < lpp + Paddle.pHeight/2 + bSize/2           //check to see if it's hitting paddle up and down
      && ypos > lpp - Paddle.pHeight/2 - bSize/2)          //check to see if it's hitting paddle up and down
    {
      lPadAngle();                                            //change the angle of the ball depending where it hits the paddle
      xdir *= -1;                                             //turn the ball around so it bounces
    }
  }
  void lPadAngle() {
    if (ypos < lpp - 10) {  //checks if y position is above the middle section of the right paddle
      println(bAngle);
      bAngle = bAngle + (map(abs(lpp - 10 - ypos), 0, 50, 0, 15));  //adds to angle of ball trajectory
      xspeed = cos (radians(bAngle)) * bRadius; //change ball's x speed
      yspeed = sin (radians(bAngle)) * bRadius; //change ball's y spped
      println(bAngle);
    }
    if (ypos < lpp + 10) {  //checks if y position is below the middle section of the right paddle
      println(bAngle);
      bAngle = bAngle - (map(abs(lpp + 10 - ypos), 0, 50, 0, 15));  //subtracts from angle of ball trajectory
      xspeed = cos (radians(bAngle)) * bRadius; //change ball's x speed
      yspeed = sin (radians(bAngle)) * bRadius; //change ball's y spped
      println(bAngle);
    }
    xpos = Paddle.xPos + Paddle.pWidth/2 + bSize/2; //corrects for sticking in right paddle
  }
}

Note that the only thing I've done is moved that closing curly bracket. Your code might have other errors, but this fixes the ClassNotFound error.

If you still can't get it working, then please provide an MCVE. That means taking out the extra stuff like the Serial code, and hardcoding as much as possible. Here is an example of how large your MCVE should be:

void setup() {
  Paddle paddle = new Paddle();
  Ball ball = new Ball();
  ball.paddle = paddle;
  ball.testBall();
}

class Paddle {
  void testPaddle() {
    println("paddle");
  }
}

class Ball {
  Paddle paddle; 

  void testBall() {
    println("ball");
    paddle.testPaddle();
  }
}

Note that I've taken out all of your game logic, because it has nothing to do with your syntax error. Often in the process of creating an MCVE, you'll find the error yourself. Good luck.

Upvotes: 4

Related Questions