""" Questa è l'implementazione parziale del gioco dell'impiccato. Per completarla, occorre scrivere il codice di quelle funzioni dove compare il commento TODO. """ from ezgraphics import GraphicsWindow, GraphicsCanvas # numero massimo di errori ammissibili MAX_ERRORS = 5 def display_hangman(canvas: GraphicsCanvas, n, word): """ Visualizza nel `canvas` la figura dell'impiccato. La variabile `n` contiene il numero di errori commessi, che determina quali parti della figura vanno disegnate. In aggiunta, sotto la figura dell'impiccato la funzione deve visualizzare la parola che si sta cercando di individuare, che trovato nel parametro `word`. """ # Si consiglia inizialmente di visualizzare solo la parola che si sta cercando # e il numero di errori commessi, e solo quando tutto funziona dedicarsi alla # figura dell'impiccato. # TODO def hide_word(word, letters): """ Restituisce una nuova stringa ottenuta ricopiando `word` ma in modo tale che le lettere che NON SONO PRESENTI nella lista `letters` siano rimpiazzate con un segno meno. """ # TODO def choose_word(): """ Restituisce una parola casuale. """ # Scegliete semplicemente una parola casuale da una lista fissa di # 5 o 6 parole scelte da voi. # TODO def found_word(word, letters): """ Restuisce True se la stringa `word` è costituita interamente da lettere in `letters`, False altrimenti. """ # TODO def count_errors(word, letters): """ Restituisce il numero di lettere in `letters` che non compaiono in `word`. """ # TODO def display_lost_match(canvas): """ Visualizza un segno per indicare che il gioco è stato perso. """ canvas.setColor("red") canvas.setLineWidth(5) canvas.drawLine(150,20,250,240) canvas.drawLine(250,20,150,240) def display_won_match(canvas): """ Visualizza un segno per indicare che il gioco è stato vinto. """ canvas.setColor("green") canvas.setLineWidth(5) canvas.drawLine(175,175,200,200) canvas.drawLine(200,200,300,100) def main(): win = GraphicsWindow() win.setTitle("Hangman") canvas = win.canvas() # la variabile word contiene la parola da cercare word = choose_word() # la variabile tried_lettes conterrà l'elenco delle lettere provate dal giocatore tried_letters = [] while True: canvas.clear() # determina la parola con le lettere nascoste hidden_word = hide_word(word, tried_letters) # determina il numero di errori commessi num_errors = count_errors(word, tried_letters) display_hangman(canvas, num_errors, hidden_word) # se ho commesso troppi errori o ho trovato la parola, esci dal gioco if num_errors > MAX_ERRORS or found_word(word, tried_letters): break key = win.getKey() # se la lettera non è mai stata provata prima if key not in tried_letters: # aggiungi all'elenco delle lettere provate tried_letters.append(key) if num_errors > MAX_ERRORS: display_lost_match(canvas) else: display_won_match(canvas) win.getKey() if __name__ == "__main__": main()