Πέτρα-Ψαλίδι-Χαρτί με Python και micro:bit [Μέρος 1]

Σε αυτή την άσκηση θα μάθεις βασικές έννοιες προγραμματισμού δημιουργώντας το παιχνίδι «Πέτρα-Ψαλίδι-Χαρτί» με τη γλώσσα προγραμματισμού Python και την πλακέτα micro:bit.

Στόχος της άσκησηςΔημιουργία του παιχνιδιού «Πέτρα-Ψαλίδι-Χαρτί» με Python και micro:bit
Τι θα μάθειςΒασικές έννοιες προγραμματισμού (μεταβλητές, συναρτήσεις, δομή επιλογής if) στη γλώσσα Python
Τι θα χρειαστείςΈναν browser
Διάρκεια άσκησης30 λεπτά

Μπορείς να δεις το τελικό παιχνίδι στο Microsoft Make Code και να κατεβάσεις τον κώδικα του παιχνιδιού από το προσωπικό μου GitHub repository.

Οδηγίες

Πήγαινε στη σελίδα Microsoft Make Code και επίλεξε το micro:bit. Δημιούργησε ένα νέο project, συμπλήρωσε τον τίτλο του project και στην ένδειξη code options επίλεξε ως γλώσσα την Python. Για την υλοποίηση του παιχνιδιού θα χρησιμοποιήσεις το επιταχυνσιόμετρο και την οθόνη του micro:bit.

Δημιουργία on_shake event για την εκτέλεση εντολών όταν κουνάς το micro:bit

Όρισε τη συνάρτηση on_gesture_shake(), η οποία θα περιέχει τον κώδικα όλου του παιχνιδιού και θα εκτελείται όταν κουνάς το micro:bit.

1
2
3
def on_gesture_shake():
    pass
input.on_gesture(Gesture.SHAKE, on_gesture_shake)
Οι συναρτήσεις είναι κομμάτια κώδικα, τα οποία περιγράφουν όλα τα βήματα για την εκτέλεση μίας ενέργειας.

Δημιουργία 2 παικτών και υλοποίηση της τυχαίας επιλογής ενός αντικειμένου

Κάθε παίκτης επιλέγει ένα από τα τρία αντικείμενα (πέτρα, ψαλίδι ή χαρτί). Συνήθως στα προγράμματα όμως αποφεύγουμε τη χρήση λέξεων και στη θέση των λέξεων χρησιμοποιούμε αριθμούς. Έτσι λοιπόν έχουμε για κάθε παίκτη 3 επιλογές τις οποίες θα συμβολίσουμε με τα νούμερα 1, 2 και 3. Η δημιουργία δύο παικτών ισοδυναμεί με τη δημιουργία δύο μεταβλητών. Έτσι ορίζουμε τις μεταβλητές hand1 και hand2 στο εσωτερικό της συνάρτησης. Για την επιλογή τυχαίου αριθμού χρησιμοποιούμε τη συνάρτηση randint(). Αποθηκεύουμε τους 2 τυχαίους αριθμούς στις μεταβλητές hand1 και hand2 αντίστοιχα.

1
2
hand1 = randint(1, 3)
hand2 = randint(1, 3)
Οι μεταβλητές στον προγραμματισμό χρησιμοποιούνται για την αποθήκευση δεδομένων. Τα δεδομένα αυτά μπορεί να είναι νούμερα, γράμματα, λέξεις.
Η συνάρτηση randint() χρησιμοποιείται για την παραγωγή τυχαίων αριθμών. Δέχεται δύο ορίσματα, τα οποία ορίζουν το διάστημα στο οποίο θα βρίσκεται ο αριθμός.

Εμφάνιση στην οθόνη της επιλογής του κάθε παίκτη

Χρησιμοποίησε την εντολή:

1
basic.show_number(hand1)

για να εμφανίσεις την επιλογή του πρώτου παίκτη. Τι παρατηρείς; Στην οθόνη θα εμφανιστεί ένας αριθμός (1, 2 ή 3) και όχι η πραγματική επιλογή του παίκτη. Αυτό συμβαίνει επειδή ο υπολογιστής δεν γνωρίζει την αντιστοίχιση μεταξύ των αριθμών και των συμβόλων που κάναμε.

Θα πρέπει να πούμε στον υπολογιστή ότι ΑΝ ο παίκτης έχει επιλέξει το 1, τότε να εμφανίσει την πέτρα, ΑΝ έχει επιλέξει το 2, τότε να εμφανίσει το χαρτί και ΑΝ έχει επιλέξει το 3, να εμφανίσει το ψαλίδι. Αυτό λοιπόν υλοποιείται με την εντολή IF.

