lol from processing 3.5.3 there is a circle ( my code runs here )
anyhow i think i see your problem.
the edges() function does the y change,
but the x change has no chance to run,
as the:
checkPaddleLeft(Paddle p)
if (x > p.x) xspeed *= -1;
checkPaddleRight(Paddle p)
if ( x < p.x) xspeed *= -1;
change the x speed some pix earlier…
just disable that part.
the version i play with:
// https://discourse.processing.org/t/score-doesnt-work/9418/
// score doesn,t work
// Objekten
Puck puck; //Der Puck
Paddle left; //Der linke Schläger
Paddle right; //Der rechte Schläger
int leftscore = 0; //Linken Score beträgt 0 Punkte am Anfang des Spieles
int rightscore = 0;//Rechten Score beträgt 0 Punkte am Anfang des Spieles
//"void" definiert eine Methode ohne Rückgabewert
void setup() { //Befehle, die zu Anfangs ×1 ausgeführt werden
size(600, 400); //Größe(in Pixel)
puck = new Puck(); //neues Objekt(in disem Fall der Puck)wird gemacht
left = new Paddle(true);
right = new Paddle(false);
// so könnte das Programm wissen, dass es 2 verschiedene Schläger gibt
}
void draw() { //nachdem setup() werden die Befehle bei draw() ohne Ende ausgeführt
background(#D9A8D1); //Hintergrundfarbe
//Funktionenserstellungen
puck.checkPaddleLeft(left); //,damit der Puck "wissen" kann, wann er den linken Schläger berührt
puck.checkPaddleRight(right);//,damit der Puck "wissen" kann, wann er den rechten Schläger berührt
left.show(); //,damit der linke Schläger "sich zeigt"
right.show();//,damit der rechte Schläger "sich zeigt"
left.update();//,um z.B.die Werten die beim linken Schläger geschrieben wurden zu "aktualisieren"(z.B. neue informationen über bestimmte Variablen und ihre Werte geben)
right.update();//es werden Informationen "aktualisiert" wie z.B. in diesem Fall die Werte den Variablen des rechten Schlägers
puck.edges();//,damit der Puck nicht weiter von der Kante geht
puck.update();//es werden Informationen über den Puck "aktualisiert" wie z.B. die Werte den Variablen
puck.show();//,damit der Puck "sich zeigt"
fill(255); //Farbe des Textes(des Scores)
textSize(32); //Größe des Textes
text(leftscore, 32, 40); //Position des linken Textes
text(rightscore, width-64, 40); //Position des rechten Rextes
}
void keyReleased() { // Funktion, die bei jedem Loslassen einer Taste aufgerufen wird
left.move(0); // der linke Schläger bewegt sich gar nicht mehr
right.move(0); // der rechte Schläger bewegt sich gar nicht mehr
}
void keyPressed() { //Funktion für das Drucken von Tasten(muss in draw() stehen, damit es sich nicht nur einmal wiederholt)
if (key == 'a') {
left.move(-10); //Falls die Taste 'a' gedruckt wird, dann geht der linke Schläger 10 Schritte nach unten
} else if ( key == 'd') {
left.move(10); //Falls die Taste 'd' gedruckt wird, dann geht der linke Schläger 10 Schrite nach oben
}
if (key == 'j') {
right.move(-10); //Falls die Taste 'j' gedruckt wird, dann bewegt sich der rechte Schläger 10 Schritte nach unten
} else if (key == 'l') {
right.move(10); //Falls die Taste 'l' gedruckt wird, dann bewegt sich der rechte Schläger 10 Schritte nach oben
}
}
class Paddle { //Funktionen und Attribute des Schlägers werden definiert
float x; //Variable 'x'(x-Position) definieren
float y = height/2; //Variable 'y'(y-Position) definieren und es als Wert die Hälfte des Bildhöhenwerts zuordnen
float w = 20; //Variable 'w'(width=Breite des Schlägers)definieren und es den Wert 20 (20 Pixel) zuordnen
float h = 100; //Variable 'h'(height=Höhe des Schlägers)definieren und es den Wert 100 (100 Pixel) zuordnen
float ychange = 0; //Variable, die die Menge an Pixeln bei Änderungen der y-Position (oder bei der vertikalen Bewegung des Pucks) jedes Mal durch draw() speichert(sie wird definiert und den Wert 0 am Anfang des Spieles bekommen)
Paddle (boolean left) { //Ist es der linke oder der rechte Schläger?('boolean' wird für eine Variable, die nur zwei Werte haben kann, benutzt('true' oder 'false'))
if (left) {
x = w/2 + 10; //Falls es der linke ist, dann beträgt 'x'(seine x-Position) die Hälfte seiner Breite (d.h. 20:2=10) plus 10
} else {
x = width - w/2 - 10; //Ansonsten(also falls es der rechte Schläger ist), dann beträgt 'x'(seine x-Position) die Breite des Bildes minus die Hälfte der Breite des Schlägers(20:2=10) minus 10
}
}
void update() { //Attribute der Schlägern werden "aktualisiert"
y += ychange; // '+=' kombiniert Addition und Gleichheit. Also y(die y-Position der Schlägern) ist gleich y+ychange
y = constrain(y, h/2, height - h/2); //beschränkt "y" auf einen maximalen und einen minimalen Wert
}
void move(float steps) { //die Variable "steps"(=Schritte) wird definiert und bei der Bewegung benutzt
ychange = steps; //die Variable "ychange" bedeutet die Variable "steps"(=Schritte)
}
void show() { //, damit die Schläger sich zeigen
fill(#961C82); //die Farbe der Schlägern
rectMode(CENTER); //die Position der Rechtecken(in den Klammern wird geschrieben, wo die stehen sollen. In disem Fall ist es die Mitte)
rect(x, y, w, h); //Form der Schlägern(Rechtecken)
}
}
class Puck { //Eigenschaften und Methoden des Pucks werden definiert
float x = width/2; //Variable 'x'(x-Position des Pucks)dekfinieren und ihm als Wert die Hälfte der maximalen Wert der Bildbreite zuordnen
float y = height/2;//Variable 'y'(y-Position des Pucks)definieren und ihm als Wert die Hälfte der maximalen Bildhöhenwert zuordnen
float xspeed; //Variable 'xspeed'(=die Geschwindigkeit der Bewegung der x-Position des Pucks) definieren
float yspeed; //Variable 'yspeed'(=die Geschwindigkeit der Bewegung der y-Position des Pucks) definieren
float r = 12; //Variable 'r'(Radius des Pucks) definieren und ihm den Wert 12(Pixel) zuordnen
Puck() {
reset();
} //die Funktion "reset()" wird dür den Puck erstellt
void checkPaddleLeft(Paddle p) { //Der Puck prüft, ob er am linken Schläger vorbeigegangen ist(in den Klammern steht, dass "Paddle" "p" abgekürzt wird)
if ( y < p.y + p.h/2 && y > p.y - p.h/2 && x - r < p.x + p.w/2) xspeed *= -1;
//Falls die y-Position des Pucks kleiner als die y-Position des linken Schlägers plus die Hälfte der Höhe des linken Schlägers ist
//und die y-Position des Pucks größer als die y-Position des linken Schlägers minus die Hälfte der Höhe des linken Schlägers ist
//und die x-Position des Pucks minus sein Radius kleiner als die x-Position des linken Schlägers plus die Hälfte der Breite des linken Schlägers ist, dann xspeed = xspeed*(-1)
//kll if (x > p.x) xspeed *= -1; //Falls die x-Position des Pucks größer als die x-Position des linken Schlägers ist("p.x"="paddle's x"= x-Position des linken Schlägers), dann xspeed = xspeed*(-1)
}
void checkPaddleRight(Paddle p) { // Der Puck prüft, ob er am rechten Schläger vorbeigegangen ist (in den Klammern steht, dass "Paddle" "p" abgekürzt wird)
if (y < p.y + p.h/2 && y > p.y - p.h/2 && x + r > p.x - p.w/2) xspeed *= -1;
//Falls die y-Position des Pucks kleiner als die y-Position des rechten Schlägers plus die Hälfte der Höhe des rechten Schlägers ist
//und die y-Position des Pucks größer als die y-Position des rechten Schlägers minus die Hälfte der Höhe des rechten Schlägers ist
//und die x-Position des Pucks plus seinem Radius größer als die x-Position des rechten Schlägers minus die Hälfte der Breite des rechten Schlägers ist, dann xspeed=xspeed*(-1) (d.h. der Puck geht 1 Mal langsamer als er ging)
//kll if ( x < p.x) xspeed *= -1; //Falls die x-Position des Pucks kleiner als die x-Position des rechten Schlägers ist, dann xspeed = xspeed*(-1)
}
void update() { //Variablen des Pucks werden "aktualisiert"
x = x + xspeed;//die x-Position des Pucks ist gleich seine x-Position vom Anfang des Spieles plus dem "xspeed"
y = y + yspeed;//die y-Position des Pucks ist gleich seine y-Position vom Anfang des Spieles plus dem "yspeed"
}
void reset() { //der Puck wird resetiert(er geht an andere Positionen, nachdem er einer der Schlägern berührt hatte)
x = width/2; //seine x-Position ist die Hälfte der Bildschirmbreite
y = height/2; //seine y-Position ist die Hälfte der Bildschirmhöhe
float angle = random(-PI/4, PI/4); //die Variable "angle"(=Winkel) wird definiert und sie ist gleich mit den Zufallspositionen von dem Viertel des PIs des Pucks im Minus-Bereich und dem Viertel des PIs des Pucks im Plus-Bereich(+PI/4 nicht einschließlich)
xspeed = 5 * cos(angle); //"xspeed" ist gleich mit dem Cosinus von der Variable "angle" mal 5(die Funktion cos() berechnet den Cosinus eines Winkels(in den Klammern steht, dass es die Variable "angle"(=Winkel) berechnen muss, die immer neue Zufallswerte vom -PI/4 bis zum +PI/4, nicht einschließlich, hat))
yspeed = 5 * sin(angle); //"yspeed" ist gleich mit dem Sinus von der Variable "angle" mal 5(die Funktion sin() berechnet den Sinus eines Winkels(in den Klammern steht, dass es die Variable "angle"(=Winkel) berechnen muss, die immer neue Zufallswerte vom -PI/4 bis zum +PI/4, nicht einschließlich, hat))
if (random(1) < 0.5) {
xspeed *= -1; //Falls die Zufallsposition des Pucks(vom 0 bis zum 1, aber 1 nicht einschließlich) kleiner als 0.5 ist, dann xspeed=xspeed*(-1) (also es wird 1 Mal langsamer als es war)
}
}
void edges() { //,damit der Puck nicht weiter von den Kanten/Randen geht
if ( y < 0 || y > height) {
yspeed *= -1; // Falls die y-Position des Pucks kleiner als 0 ist(also ganz links) oder die y-Position größer als den maximalen Höhenwert des Bildschirms, dann yspeed = yspeed * (-1)
println("yspeed "+yspeed);
}
if ( x - r < 0 ) {
rightscore++;
println("rightscore++"+rightscore); // kll
reset(); //Falls die x-Position des Pucks kleiner als 0 ist(also ganz links), dann wird das Geräusch gespielt, der rechte Score wird sich erhöhen(um +1 ändern) und die Funktion reset() wird aufgerufen
}
if ( x + r > width ) {
leftscore++ ;
println("leftscore++"+leftscore); // kll
reset();
//Falls die x-Position des Pucks größer als den maximalen Bildbreitenwert ist(d.h. ganz rechts), dann wird das Geräusch gespielt, der linke Score wird sich erhöhen(um +1 ändern) und die Funktion reset() wird aufgerufen
}
}
void show() { //Puck zeigt sich
fill(#961C82); //Farbe des Pucks
ellipse(x, y, r*2, r*2); //Form des Pucks(ein Kreis)
}
}
/*
int leftscore = 0;
int rightscore = 0;
int x=20, y=x, yspeed = 2, xspeed = 1, r=x;
void edges() {
if ( y < r || y > height-r) {
yspeed *= -1;
println("yspeed "+yspeed);
}
if ( x < r ) {
rightscore++ ;
xspeed *= -1;
println("rightscore++"+rightscore);
// reset();
}
if ( x > width-r ) {
leftscore++ ;
xspeed *= -1;
println("leftscore++"+leftscore);
// reset();
}
}
void setup() {
size(500, 500);
}
void draw() {
background(200, 200, 0);
stroke(200, 0, 0);
circle(x, y, 2*r);
x += xspeed;
y += yspeed;
edges();
}
*/