Here is my shy tribute to the mythical Pong of the 70s (It’s an experiment… I’m a 69 years old beginners so … be patient).
It works fine in Android Mode on my Oppo A74 5G: change the lines as suggested in the comments to use this code in Android Mode.
The “eps2” random value (//*** in the code) provides a slightly random bouncing on the topo of the screen; this is to prevent “ball loops” where the ball would follow the same pattern and the player could go on and on keeping the paddle in a fixed position.
You move the paddle shifting your finger beneath the paddle. You start the game or play a new game touching the screen beneath the paddle.
Speed increases (until it reaches a maximum) and you score one point each time the ball touches the paddle (extra ball at 50 and 70 points).
In the “Game Over” screen there is a warning text: “this game can cause pathological addiction. Play in moderation”
float x, y, p;
float dx, dy;
float bordo, ly, lx, llx, lly;
float n=3; // Use n=9 for Android Mode; n=3 for Java Mode
float epsilon;
int sc=0;
int nb=3;
int screen=1; //1>Introduction, 2>Play, 3>Game Over
float raggio;
float eps2;
int bkg=105;
void setup() {
orientation(PORTRAIT);
// Use "fullScreen()" for Android Mode;
// Use "size(295,656)" for Java Mode
//fullScreen();
size(295, 656);
ellipseMode(RADIUS);
bordo=min(height, width)/10;
ly=0.8*height-bordo/2; // limite massimo per y
lly=bordo/2; // limite minimo per y
lx=width-bordo/2; //limite massimo per x
llx=bordo/2; // limite minimo per x
inclinazione();
p=width/8; //lunghezza paletta - paddle lenght
raggio=0.25*p;
epsilon=0.65*p;
x=random(llx+epsilon, lx-epsilon);
y=random(lly+epsilon, ly/2);
textSize(bordo/2);
}
void draw() {
background(bkg); // grigio
strokeWeight(bordo);
stroke(0);// nero
noFill();
rect(0, 0, width, height);
strokeWeight(3);
line(0, ly, width, ly);
fill(255);// bianco
if (screen==1) {
bkg=105;
eps2=0;
sc=0;
n=3; // Use n=9 for Android Mode; n=3 for Java Mode
textSize(bordo);
text(" A-PONG", 1.5*bordo, 3*bordo);
textSize(bordo/2);
text("Un omaggio al mitico....", 2*bordo, 5*bordo);
text("PONG degli anni settanta", 2*bordo, 6*bordo);
text("Muovi spostando il dito", 2*bordo, 8*bordo);
text("sotto la racchetta", 2*bordo, 9*bordo);
text("** Extra ball a 50 punti **", 2*bordo, 11*bordo);
text("** Extra ball a 70 punti **", 2*bordo, 12*bordo);
text("Tocca lo schermo", 2*bordo, 14*bordo);
text("sotto la racchetta", 2*bordo, 15*bordo);
text("per giocare.", 2*bordo, 16*bordo);
variazione();
}
if (screen==2) {
text("Score: "+str(sc), 1.5*bordo, 2*bordo);
text("Balls: "+str(nb), 1.5*bordo, 3*bordo);
noStroke();
rect(mouseX-p/2, 0.8*height-bordo/2, p, bordo/3);
ellipse(x, y, raggio, raggio);
eps2=0;
if (y>=ly-raggio) {
if (abs(mouseX-x)<epsilon) {
y=ly-raggio;
dy=-dy;
if (n<20) {
n=n+0.8;
}
sc++;
if (sc==50) {
nb++;
bkg=75;
}
if (sc==70) {
nb++;
bkg=50;
}
} else
fine();
}
if (y<lly+raggio) {
y=lly+raggio;
dy=-dy;
eps2=random(-12, 12);
} //***
if (x>lx-raggio) {
x=lx-raggio;
dx=-dx;
}
if (x<llx+raggio) {
x=llx+raggio;
dx=-dx;
}
x=x+n*(dx+eps2);
y=y+n*dy;
}
if (screen==3) {
bkg=105;
n=3; // Use n=9 for Android Mode; n=3 for Java Mode
eps2=0;
text("Final Score: "+str(sc), 1.5*bordo, 2*bordo);
textSize(bordo);
text(" GAME OVER", 1.5*bordo, 4*bordo);
textSize(bordo/2);
text("Un esperimento di E. Rapella", 1.5*bordo, 6*bordo);
text("con 'Processing for Android'", 1.5*bordo, 7*bordo);
text("Tocca lo schermo", 1.5*bordo, 9*bordo);
text("sotto la racchetta", 1.5*bordo, 10*bordo);
text("per un'altra partita,", 1.5*bordo, 11*bordo);
text("** ATTENZIONE **", 1.5*bordo, 13*bordo);
text("Questo gioco puo' causare", 1.5*bordo, 14*bordo);
text("dipendenza patologica.", 1.5*bordo, 15*bordo);
text("Gioca con moderazione!", 1.5*bordo, 16*bordo);
variazione();
} // end if screen==3
} // end draw()
void inclinazione() {
dx=1.3;
dy=random(-2.7, -1.3);
}
void mousePressed() {
if (mouseY>ly) {
if (screen==1) {
n=3; // Use n=9 for Android Mode; n=3 for Java Mode
screen=2;
inclinazione();
}
if (screen==3) {
n=3; // Use n=9 for Android Mode; n=3 for Java Mode
sc=0;
nb=3;
screen=1;
inclinazione();
}
}
}
void fine() {
if (nb>0) {
nb=nb-1;
x=random(llx, lx);
y=random(lly, ly/2);
inclinazione();
n=3; // Use n=9 for Android Mode; n=3 for Java Mode
} else
{
inclinazione();
screen=3;
}
} // end fine()
void variazione() {
noStroke();
rect(x-p/2, 0.8*height-bordo/2, p, bordo/3);
ellipse(x, y, raggio, raggio);
if (y>ly-raggio) {
y=ly-raggio;
dy=-dy;
}
if (y<lly+raggio) {
y=lly+raggio;
dy=-dy;
}
if (x>lx-raggio) {
x=lx-raggio;
dx=-dx;
}
if (x<llx+raggio) {
x=llx+raggio;
dx=-dx;
}
x=x+n*dx;
y=y+n*dy;
}