Ενότητα 8 - Τμήμα 5 - Διαστημόπλοιο

Ιστότοπος: ΕΛ/ΛΑΚ Moodle
Μάθημα: Εργαστήριο Python
Βιβλίο: Ενότητα 8 - Τμήμα 5 - Διαστημόπλοιο
Εκτυπώθηκε από: Guest user
Ημερομηνία: Δευτέρα, 29 Απριλίου 2024, 10:16 AM

Περιγραφή

Μετά την ολοκλήρωση αυτής της ενότητας οι φοιτητές θα μπορούν να:

  • εντοπίζουν διάφορες κλάσεις μέσα σε ένα παιχνίδι με κώδικα Python
  • περιγράφουν τα μέρη της κλάσης και τη χρησιμότητά τους
  • εντοπίζουν τα αντικείμενα μιας κλάσης
  • αναγνωρίζουν τα χαρακτηριστικά και τις τιμές των αντικειμένων μια κλάσης
  • τροποποιούν τον κώδικα του παιχνιδιού για να το καταστήσουν πιο εύκολο ή πιο δύσκολο

8.5.1 - Έχω ένα διαστημόπλοιο, πάμε μια βόλτα;

Τον περισσότερο καιρό δημιουργούσαμε αντικείμενα χρησιμοποιώντας την εντολή σχεδίασης draw της pygame αλλά τώρα θα χρησιμοποιήσουμε γραφικά στοιχεία (sprites)

Ένα από τα γραφικά στοιχεία που θα χρησιμοποιήσουμε είναι ένα διαστημόπλοιοspaceship
Τα γραφικά στοιχεία είναι συνήθως αρχεία τύπου png ή gif. Για να τα χρησιμοποιήσουμε πρέπει να είναι στον ίδιο φάκελο με το πρόγραμμα μας.

Κάντε δεξί κλικ πάνω στο διαστημόπλοιο και αποθηκεύστε το, ή πατήστε εδώ.

Επίσης κατεβάστε και ανοίξτε αυτό το αρχείο (avoid_v0.1) με το Thonny. Εκτελέστε το πρόγραμμα.

Τι συμβαίνει;

Αυτό είναι ένα ακόμα γραφικό στοιχείο, ένας μετεωρίτης meteor
Κάντε δεξί κλικ στον μετεωρίτη και αποθηκεύστε τον, ή πατήστε εδώ.

Κοιτάξτε τις γραμμές 19 και 50 προσπαθήστε να εμφανίσετε (με την εντολή blit) τον μετεωρίτη στην οθόνη.
Μπορείτε να εμφανίσετε πολλούς μετεωρίτες;

Μπορείτε να κάνετε λήψη του κώδικα που εμφανίζει το διαστημόπλοιο από εδώ.

8.5.2 - Κίνηση με τα πλήκτρα του πληκτρολογίου

Κατεβάστε τον κώδικα από εδώ και ανοίξτε τον με το Thonny.

Μελετήστε τις γραμμές 41 μέχρι 59

if event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT or event.key == pygame.K_d: ship_x_speed = 5 if event.key == pygame.K_LEFT or event.key == pygame.K_a: ship_x_speed = -5 if event.key == pygame.K_DOWN or event.key == pygame.K_s: ship_y_speed = 5 if event.key == pygame.K_UP or event.key == pygame.K_w: ship_y_speed = -5 if event.type == pygame.KEYUP: if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT: ship_x_speed = 0 if event.key == pygame.K_d or event.key == pygame.K_a: ship_x_speed = 0 if event.key == pygame.K_UP or event.key == pygame.K_DOWN: ship_y_speed = 0 if event.key == pygame.K_w or event.key == pygame.K_s: ship_y_speed = 0


Σε αυτές τις γραμμές η pygame ελέγχει αν κάποιο από τα πλήτρα με τα βελάκια ΑΡΙΣΤΕΡΑ, ΔΕΞΙΑ, ΠΑΝΩ, ΚΑΤΩ ή τα πλήκτρα d, a , s, w έχουν πατηθεί (KEYDOWN) ή δεν είναι πλέον πατημένα (KEYUP) και μετακινεί το διαστημόπλοιο ανάλογα.

Στις γραμμές 30 με 33 που είναι εκτός της κύριας επανάληψης ορίζουμε την αριχκή θέση του διαστημοπλοίου και κάνουμε 0 την αρχική του ταχύτητα σε κάθε άξονα.

ship_x = 500 ship_y = 380 ship_x_speed = 0 ship_y_speed = 0


τέλος στις γραμμές 74 μέχρι 87 που εμφανίζουμε το διαστημόπλοιο το κινούμε και σιγουρεύουμε το ότι θα παραμείνει μέσα στην οθόνη

screen.blit(spaceshipImg, (ship_x, ship_y)) if ship_x >= 0 and ship_x <= 984: ship_x += ship_x_speed elif ship_x < 0: ship_x = 1 elif ship_x > 984: ship_x = 983 if ship_y >= 0 and ship_y <= 728: ship_y += ship_y_speed elif ship_y < 0: ship_y = 1 elif ship_y > 728: ship_y = 727 print(ship_x, ship_y)


Η τελική έκδοση, έτοιμη  για παιχνίδι βρίσκεται εδώ.


8.5.3 - Αρχικοποίηση θέσης

Στις γραμμές 32 έως 35 βρίσκονται οι εντολές αρχικοποίησης του διαστημοπλοίου  (αρχική θέση και ταχύτητα)

Στις γραμμές 77 έως 92 βρίσκοντια οι εντολές που διατηρούν το διαστημόπλοιο εντός της οθόνης.

Κάντε λήψη του προγράμματος από εδώ (avoid_v0.6.0.py)

8.5.4 - Παράμετροι αντί για σταθερές

Στην έκδοση v0.6.0 του παιχνιδιού τι πρέπει να κάνουμε για να αλλάξουμε την ανάλυση της οθόνης του παιχνιδιού; Πόσες αλλαγές απαιτούνται;
Αντί να κάνουμε κάθε φορά όλες αυτές τις αλλαγές, μπορούμε να χρησιμοποιήσουμε μεταβλητές για το μέγεθος της οθόνης, το μέγεθος του διαστημοπλοίου και τα όρια της οθόνης.
Ο ενημερωμένος κώδικας ακολουθεί και μπορείτε να τον λάβετε από εδώ (avoid_v0.7.0.py)

 

8.5.7 - Κλάση για μετεωρίτες

8.5.8 - Τελική έκδοση παιχνιδιού

Μπορείτε να κάνετε λήψη της τελικής έκδοσης του παιχνιδι από εδώ (avoid_v1.0.2.py)