Java 处理。类不存在

Java 处理。类不存在,java,class,processing,Java,Class,Processing,我正在为一个编程类创建一个突破游戏 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

我正在为一个编程类创建一个突破游戏

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
}
球类

    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();
  }
}}
    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
  }
它接受了,所以我不确定问题出在哪里


这是语法问题还是我遗漏了一些重要的东西

你有一个放错地方的花括号:你在
划桨
课程末尾有一个额外的结束花括号,你在
课程末尾缺少一个结束花括号

这是一个快速而肮脏的示例,但如果我修复了该问题(我还删除了串行内容,因为它可能与您的问题无关),那么您的代码至少会运行:

//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
  }
}

请注意,我已经删除了所有的游戏逻辑,因为它与语法错误无关。通常在创建MCVE的过程中,您会自己发现错误。祝你好运。

你的课堂陈述在哪里?因为你没有包括这些软件包,而且
paile
是软件包私有的:它们在不同的软件包中吗?请注意这是一个问题,并且。这意味着像包这样的东西不被使用。
//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
  }
}
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();
  }
}