def test_game_lost(self) -> None: """Game is stopped when the user is out of lives""" game = Hangman(lives=1, wordlist=['abc']).start() self.assertEqual(game.guess_letter('A'), 1) self.assertEqual(game.lives, 1) self.assertEqual(game.guess_letter('z'), 0) self.assertTrue(game.lost)
def test_game_is_NOT_lost_when_guessed_incorrectly_for_10_times(self): game = Hangman('a') for _ in range(10): game.guess_letter('b') self.assertEqual(game.get_status(), 'Running')
def test_return_a_if_a_is_correctly_guessed(self): game = Hangman('a') game.guess_letter('a') hint = game.render_hint() self.assertEqual(hint, 'a')
def test_does_not_count_failures_when_letter_is_correctly_guessed(self): game = Hangman('a') last_incorrect_guesses = game.get_guesses() game.guess_letter('a') self.assertEqual(game.get_guesses(), last_incorrect_guesses)
class HangmanGame: def __init__(self): self.hangman = Hangman() def play(self): while True: print(f'Chances left: {self.hangman.get_chances()}') print(self.hangman.get_word_to_guess()) letter = input('Give a letter or word: ') if self.hangman.is_it_word_to_find(letter): self.win() break try: self.hangman.guess_letter(letter) except ChancesError: self.lose() break if self.hangman.are_all_letters_found(): self.win() break def lose(self): print('\nLoser!!!!') self.print_word_to_find() def win(self): print('\nCongrats!!!') self.print_word_to_find() def print_word_to_find(self): print(f'A word to find: {self.hangman.get_word_to_find()}')
class HangmanGame: def __init__(self): self.hangman = Hangman() print(self.hangman.get_title()) def play(self): while True: print(f'You have: {self.hangman.get_chances()} chances') print(self.hangman.get_word_for_search()) letter = input('Give me some letter: ') if self.hangman.is_it_word_to_find(letter): self.win() break try: self.hangman.guess_letter(letter) except ChancesError: self.loose() break if self.hangman.are_all_letters_found(): self.win() break def loose(self): print('\nLoooser!!!!!') self.print_word_to_find() def win(self): print('\nCongratulations!!!') self.print_word_to_find() def print_word_to_find(self): print(f'Search word is: {self.hangman.get_word_to_find()}')
class HangmanGame: def __init__(self): self.hangman = Hangman() def play(self): while True: print(f'Pozostała liczba szans: {self.hangman.get_chances()}') print(self.hangman.get_word_to_guess()) letter = input('Podaj literę lub słowo: ') if self.hangman.is_it_word_to_find(letter): self.win() break try: self.hangman.guess_letter(letter) except ChancesError: self.lose() break if self.hangman.are_all_letters_found(): self.win() break def lose(self): print('\nSłabiaku!!!!!') self.print_word_to_find() def win(self): print('\nGratulacje!!!') self.print_word_to_find() def print_word_to_find(self): print(f'Szukane słowo to: {self.hangman.get_word_to_find()}')
def test_game_is_won_when_all_guessed_correctly(self): game = Hangman('abbc') game.guess_letter('a') game.guess_letter('b') game.guess_letter('c') self.assertEqual(game.get_status(), 'Won')
def test_guesses(self) -> None: """Guessing returns correct counts and history matches""" game = Hangman(wordlist=['KITTY CAT']).start() self.assertEqual(game.guess_letter('M'), 0) self.assertEqual(game.guess_letter('I'), 1) self.assertEqual(game.guess_letter('T'), 3) self.assertEqual(game.guess_word('KITTY CAT'), 4) self.assertEqual( [tuple(guess[1:]) for guess in game.guesses], [('M', 0), ('I', 1), ('T', 3), ('KITTY CAT', 4)] ) self.assertEqual(game.guess_count, 4) self.assertTrue(game.won)
class HangmanGame: __messagess = { 'pl': { 'chances_left': 'Pozostało szans', 'give_a_letter': 'Podaj literę lub słowo', 'lose': 'Słabiaku!!!!!', 'win': 'Gratulacje!!!', 'word_info': 'Szukane słowo to' } } def __init__(self, language='pl'): self.hangman = Hangman() self.language = language def translate(self, key): return self.__messagess[self.language][key] def play(self): while True: print( f"{self.translate('chances_left')}: {self.hangman.get_chances()}" ) print(self.hangman.get_word_to_guess()) letter = input('Podaj literę lub słowo: ') if self.hangman.is_it_word_to_find(letter): self.win() break try: self.hangman.guess_letter(letter) except ChancesError: self.lose() break if self.hangman.are_all_letters_found(): self.win() break def lose(self): print('\nSłabiaku!!!!!') self.print_word_to_find() def win(self): print('\nGratulacje!!!') self.print_word_to_find() def print_word_to_find(self): print(f'Szukane słowo to: {self.hangman.get_word_to_find()}')
def test_visible_word(self) -> None: """Visible word contains guessed letters""" game = Hangman(wordlist=['ECHO LOCATION']).start() self.assertEqual(game.guess_letter('O'), 3) self.assertEqual(game.visible_word, '___O _O____O_') self.assertEqual(game.guess_word('ECHO LOCATION'), 9) self.assertEqual(game.guess_count, 2) self.assertTrue(game.won)
def test_gameover_protection(self) -> None: """Actions are prevented when game is over""" game = Hangman(wordlist=['GAME OVER']).start() self.assertEqual(game.guess_word('GAME OVER'), 8) with self.assertRaises(HangmanOver): game.guess_letter('A')
class HangmanGUI(Tk): def __init__(self, parent): Tk.__init__(self, parent) self.parent = parent self.initialise() self.prep_buttons() def prep_buttons(self): new_game = Button(self, command=self.hangman.begin_new_game, text='Restart') new_game.grid(column=2, row=5, sticky=W) guess_letter = Button(self, command=lambda: self.guess(True), text='Guess letter') guess_letter.grid(column=3, row=5, sticky=W) guess_button = Button(self, command=lambda: self.guess(False), text='Guess word') guess_button.grid(column=4, row=5, sticky=W) def initialise(self): self.hangman = Hangman(self) self.my_word = StringVar() self.my_word.set( "Word: " + self.hangman.word_of_underlines(len(self.hangman.word_to_guess))) self.tried_so_far = StringVar() self.tried_so_far.set('Letters tried so far: ') self.guesses_left = StringVar() self.update_no_of_guesses() self.geometry('{}x{}'.format(545, 400)) self.grid() word = Label(self, textvariable=self.my_word) word.grid(column=1, row=7, sticky=W) tried = Label(self, textvariable=self.tried_so_far) tried.grid(column=1, row=8, sticky=W) no_guesses = Label(self, textvariable=self.guesses_left) no_guesses.grid(column=1, row=9, sticky=W) turtle_canvas = Canvas(self, width=300, height=450) self.th = TurtleHangman(turtle_canvas) turtle_canvas.grid(column=1, row=10, rowspan=8, columnspan=3) infotext = 'Hangman v1.0 by AML' info = Label(self, text=infotext) info.grid(column=4, row=12, columnspan=2) def update_my_word(self): self.my_word.set('Word: ' + self.hangman.my_word) def update_tried_so_far(self): self.tried_so_far.set('Letters tried so far: ' + self.hangman.l_tried()) def update_no_of_guesses(self): self.guesses_left.set('Guesses left: ' + str(Hangman.max_number_of_guesses - self.hangman.number_of_guesses)) def guess(self, guessing_letter): title = 'Guess a ' if guessing_letter: title += 'letter' else: title += 'word' g_window = Tk() g_window.title(title) g_window.grid() entry = Entry(g_window) entry.grid(column=1, row=1) confirm = Button(g_window, command=lambda: self.send_input( guessing_letter, entry.get(), g_window), text='Confirm') confirm.grid(column=1, row=3) def send_input(self, guessing_letter, user_guess, g_window): if user_guess.isalpha(): if (guessing_letter and len(user_guess) > 1): tkMessageBox.showerror('Error', 'Please only guess a letter') else: if guessing_letter: self.hangman.guess_letter(user_guess) else: self.hangman.guess_word(user_guess) g_window.destroy() else: tkMessageBox.showerror('Error', 'Please make a valid guess') def award_win(self): tkMessageBox.showinfo('Winner!', 'You won. Click on Restart to play again') def notify_loser(self): tkMessageBox.showinfo( 'Loser!', 'You lost. Word was *' + self.hangman.word_to_guess + '*. Click on Restart to play again')