# Εισάγουμε τις βιβλιοθήκες (modules ονομάζονται συνήθως στην python) # os (για operating system) και random (για τυχαιότητα) import os, random penalty = 0 # Αρχική ποινή του παίκτη used=[] # Ποια γράμματα έχει χρησιμοποιήσει ο παίκτης μέχρι στιγμής. filename="words.txt" # Σε ποιο αρχείο είναι αποθηκευμένες οι λέξεις που χρησιμοποιούμε. # Στην παρακάτω μεταβλητή έχουμε αποθηκεύσει σε μια λίστα από strings τα οριζόντια κομμάτια # της κρεμάλας μαζί με τον κρεμασμένο. # Θα ζωγραφίζουμε κάποια κομμάτια από αυτό το σχήμα, ανάλογα με το ποια είναι η ποινή του παίκτη. # # Παρατηρείστε το διπλό backslash (\) στο τέλος κάποιων γραμμών. Επειδή το backslash παίζει κάποιο # ειδικό ρόλο στα strings (σκεφτείτε π.χ. πώς προσδιορίζουμε το χαρακτήρα newline με \n) ο μόνος # τρόπος για να προσδιορίσουμε το backslash ως ένα χαρακτήρα το string μας είναι να το γράψουμε διπλό. # Έτσι αν τυπώσετε ένα string με διπλό backslash θα εμφανιστεί μόνο ένα. Αν π.χ. δώσετε print("abcd\\") # θα τυπωθεί abc\ parts = [ '-----|', '| o', '| i', '| / \\', '| |', '| / \\', '| d b' ] # Τα επίπεδα κάτω από το οριζόντιο ξύλο της κρεμάλας, που πάντα το τυπώνουμε, είναι 6. # Γι' αυτό και το maxpenalty παρακάτω βγαίνει 5. Όταν η ποινή γίνει 6 ο παίκτης έχει χάσει. maxpenalty = len(parts)-2 # Μέγιστη επιτρεπτή ποινή. Με ένα πόντο παραπάνω χάνει το παιχνίδι. Όσα είναι τα # στοιχεία της λίστας parts μείον 1. # Εδώ διαβάζουμε όλες τις λέξεις από το αρχείο μας, στη λίστα WL. Αμέσως καθαρίζουμε όλα τα strings από λευκούς # χαρακτήρες με τη μέθοδο .strip() και τα μετατρέπουμε όλα σε μικρά γράμματα με τη μέθοδο .lower() f = open(filename, "r") WL = [s.strip().lower() for s in f.readlines()] f.close() # Επιλέγουμε ένα τυχαίο στοιχείο της WL με τη συνάρτηση random.choice(). Αυτή θα είναι η λέξη μας. theword = random.choice(WL) # Στη μεταβλητή show κρατάμε τη λέξη με τη μορφή που τη δείχνουμε στον παίκτη. Αρχικά θα είναι όλο παύλες, όσες # και το μήκος της λέξης theword. show = len(theword)*"-" # Αυτή είναι η βασική ανακύκλωση του προγράμματος που τρέχει συνεχώς έως ότου διακοπεί με break (όταν ο παίκτης # χάσει ή όταν κερδίσει). while True: os.system('clear') # Καλούμε την εντολή του λειτουργικού συστήματος 'clear' η οποία καθαρίζει το terminal. # Το ποια είναι αυτή η εντολή εξαρτάται από το σε ποιο λειτουργικό σύστημα δουλεύουμε. # Στο linux η εντολή clear καθαρίζει το τερματικό οπότε καλούμε αυτήν. Στα Windows (όταν # το πρόγραμμά μας τρέχει στη γραμμή εντολών των Windows η αντίστοιχη εντολή είναι μάλλον η 'cls') print("**************************************************************") print() # Τυπώνει μια κενή γραμμή. Για αισθητικούς λόγους. print(parts[0]) # Τυπώνει το πρώτο string της λίστας parts (οριζόντιο ξύλο της κρεμάλας). Τυπώνεται πάντα. for i in range(penalty): # Τυπώνουμε τόσα μετέπειτα στάδια της κρεμάλας όσοι και βαθμοί ποινής print(parts[i+1]) for i in range(penalty+1, len(parts)): # Από τα υπόλοιπα στάδιο της κρεμάλας τυπώνουμε μόνο τον πρώτο print(parts[i][0]) # χαρακτήρα (κατακόρυφο ξύλο) if penalty > maxpenalty: # Ελέγχουμε αν η ποινή έχει ξεπεράσει την επιτρεπτή. Αν ναι ο παίκτης έχασε. print() print("Έχασες. Η λέξη ήταν {} και έφτασες μέχρι την {}".format(theword, show)) break # τελειώνει το while άρα και το πρόγραμμα # Μετά την κρεμάλα δείχνουμε στο χρήστη πληροφορίες για το παιχνίδι. print() print("Η λέξη είναι: {}".format(show)) # Δείχνουμε την (ημι-)κρυμμένη λέξη print() print("Έχεις χρησιμοποιήσει τα γράμματα: {}".format(used)) # Δείχνουμε επίσης το ποια γράμματα έχει χρησιμοποιήσει ήδη print() print("Η ποινή σου είναι {}. Μέγιστη ποινή είναι {}".format(penalty, maxpenalty)) # Δείχνουμε την ποινή του παίκτη. print() print() c = input("--> Δώσε το επόμενο γράμμα (και πάτα enter): ") c = c.lower() # Διαβάζουμε ένα string από τον παίκτη και το κάνουμε σε μικρά γράμματα if len(c)>1: # Αν έδωσε πάνω από 1 γράμμα ξαναπάμε στην αρχή print() input("--> Δώσε μόνο ένα γράμμα. Πάτα enter.") continue if c in used: # Αν έδωσε ήδη χρησιμοποιημένο γράμμα ξαναπάμε στην αρχή print() input("--> Το έχεις ήδη χρησιμοποιήσει. Πάτα enter.") continue else: used.append(c) # Αν νέο γράμμα το προσθέτουμε στη λίστα used. # Αν το γράμμα δεν είναι στη λέξη τότε αυξάνουμε την ποινή κατά 1 if c not in theword: penalty += 1 # Εδώ φτιάχνουμε τη νέα μορφή της λέξης show s="" for i in range(len(theword)): if c==theword[i]: # Αν το γράμμα που έδωσε είναι στη θέση αυτή τότε βάζουμε αυτό στη show s += c else: # αλλιώς αφήνουμε στη show ό,τι είχε εκεί. s += show[i] show=s # Αν η λέξη show έχει γίνει ίδια με την theword τότε ο παίκτης κέρδισε. if show == theword: print() print("Η λέξη ήταν [{}].".format(theword)) print("Κέρδισες.") break