Esercizio: Bouncing Ball, parte 3 (OOP)
Se vi siete persi gli articoli precedenti, qui trovate la parte 1 e la parte 2 di questo esercizio. Con questo post non aggiungeremo niente di nuovo al nostro programma ma rivedremo per intero il codice per trasformarlo in una versione ad oggetti.
Bouncing Ball Object Oriented
Per prima cosa aggiungiamo una nuova Tab che chiameremo Ball, come la classe che creeremo:
class Ball {
}
class Ball {
Ball() {
}
}
Questo è il risultato finale:
class Ball {
int ellipseX;
int ellipseY;
int speedX;
int speedY;
Ball() {
ellipseX = 0;
ellipseY = height/2;
speedX = 1;
speedY = 1;
}
void display() {
ellipse(ellipseX, ellipseY, 50, 50);
}
void move() {
ellipseX = ellipseX + speedX;
ellipseY = ellipseY + speedY;
}
void checkEdges() {
if (ellipseX > width || ellipseX < 0) {
speedX = speedX * -1;
}
if (ellipseY > height || ellipseY < 0) {
speedY = speedY * -1;
}
}
}
Ball myBall;
void setup() {
size(700, 500);
myBall = new Ball();
}
void draw() {
background(0);
myBall.display();
myBall.move();
myBall.checkEdges();
}
Aggiungiamo constructor
Miglioriamo la nostra classe creando dei nuovi constructor a cui possiamo passare delle variabili. Come già fatto nell'esempio del post precedente, conviene sostituire il data type delle variabili da integer a float.
class Ball {
// VARIABILI
float ellipseX;
float ellipseY;
float speedX;
float speedY;
// CONSTRUCTOR
Ball() {
ellipseX = random(width);
ellipseY = random(height);
speedX = 1;
speedY = 1;
}
Ball(float _ellipseX) {
ellipseX = _ellipseX;
ellipseY = random(height);
speedX = 1;
speedY = 1;
}
Ball(float _ellipseX, float _ellipseY) {
ellipseX = _ellipseX;
ellipseY = _ellipseY;
speedX = 1;
speedY = 1;
}
Ball(float _ellipseX, float _ellipseY, float _speedX) {
ellipseX = _ellipseX;
ellipseY = _ellipseY;
speedX = _speedX;
speedY = 1;
}
Ball(float _ellipseX, float _ellipseY, float _speedX, float _speedY) {
ellipseX = _ellipseX;
ellipseY = _ellipseY;
speedX = _speedX;
speedY = _speedY;
}
// METODI
void display() {
ellipse(ellipseX, ellipseY, 50, 50);
}
void move() {
ellipseX = ellipseX + speedX;
ellipseY = ellipseY + speedY;
}
void checkEdges() {
if (ellipseX > width || ellipseX < 0) {
speedX = speedX * -1;
}
if (ellipseY > height || ellipseY < 0) {
speedY = speedY * -1;
}
}
}
A questo punto non ci resta che sperimentare se funziona tutto correttamente provando a passare delle variabili alla nostra classe:
myBall = new Ball(random(width), random(height), 5, 10);