Reputation: 70
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
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