ok but now i got a bug on it the ball flies back to the paddle and doesnt return
Search for the error and fix it
show your code to get help
here
int size = 20;
float xpos, ypos;
float xspeed = random(5, 6);
float yspeed = random(0, 4);
float fehler1=0;
float fehler2=0;
float playerpos1;
float p1x;
float playerpos2;
float p2x;
String tela;
boolean trocou;
int scoreE = 0;
int scoreD = 0;
int scoreW = 10;
boolean hold = false ;
boolean move = true;
float easing = 0.05;
boolean attachpaddle = false;
void setup()
{
size(640, 400);
noStroke();
tela = "menu";
frameRate(30);
smooth();
playerpos1 =height/2;
playerpos2 =height/2;
xpos = 45;
ypos = playerpos1;
p1x = 10;
p2x = width-30;
hold();
}
void draw()
{
background(277);
scores();
if (hold && attachpaddle)
{
// ignore
} else
{
xspeed *= 1.001;
xpos += xspeed;
ypos += yspeed;
}
if (ypos > height-size/2 || ypos < 0+size/2) {
yspeed *= -1;
hold = true;
}
if ( xpos <= 30+size/2) {
if (ypos > playerpos1-50 && ypos < playerpos1+50) {
xspeed *= -1;
yspeed += (ypos-playerpos1)/5;
}
}
if (xpos <= 0) {
fehler1 += 1;
if (fehler1 <= 4) {
xpos = 50;
ypos = playerpos1;
xspeed = random(5, 6);
xspeed *= -1;
yspeed = 0;
println("player 2: "+ str(fehler2)+":"+str(fehler1) );
}
if (fehler1 ==100) {
println("player 2 win 5:"+ str(fehler2));
}
}
if ( xpos >= width-30-size/2) {
if (ypos > playerpos2-50 && ypos < playerpos2+50) {
xspeed *= -1;
yspeed += (ypos-playerpos2)/5;
}
}
if (xpos >= width) {
fehler2 +=1 ;
if (fehler2 <= 4) {
xpos = width-50;
ypos = playerpos2;
xspeed = -random(5, 6);
xspeed *= -1;
yspeed = 0;
println("ponto: "+ str(fehler2)+":"+str(fehler1) );
}
if (fehler2 ==100) {
println("player 1 ganhou 5:"+ str(fehler1));
}
}
if ( xpos <= 30+size/2) {
if (ypos > playerpos1-50 && ypos < playerpos1+50) {
if ( ! (hold && attachpaddle)) {
xspeed *= -1;
yspeed += (ypos-playerpos1)/5;
}
attachpaddle=true;
}
} else {
attachpaddle=false;
}
ellipse(xpos, ypos, size, size);
rect (p1x, playerpos1-50, 20, 100);
rect (p2x, playerpos2-50, 20, 100);
}
void menu() {
background(255, 0, 0);
}
void keyPressed() {
if (keyPressed) {
if (key == 'w') {
if (playerpos1 >=50)
playerpos1 = playerpos1 - 8;
}
if (key == 's') {
if (playerpos1 <=height-50)
playerpos1 = playerpos1 + 8;
}
if (key =='a') {
p1x = -8;
}
if (key == 'd') {
p1x = +8;
}
}
if (keyPressed) {
if (key == '7')
{
if (playerpos2 >=50)
playerpos2 = playerpos2 - 8;
}
if (key == '1') {
if (playerpos2 <=height-50)
playerpos2 = playerpos2 + 8;
}
if (key == '3') {
xspeed = 0;
yspeed = 0;
move = false;
}
if (key == ' ') {
hold = !hold;
}
}
}
void tutorial() {
background(277);
xspeed *= 1.001;
xpos += xspeed;
ypos += yspeed;
scores();
tela = "menu";
background(0, 255, 0);
trocou = true;
}
void scores() {
fill(255);
text(scoreE, 100, 50);
text(scoreD, width-100, 50);
if (xpos >640) {
scoreE += 1;
xspeed = xspeed*1.5;
yspeed = yspeed*1.5;
}
if (xpos < 0 ) {
scoreD += 1;
xspeed = xspeed*1.5;
yspeed = yspeed*1.5;
}
}
void AI() {
playerpos2 = xpos * easing;
}
void hold() {
if (hold) {
if (xpos == playerpos1) {
xspeed = 0;
}
}
}
int size = 20;
float xpos, ypos;
float xspeed = random(5, 6);
float yspeed = random(0, 4);
float fehler1=0;
float fehler2=0;
float playerpos1;
float p1x;
float playerpos2;
float p2x;
String tela;
boolean trocou;
int scoreE = 0;
int scoreD = 0;
int scoreW = 10;
boolean hold=false;
boolean attachedToPaddle=false;
boolean move = true;
float easing = 0.05;
void setup()
{
size(640, 400);
noStroke();
tela = "menu";
frameRate(30);
smooth();
playerpos1 =height/2;
playerpos2 =height/2;
xpos = 45;
ypos = playerpos1;
p1x = 10;
p2x = width-30;
}
void draw()
{
background(277);
if (hold && attachedToPaddle)
{
// ignore
} else
{
xspeed *= 1.001;
xpos += xspeed;
ypos += yspeed;
}
scores();
hold();
switch (tela) {
case "MENU":
menu();
break;
case "TUTORIAL":
tutorial();
break;
}
if (ypos > height-size/2 || ypos < 0+size/2) {
yspeed *= -1;
}
if ( xpos <= 30+size/2) {
if (ypos > playerpos1-50 && ypos < playerpos1+50) {
if ( ! (hold && attachedToPaddle)) {
xspeed *= -1;
yspeed += (ypos-playerpos1)/5;
}
attachedToPaddle=true;
}
} else {
attachedToPaddle=false;
}
if (xpos <= 0) {
fehler1 += 1;
if (fehler1 <= 4) {
xpos = 50;
ypos = playerpos1;
xspeed = random(5, 6);
xspeed *= -1;
yspeed = 0;
println("player 2: "+ str(fehler2)+":"+str(fehler1) );
}
if (fehler1 ==5) {
println("player 2 win 5:"+ str(fehler2));
}
}
if ( xpos >= width-30-size/2) {
if (ypos > playerpos2-50 && ypos < playerpos2+50) {
xspeed *= -1;
yspeed += (ypos-playerpos2)/5;
}
}
if (xpos >= width) {
fehler2 +=1 ;
if (fehler2 <= 4) {
xpos = width-50;
ypos = playerpos2;
xspeed = -random(5, 6);
xspeed *= -1;
yspeed = 0;
println("ponto: "+ str(fehler2)+":"+str(fehler1) );
}
if (fehler2 ==5) {
println("player 1 ganhou 5:"+ str(fehler1));
}
}
ellipse(xpos, ypos, size, size);
rect (p1x, playerpos1-50, 20, 100);
rect (p2x, playerpos2-50, 20, 100);
text(str(hold), 333, 33);
}
void menu() {
background(255, 0, 0);
}
// --------------------------------------------------------------------------
void keyPressed() {
if (key == 'w') {
if (playerpos1 >=50)
playerpos1 = playerpos1 - 8;
}
if (key == 's') {
if (playerpos1 <=height-50)
playerpos1 = playerpos1 + 8;
}
if (key =='a') {
p1x = -8;
}
if (key == 'd') {
p1x = +8;
}
// -------------------
if (key == '7')
{
if (playerpos2 >=50)
playerpos2 = playerpos2 - 8;
}
if (key == '1') {
if (playerpos2 <=height-50)
playerpos2 = playerpos2 + 8;
}
if (key == '3') {
xspeed = 0;
yspeed = 0;
move = false;
}
if (key == ' ') {
hold = ! hold;
}
}
void keyReleased() {
//hold = false;
//attachedToPaddle=false;
}
// --------------------------------------------------------------------------
void tutorial() {
background(277);
xspeed *= 1.001;
xpos += xspeed;
ypos += yspeed;
scores();
tela = "menu";
background(0, 255, 0);
trocou = true;
}
void scores() {
fill(255);
text(scoreE, 100, 50);
text(scoreD, width-100, 50);
if (xpos >640) {
scoreE += 1;
xspeed = xspeed*1.5;
yspeed = yspeed*1.5;
}
if (xpos < 0 ) {
scoreD += 1;
xspeed = xspeed*1.5;
yspeed = yspeed*1.5;
}
}
void AI() {
playerpos2 = xpos * easing;
}
void hold() {
if (hold) {
if (xpos == playerpos1) {
// xspeed = 0;
}
}
}
//
It works. Thanks man you’re a saint, was having a lot of trouble with that code.
you can still make it so, when the ball is attached to the paddle and the paddle is moved, the ball would move together with the paddle
i’ll give it a try, all thats left is make it work to the other paddle.
and a way to turn off the game and make a title screen instructions and credits
I was commenting on menu already (it’s the tela variable)
in this sketch:
click mouse in menu and click ESC during game
(similar to function menu() put the game stuff from draw into a new function playGame()
, so your draw() is nice and lean)
int size = 20;
float xpos, ypos;
float xspeed = random(5, 6);
float yspeed = random(0.6, 4);
float fehler1=0;
float fehler2=0;
float playerpos1;
float p1x;
float playerpos2;
float p2x;
String tela;
boolean trocou;
int scoreE = 0;
int scoreD = 0;
int scoreW = 10;
boolean hold=false;
boolean attachedToPaddle=false;
boolean move = true;
float easing = 0.05;
void setup() {
size(640, 400);
noStroke();
tela = "MENU";
frameRate(30);
smooth();
playerpos1 =height/2;
playerpos2 =height/2;
xpos = 45;
ypos = playerpos1;
p1x = 10;
p2x = width-30;
}
void draw() {
switch (tela) {
// ------------------------------------
case "GAME":
background(277);
if (hold && attachedToPaddle)
{
// ignore
} else
{
xspeed *= 1.001;
xpos += xspeed;
ypos += yspeed;
}
scores();
hold();
if (ypos > height-size/2 || ypos < 0+size/2) {
yspeed *= -1;
}
if ( xpos <= 30+size/2) {
if (ypos > playerpos1-50 && ypos < playerpos1+50) {
if ( ! (hold && attachedToPaddle)) {
xspeed *= -1;
yspeed += (ypos-playerpos1)/5;
}
attachedToPaddle=true;
}
} else {
attachedToPaddle=false;
}
if (xpos <= 0) {
fehler1 += 1;
if (fehler1 <= 4) {
xpos = 50;
ypos = playerpos1;
xspeed = random(5, 6);
xspeed *= -1;
yspeed = 0;
println("player 2: "+ str(fehler2)+":"+str(fehler1) );
}
if (fehler1 ==5) {
println("player 2 win 5:"+ str(fehler2));
}
}
if ( xpos >= width-30-size/2) {
if (ypos > playerpos2-50 && ypos < playerpos2+50) {
xspeed *= -1;
yspeed += (ypos-playerpos2)/5;
}
}
if (xpos >= width) {
fehler2 +=1 ;
if (fehler2 <= 4) {
xpos = width-50;
ypos = playerpos2;
xspeed = -random(5, 6);
xspeed *= -1;
yspeed = 0;
println("ponto: "+ str(fehler2)+":"+str(fehler1) );
}
if (fehler2 ==5) {
println("player 1 ganhou 5:"+ str(fehler1));
}
}
ellipse(xpos, ypos, size, size);
rect (p1x, playerpos1-50, 20, 100);
rect (p2x, playerpos2-50, 20, 100);
text(str(hold), 333, 33);
break;
// ------------------------------------
case "MENU":
menu();
break;
// ------------------------------------
case "TUTORIAL":
tutorial();
break;
}
}
void menu() {
background(255, 0, 0);
fill(0, 0, 0);
text ("MENUE",
111, 111);
}
// --------------------------------------------------------------------------
void keyPressed() {
if (key == 'w') {
if (playerpos1 >=50)
playerpos1 = playerpos1 - 8;
}
if (key == 's') {
if (playerpos1 <=height-50)
playerpos1 = playerpos1 + 8;
}
if (key =='a') {
p1x = -8;
}
if (key == 'd') {
p1x = +8;
}
// -------------------
if (key == '7')
{
if (playerpos2 >=50)
playerpos2 = playerpos2 - 8;
}
if (key == '1') {
if (playerpos2 <=height-50)
playerpos2 = playerpos2 + 8;
}
if (key == '3') {
xspeed = 0;
yspeed = 0;
move = false;
}
if (key == ' ') {
hold = ! hold;
}
if (key == ESC) {
tela="MENU";
key=0;
}
}
void keyReleased() {
//hold = false;
//attachedToPaddle=false;
}
void mousePressed() {
switch (tela) {
// ------------------------------------
case "GAME":
break;
// ------------------------------------
case "MENU":
tela="GAME";
break;
// ------------------------------------
case "TUTORIAL":
tutorial();
break;
}
}
// --------------------------------------------------------------------------
void tutorial() {
background(277);
xspeed *= 1.001;
xpos += xspeed;
ypos += yspeed;
scores();
tela = "menu";
background(0, 255, 0);
trocou = true;
}
void scores() {
fill(255);
text(scoreE, 100, 50);
text(scoreD, width-100, 50);
if (xpos >640) {
scoreE += 1;
xspeed = xspeed*1.5;
yspeed = yspeed*1.5;
}
if (xpos < 0 ) {
scoreD += 1;
xspeed = xspeed*1.5;
yspeed = yspeed*1.5;
}
}
void AI() {
playerpos2 = xpos * easing;
}
void hold() {
if (hold) {
if (xpos == playerpos1) {
// xspeed = 0;
}
}
}
//
thanks, any problem i got i’ll come back to you
oh and quick question how do i make the ball follow the paddle when attached
In keypressed when it’s attached just add to the ball like you do with the ball
so xpos = player1pos?
xpos=xpos-8;
I think
i put it in the ’ ’ keycode under the hold = !hold?
i think the ball not following the padle is a blessing in disguise
our goal here is:
ball is already attached
we move the paddle
ball moves with the paddle
which keys are involved?
No. Or as you like it.
when the attached ball is moving with paddle it looks better.
And you can decide where you throw the ball by moving the ball prior to sending it again
i had an idea
scrap right paddle holding the ball make it so only the left one holds and and put a breakout like like behind the right paddle making it a mix between pong and breakout.
the left paddle is an attacker while the right one is a defender