// μεταβλητές για θέση και ταχύτητα μπάλας float ballX, ballY, speedX, speedY; // μεταβλητή για διάμετρο μπάλας float d = 10; // μεταβλητή για μέγεθος ρακέτας (θα είναι το ύψος, επειδή είναι κάθετη) float rectSize = 200; // μεταβλητή για το σκορ int score = 0; void setup() { size(500, 500); // μέγεθος παραθύρου fill(0, 255, 0); // το χρώμα των σχημάτων είναι πράσινο ballX = width/2; // η μπάλα ξεκινάει στη μέση του παραθύρου ballY = height/2; speedX = random(3, 5); // τυχαία αρχική ταχύτητα σε κάθε άξονα speedY = random(3, 5); textSize(20); // μέγεθος γραμμάτων } // τέλος της setup void draw() { background(0); // Eμφάνιση της μπάλας ellipse(ballX, ballY, d, d); // Eμφάνιση του απέναντι τοίχου (πλάτος 20, ύψος όσο το παράθυρο) rect(0, 0, 20, height); // Eμφάνιση της ρακέτας // Η ρακέτα έχει μικρό πλάτος (10) και μεγαλύτερο ύψος (rectSize). // Στον άξονα x το πάνω αριστερά σημείο της ρακέτας είναι σε σταθερή θέση, // δηλ. 30 pixel πριν το άκρο του παραθύρου (width - 30). // H ρακέτα κινείται μόνο στον άξονα y με βάση τη θέση του mouse. Αν θέλουμε // η αίσθηση του παίκτη να είναι ότι πιάνει τη ρακέτα από το πάνω αριστερά σημείο // τότε θα βάλουμε ως y συντεταγμένη (του πάνω αριστερά σημείου) απλά το mouseY. // Αν θέλουμε η αίσθηση του παίκτη να είναι ότι πιάνει τη ρακέτα από τη μέση // τότε θα βάλουμε ως y συντεταγμένη (του πάνω αριστερά σημείου) το mouseY-rectSize/2. rect(width-30, mouseY-rectSize/2, 10, rectSize); // υπολογισμός της επόμενης θέσης της μπάλας ballX = ballX + speedX; ballY = ballY + speedY; // Αν η μπάλα ακουμπήσει τη ρακέτα, αλλάζει κατεύθυνση στον άξονα x. // Άρα η ταχύτητα speedX πολλαπλασιάζεται με -1. // Και το σκορ αυξάνεται. // Ποια συνθήκη δείχνει ότι η μπάλα ακούμπησε τη ρακέτα; // Αυτό θέλει σκέψη.... if ( ballX >= width-30 && ballX <= width-20 && ballY >= mouseY-rectSize/2 && ballY <= mouseY+rectSize/2 ) { speedX = -speedX; // τυχαία αρχική ταχύτητα σε κάθε άξονα score++; } // Αν η μπάλα ακουμπήσει τον απέναντι τοίχο, αλλάζει κατεύθυνση // στον άξονα x. Άρα η ταχύτητα speedX πολλαπλασιάζεται με -1. // Αν επιπλέον θέλουμε η μπάλα να επιταχύνει ελαφρώς, τότε πολλαπλασιάζουμε // την speedX με -1.1 και την ταχύτητα speedY με 1.1 // Ποια συνθήκη δείχνει ότι η μπάλα ακούμπησε στον τοίχο; Όταν το κέντρο της μπάλας // απέχει από την άκρη του παραθύρου όσο το πλάτος του τοίχου (20) συν η ακτίνα της μπάλας (d/2). //if (ballX >= width-20 && ballY >= height || ballX >= width-30 && ballY >= height ) if (ballX <= 20+d/2) { speedX = speedX * -1.1; speedY = speedY * 1.1; } // Αν η μπάλα ακουμπήσει στο πάνω ή κάτω άκρο του παραθύρου, αλλάζει κατεύθυνση // στον άξονα y. Άρα η ταχύτητα speedY πολλαπλασιάζεται με -1. // Ποια συνθήκη δείχνει ότι η μπάλα ακούμπησε πάνω; Όταν το κέντρο της απέχει // από την πάνω άκρη του παραθύρου όσο η ακτίνα (d/2) της μπάλας. // Ποια συνθήκη δείχνει ότι η μπάλα ακούμπησε κάτω; Όταν το κέντρο της έχει φτάσει // χαμηλά στον άξονα y, και απέχει από την κάτω άκρη όσο η ακτίνα της μπάλας (height-d/2). if ( ballY <= d/2 || ballY >= height-d/2) { speedY = -speedY; } // Εμφάνιση του σκορ text("SCORE: " + score, width/2 - 50, 30); } //τέλος της draw // Με click του ποντικιού γίνεται restart void mousePressed() { // δίνονται ξανά οι αρχικές τιμές σε όλες // της μεταβλητές της μπάλας ballX = width/2; ballY = height/2; speedX = random(3, 5); speedY = random(3, 5); // μηδενίζεται το σκορ score = 0 ; } //τέλος της mousePressed