2016-09-15 69 views
1

我正在爲一個Programming類創建一個突破遊戲。處理。類不存在

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(); 
    } 
}} 

Ball類

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 
    } 

我不與實際使遊戲的突破,但部分完成,問題是,我被拋出一個錯誤,讀「班'槳'不存在。」

我已經嘗試重新排序變量聲明(即使這應該不重要),我已經嘗試修復「槳」類本身中的所有錯誤。

我曾經有過的「球」類中的問題,但是,我加

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

它接受了它,所以我不知道是什麼問題。

它是一個語法的東西還是我忽略了一些重要的東西?

+0

你的班級陳述在哪裏? – xro7

+0

,因爲你沒有包括軟件包和'Paddle'是包私人的:他們是在單獨的包? – SomeJavaGuy

+1

請注意,這是[tag:processing]問題,[Processing!= Java](http://meta.stackoverflow.com/questions/321127/processing-java)。這意味着像軟件包這樣的東西沒有被使用。 –

回答

3

你有一個錯位的花括號:你在你Paddle類的末尾有一個額外的右大括號,和你缺少你Ball課程結束後右大括號。

這是一個快速和骯髒的例子,但如果我解決這個問題(我也去掉了串口的東西,因爲它可能已經無關,與你的問題),那麼你至少運行代碼:

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

請注意,我所做的唯一事情就是移動那個閉合的大括號。您的代碼可能有其他錯誤,但是這會修復ClassNotFound錯誤。

如果仍然無法正常工作,請提供MCVE。這意味着儘可能多地去除諸如串行代碼之類的額外內容,並進行硬編碼。這裏是你的MCVE應該多大的例子:

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(); 
    } 
} 

請注意,我已經採取了所有的遊戲邏輯的,因爲它無關,與你的語法錯誤。通常在創建一個MCVE的過程中,你會發現自己的錯誤。祝你好運。