예제 #1
0
	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)
예제 #2
0
    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')
예제 #3
0
    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')
예제 #4
0
    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)
예제 #5
0
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()}')
예제 #8
0
    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')
예제 #9
0
	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)
예제 #10
0
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()}')
예제 #11
0
	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)
예제 #12
0
	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')
예제 #13
0
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')