Η εντολή if (δομή επιλογής) δημιουργεί μία διακλάδωση στο πρόγραμμα. Με αυτόν τον τρόπο ο υπολογιστής λαμβάνει μία απόφαση. Η απόφαση βασίζεται σε μία συνθήκη που του έχει δώσει ο χρήστης. Αν η συνθήκη είναι αληθής, εκτελούμε μία ενέργεια.
1
2
3
4
5
6
if hand1 == 1:
    basic.show_icon(IconNames.SMALL_SQUARE)
elif hand1 == 2:
    basic.show_icon(IconNames.SQUARE)
else:
    basic.show_icon(IconNames.SCISSORS)

Γράφουμε ακριβώς το ίδιο κομμάτι κώδικα και για την εμφάνιση της επιλογής του δεύτερου παίκτη.

1
2
3
4
5
6
if hand2 == 1:
    basic.show_icon(IconNames.SMALL_SQUARE)
elif hand2 == 2:
    basic.show_icon(IconNames.SQUARE)
else:
    basic.show_icon(IconNames.SCISSORS)

Εμφάνιση του αριθμού του παίκτη που νίκησε

Θέλουμε να εμφανίσουμε τον αριθμό 1 αν νίκησε ο παίκτης 1, τον αριθμό 2 αν νίκησε ο παίκτης 2 και 0 αν δεν νίκησε κάποιος παίκτης (ισοπαλία). Για την υλοποίηση της επιλογής του νικητή χρησιμοποιούμε πολλαπλές εντολές if, οι οποίες δημιουργούν μία εμφωλευμένη δομή επιλογής.

Σε ένα πρόγραμμα μπορεί να έχουμε πολλαπλές διακλαδώσεις. Οι διακλαδώσεις αυτές μπορούν να δημιουργήσουν μία εμφωλευμένη δομή επιλογής. Σε αυτή την περίπτωση, μία εντολή if εκτελείται όταν ισχύει (ή όταν δεν ισχύει) η συνθήκη μίας άλλης εντολής if.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
if hand1 == 1: # Rock
    if hand2 == 1: # Rock
        basic.show_number(0)
    elif hand2 == 2: # Paper
        basic.show_number(2)
    else: # Scissors
        basic.show_number(1)
elif hand1 == 2: # Paper
    if hand2 == 1: # Rock
        basic.show_number(1)
    elif hand2 == 2: # Paper
        basic.show_number(0)
    else: # Scissors
        basic.show_number(2)
else: # Scissors
    if hand2 == 1: # Rock
        basic.show_number(2)
    elif hand2 == 2: # Paper
        basic.show_number(1)
    else: # Scissors
        basic.show_number(0)

Βελτίωση του παιχνιδιού

Η εναλλαγή των εικόνων των δύο παικτών είναι αρκετά γρήγορη. Χρησιμοποιούμε την εντολή pause(500) για τη στιγμιαία παύση του παιχνιδιού για 0.5 δευτερόλεπτα (ώστε να μπορούμε να διακρίνουμε καθαρά την εικόνα που προβλήθηκε) και την εντολή clear_screen() για την εκκαθάριση της οθόνης πριν της εμφάνιση της νέας εικόνας.

Το τελικό παιχνίδι

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def on_gesture_shake():
    hand1 = randint(1, 3)
    hand2 = randint(1, 3)
    if hand1 == 1: # Rock
        basic.show_icon(IconNames.SMALL_SQUARE)
    elif hand1 == 2: # Paper
        basic.show_icon(IconNames.SQUARE)
    else: # Scissors
        basic.show_icon(IconNames.SCISSORS)
    basic.pause(500)
    basic.clear_screen()
    basic.pause(500)
    if hand2 == 1: # Rock
        basic.show_icon(IconNames.SMALL_SQUARE)
    elif hand2 == 2: # Paper
        basic.show_icon(IconNames.SQUARE)
    else: # Scissors
        basic.show_icon(IconNames.SCISSORS)
    basic.pause(500)
    basic.clear_screen()
    basic.pause(500)
    if hand1 == 1: # Rock
        if hand2 == 1: # Rock
            basic.show_number(0)
        elif hand2 == 2: # Paper
            basic.show_number(2)
        else: # Scissors
            basic.show_number(1)
    elif hand1 == 2: # Paper
        if hand2 == 1: # Rock
            basic.show_number(1)
        elif hand2 == 2: # Paper
            basic.show_number(0)
        else: # Scissors
            basic.show_number(2)
    else: # Scissors
        if hand2 == 1: # Rock
            basic.show_number(2)
        elif hand2 == 2: # Paper
            basic.show_number(1)
        else: # Scissors
            basic.show_number(0)
input.on_gesture(Gesture.SHAKE, on_gesture_shake)

Συγχαρητήρια! Δημιούργησες το πρώτο σου παιχνίδι με Python και micro:bit. Επίλεξε το κουμπί share για να δείξεις το παιχνίδι που μόλις υλοποίησες στους φίλους σου.

Επόμενα βήματα

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

You May Also Like