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

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

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

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

Οδηγίες

Πήγαινε στη σελίδα Microsoft Make Code, επίλεξε το micro:bit και στη συνέχεια το project που είχες δημιουργήσει στο πρώτο μέρος της άσκησης.

Μέχρι αυτό το σημείο έχεις δημιουργήσει τη συνάρτηση on_gesture_shake, η οποία εκτελείται όταν κουνάς το micro:bit και περιέχει τον κώδικα για την υλοποίηση του παιχνιδιού. Έχεις ακόμα ορίσει τις μεταβλητές hand1 και hand2 για τους δύο παίκτες και χρησιμοποίησες τη συνάρτηση randint() για την προσομοίωση της τυχαίας επιλογής ενός εκ των τριών αντικειμένων. Χρησιμοποιώντας εντολές if επέλεξες το σύμβολο που πρέπει να εμφανιστεί στο micro:bit ανάλογα με την επιλογή του κάθε παίκτη και ανέδειξες τον νικητή του παιχνιδιού.

Δημιουργία της μεταβλητής rounds για την αποθήκευση του αριθμού του τρέχοντος γύρου

Όρισε τη μεταβλητή rounds έξω από τη συνάρτηση και αποθήκευσε σε αυτή την τιμή 0 (πριν αρχίσει το παιχνίδι ο γύρος είναι 0). Η μεταβλητή rounds είναι μία global μεταβλητή.

Global ονομάζονται οι μεταβλητές που ορίζονται έξω από τις συναρτήσεις. Για να χρησιμοποιήσουμε μία global μεταβλητή στο εσωτερικό μιας συνάρτησης πρέπει να γράψουμε τη λέξη global πριν το όνομα της μεταβλητής.

Σε κάθε γύρου του παιχνιδιού αύξησε την τιμή της μεταβλητής rounds κατά 1.

1
2
3
4
5
6
rounds = 0
def on_gesture_shake():
    global rounds
    rounds += 1
    
input.on_gesture(Gesture.SHAKE, on_gesture_shake)

Η έκφραση rounds += 1 ισοδυναμεί με την έκφραση rounds = rounds + 1. Δηλαδή προσθέτουμε στην τρέχουσα τιμή της μεταβλητής rounds τον αριθμό 1 και στη συνέχεια αποθηκεύουμε τη νέα τιμή στη μεταβλητή rounds.

Τροποποίηση του κώδικα για την επιλογή του νικητή

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

Για παράδειγμα, αν νίκησε ο πρώτος παίκτης, τότε στη δομή επιλογής σου έχεις την εντολή basic.show_number(1). Αντικατέστησε αυτή την εντολή με την εντολή winner = 1. Αντίστοιχα, για τον δεύτερο παίκτη χρησιμοποίησε την εντολή winner = 2, ενώ για ισοπαλία την εντολή winner = 0.

Μετά τη δομή επιλογής, χρησιμοποίησε την εντολή basic.show_number(winner), για την εμφάνιση του αριθμού του νικητή.

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

Δημιουργία μεταβλητής για την αποθήκευση του score

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

Η λίστα είναι μία δομή δεδομένων που χρησιμοποιείται για την αποθήκευση μίας συλλογής από δεδομένα. Δηλαδή, σε μία λίστα αποθηκεύουμε πολλές τιμές. Οι τιμές που θα αποθηκευτούν στη λίστα τοποθετούνται μέσα σε αγκύλες ([ ]) και χωρίζονται με κόμμα (,). Για παράδειγμα, η παρακάτω εντολή δημιουργεί τη λίστα numbers στην οποία αποθηκεύονται οι αριθμοί από 1 έως 5:

1
numbers = [1, 2, 3, 4, 5]

Όρισε τη λίστα score έξω από τη συνάρτηση και αποθήκευσε σε αυτή δύο φορές την τιμή 0 (πριν αρχίσει το παιχνίδι οι πόντοι και των δύο παικτών είναι 0). Η πρώτη τιμή της λίστας αντιστοιχεί στους πόντους του πρώτου παίκτη και η δεύτερη τιμή στους πόντους του δεύτερου παίκτη.

1
score = [0, 0]

Ενημέρωση του score σε κάθε γύρο του παιχνιδιού

Χρησιμοποίησε τη δομή επιλογής if και τη μεταβλητή winner (στην οποία αποθήκευσες τον αριθμό του παίκτη που νίκησε) για να αυξήσεις κατά 1 το σκορ του πρώτου ή του δεύτερου παίκτη, στο τέλος κάθε γύρου.

Σε κάθε αντικείμενο μίας λίστας ανατίθεται ένας αριθμός στο εύρος από 0 έως n – 1, όπου n είναι ο αριθμός των στοιχείων που περιέχει η λίστα. Έχεις πρόσβαση σε ένα στοιχείο μίας λίστας χρησιμοποιώντας τον αριθμό που αντιστοιχεί σε αυτό. Για παράδειγμα, σε μία λίστα που ονομάζεται list1, για να χρησιμοποιήσεις το πρώτο στοιχείο της γράφεις list1[0], ενώ για το τρίτο στοιχείο της list1[2].

1
2
3
4
if winner == 1:
    score[0] += 1
elif winner == 2:
    score[1] += 1

Θα εμφανίσεις το σκορ του παιχνιδιού στη μορφή «1-3». Η πρώτη τιμή αντιστοιχεί στους πόντους του πρώτου παίκτη και η δεύτερη στους πόντους του δεύτερου παίκτη. Για να εκτυπώσεις το αποτέλεσμα με αυτή την μορφή χρησιμοποίησε την εντολή:

1
basic.show_string(str(score[0]) + "-" + str(score[1]))

Η συνάρτηση basic.show_string() χρησιμοποιείται για την εκτύπωση χαρακτήρων. Για αυτό τον λόγο, οι τιμές score[0] και score[1], που είναι αριθμοί, πρέπει πρώτα να μετατραπούν σε χαρακτήρες με τη συνάρτηση str(). Το σύμβολο + χρησιμοποιείται για τη συνένωση δύο μεταβλητών τύπου string. Για παράδειγμα, το τμήμα κώδικα:

1
2
3
4
a = "Hello, "
b = "John!"
result = a + b
print(result)

θα εμφανίσει: “Hello, John!”.

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

Αντίστοιχα με το πρώτο μέρος της άσκησης, χρησιμοποίησε τις εντολές pause() και clear_screen() μεταξύ των διάφορων εναλλαγών εικόνας στην οθόνη του micro:bit.

Συγχαρητήρια! Δημιούργησες ένα ολοκληρωμένο παιχνίδι Πέτρα-Ψαλίδι-Χαρτί με Python και micro:bit. Μπορείς να κατεβάσεις τον κώδικα του παιχνιδιού από το προσωπικό μου GitHub repository.

You May Also Like