Το ζητούμενο: Να πέφτουν αντικείμενα (κυκλάκια) από το πάνω μέρος του παραθύρου. Ο παίκτης να είναι ένα αντικείμενο (μεγαλύτερος κύκλος) που να κινείται στο κάτω μέρος του παραθύρου στον άξονα x. Η κίνηση να γίνεται είτε με το ποντίκι είτε με τα βελάκια. Αν πιάνει ένα αντικείμενο, ο παίκτης κερδίζει σκορ. Αν δεν προλάβει να το πιάσει, χάνει ζωές.
Φτιάχνουμε αρχικά τον κώδικα με κύκλους.
Αργότερα, θα αντικαταστήσουμε τους κύκλους με γραφικά.
BHMA 1 - Ένα αντικείμενο που πέφτει
float x1 = 150; // θέση 1ου κύκλου
float y1 = 25;
float d1 = 50; // διάμετρος 1ου κύκλου
float speed1 = 2; // ταχύτητα 1ου κύκλου
color color1 = #2CFA12; // χρώμα 1ου κύκλου
void setup()
{
size(800, 600);
}
void draw()
{
background(0, 0, 255);
fill (color1);
ellipse(x1, y1, d1, d1); // εμφάνιση 1ου κύκλου
y1 = y1 + speed1; // υπολογισμός επόμενης θέσης (λίγο πιο κάτω)
if (y1 >= height - d1/2) // έλεγχος αν έφτασε κάτω κάτω
y1 = 0; // στέλνουμε τον κύκλο πάλι πάνω
} // εδώ κλείνει η draw
ΒΗΜΑ 2 - Πολλά αντικείμενα που πέφτουν
Προσθέτουμε παρόμοιο κώδικα για ακόμα 3 κυκλάκια.
Κάθε νέο κυκλάκι χρειάζεται τις δικές του μεταβλητές.
ΒΗΜΑ 3 - Ο παίκτης
Αν θέλουμε ο παίκτης να κινείται με το ποντίκι, αρκεί να δημιουργηθεί μέσα στη draw ένας κύκλος με συντεταγμενη x το mouseX:
fill(0);
ellipse(mouseX, 500, 80, 80);
Αν θέλουμε ο παίκτης να κινείται με τα βελάκια, δηλώνουμε την συντεταγμένη x του παίκτη και την ταχύτητά του ως μεταβλητές:
float playerX = 400;
float playerSpeed = 0;
Μέσα στη draw εμφανίζουμε τον παίκτη:
fill(0);
ellipse(playerX, 500, 80, 80);
playerX = playerX + playerSpeed;
Και γράφουμε κώδικα για το event keyPressed() ώστε να διαχειριστούμε τα βελάκια:
void keyPressed()
{
if (key == CODED)
{
if (keyCode == RIGHT)
playerSpeed = 2;
if (keyCode == LEFT)
playerSpeed = -2;
}
} // εδώ κλείνει η keyPressed
Τι παρατηρούμε;
ΒΗΜΑ 4 - Ο παίκτης πρέπει να σταματάει κάποτε
Γράφουμε κώδικα για το event keyReleased():
void keyReleased()
{
playerSpeed = 0;
}
Τι παρατηρούμε;
Θα χρησιμοποιήσουμε δύο μεταβλητές που θα δείχνουν αν ο παίκτης πατάει κάποιο από τα βελάκια:
boolean right = false; // θα γίνει true αν πατηθεί το δεξί βέλος
boolean left = false; // θα γίνει true αν πατηθεί το αριστερό βέλος
Τροποποιούμε τoν κώδικα keyPressed, ώστε να γίνεται true η αντίστοιχη μεταβλητή:
if (keyCode == RIGHT)
{
playerSpeed = 2;
right = true;
}
if (keyCode == LEFT)
{
playerSpeed = -2;
left = true;
}
Τροποιούμε τον κώδικα keyReleased, ώστε να αλλάζει η αντίστοιχη μεταβλητή σε false, κι αν και οι δύο είναι false, να μηδενίζεται η ταχύτητα του παίκτη:
void keyReleased()
{
if (key == CODED)
{
if (keyCode == RIGHT)
right = false;
if (keyCode == LEFT)
left = false;
}
if (left == false && right == false)
playerSpeed = 0;
} // εδώ κλείνει η keyReleased
ΒΗΜΑ 5 - Σύγκρουση παίκτη και αντικειμένου
Μέσα στη draw ελέγχουμε την απόσταση των δύο κέντρων, παίκτη κ αντικειμένου:
if (dist(x1, y1, playerX, 500) <= 40 + d1/2)
{
y1 = 0;
}