Пример #1
0
    def __init__(self, window):
        self.hangman = Hangman()
        self.window = window

        # create a new pen to write the dashes
        self.pen = Frog(self.window)
        self.pen.visible = False
        self.pen.write(' '.join('_' for char in self.hangman.word))

        if SHOW_SOLUTION:
            # show the solution
            solution = Frog(self.window)
            solution.visible = False
            solution.jumpto(0, 50)
            solution.write(' '.join(char for char in self.hangman.word))

        # prepare a pen for writing the gallow
        self.gallow_writer = Frog(self.window)
        self.gallow_writer.visible = False
        self.gallow_writer.jump(-150)
Пример #2
0
    def __init__(self, window):
        self.hangman = Hangman()
        self.window = window

        # create a new pen to write the dashes
        self.pen = Frog(self.window)
        self.pen.visible = False
        self.pen.write(' '.join('_' for char in self.hangman.word))

        if SHOW_SOLUTION:
            # show the solution
            solution = Frog(self.window)
            solution.visible = False
            solution.jumpto(0, 50)
            solution.write(' '.join(char for char in self.hangman.word))

        # prepare a pen for writing the gallow
        self.gallow_writer = Frog(self.window)
        self.gallow_writer.visible = False
        self.gallow_writer.jump(-150)
Пример #3
0
class HangmanWidget(object):
    """ The GUI stuff """
    def __init__(self, window):
        self.hangman = Hangman()
        self.window = window

        # create a new pen to write the dashes
        self.pen = Frog(self.window)
        self.pen.visible = False
        self.pen.write(' '.join('_' for char in self.hangman.word))

        if SHOW_SOLUTION:
            # show the solution
            solution = Frog(self.window)
            solution.visible = False
            solution.jumpto(0, 50)
            solution.write(' '.join(char for char in self.hangman.word))

        # prepare a pen for writing the gallow
        self.gallow_writer = Frog(self.window)
        self.gallow_writer.visible = False
        self.gallow_writer.jump(-150)

    def reset(self):
        """ clear the whole window and restart the game """
        # delete the 'frogs'
        self.pen.exit()
        self.gallow_writer.exit()
        self.__init__(self.window)

    def attempt(self, event):
        guessed_char = event['name']

        # lock the pen if it is just writing
        if self.gallow_writer.active:
            return

        self.gallow_writer.speed = 'max'

        # TODO: write a list of all guessed letters

        # right attempt
        if guessed_char.lower() in self.hangman.word:
            self.pen.write(self.hangman.guess(guessed_char))
            if len(self.hangman.right_attempts) == len(set(self.hangman.word)):
                self.gallow_writer.message(
                    'info',
                    'Congratulation! You guessed the word correctly!'
                )
                # start a new game
                self.reset()

        # wrong attempt
        else:
            # the number of mistakes
            num_mistakes = len(self.hangman.wrong_attempts)

            figures = [
                self.hill,
                self.first_beam,
                self.second_beam,
                self.bracket,
                self.rope,
                self.head,
                self.body,
                self.first_leg,
                self.second_leg,
                self.first_arm,
                self.second_arm,
            ]

            # only draw a figure if the guessed
            # letter was not already guessed earlier
            if guessed_char not in self.hangman.attempts:
                figures[num_mistakes]()

            self.hangman.guess(guessed_char)

    def hill(self):
        self.gallow_writer.turnto(90)
        self.gallow_writer.circle(50, 180)

    def first_beam(self):
        self.gallow_writer.circle(50, -90, draw = False)
        self.gallow_writer.turnto(90)
        self.gallow_writer.move(100)

    def second_beam(self):
        self.gallow_writer.turnto(0)
        self.gallow_writer.move(100)

    def bracket(self):
        # move back and build the supporting beam (and yes, the strange
        # number 36 is necessary because the gallow must be hit exactly
        # on the right place)
        self.gallow_writer.jump(-75)
        self.gallow_writer.turnto(225)
        self.gallow_writer.move(36)

        # don't forget to to move to the place where the man will be hung
        self.gallow_writer.jump(-36)
        self.gallow_writer.turnto(0)
        self.gallow_writer.jump(75)

    def rope(self):
        self.gallow_writer.turnto(270)
        self.gallow_writer.move(25)

    def head(self):
        self.gallow_writer.turnto(0)
        self.gallow_writer.circle(-15)

    def body(self):
        self.gallow_writer.turnto(270)
        self.gallow_writer.jump(30)
        self.gallow_writer.move(50)

    def first_leg(self):
        self.gallow_writer.turnto(225)
        self.gallow_writer.move(25)

    def second_leg(self):
        self.gallow_writer.jump(-25)
        self.gallow_writer.turnto(315)
        self.gallow_writer.move(25)

    def first_arm(self):
        self.gallow_writer.jump(-25)
        self.gallow_writer.turnto(90)
        self.gallow_writer.jump(25)
        self.gallow_writer.turnto(135)
        self.gallow_writer.move(25)

    def second_arm(self):
        """ last figure -> user lost! """
        self.gallow_writer.jump(-25)
        self.gallow_writer.turnto(45)
        self.gallow_writer.move(25)
        self.gallow_writer.message(
            'Info',
            'You lost! Shame on you! The word was: ' + self.hangman.word
        )
        # start a new game
        self.reset()
Пример #4
0
class HangmanWidget(object):
    """ The GUI stuff """
    def __init__(self, window):
        self.hangman = Hangman()
        self.window = window

        # create a new pen to write the dashes
        self.pen = Frog(self.window)
        self.pen.visible = False
        self.pen.write(' '.join('_' for char in self.hangman.word))

        if SHOW_SOLUTION:
            # show the solution
            solution = Frog(self.window)
            solution.visible = False
            solution.jumpto(0, 50)
            solution.write(' '.join(char for char in self.hangman.word))

        # prepare a pen for writing the gallow
        self.gallow_writer = Frog(self.window)
        self.gallow_writer.visible = False
        self.gallow_writer.jump(-150)

    def reset(self):
        """ clear the whole window and restart the game """
        # delete the 'frogs'
        self.pen.exit()
        self.gallow_writer.exit()
        self.__init__(self.window)

    def attempt(self, event):
        guessed_char = event['name']

        # lock the pen if it is just writing
        if self.gallow_writer.active:
            return

        self.gallow_writer.speed = 'max'

        # TODO: write a list of all guessed letters

        # right attempt
        if guessed_char.lower() in self.hangman.word:
            self.pen.write(self.hangman.guess(guessed_char))
            if len(self.hangman.right_attempts) == len(set(self.hangman.word)):
                self.gallow_writer.message(
                    'info', 'Congratulation! You guessed the word correctly!')
                # start a new game
                self.reset()

        # wrong attempt
        else:
            # the number of mistakes
            num_mistakes = len(self.hangman.wrong_attempts)

            figures = [
                self.hill,
                self.first_beam,
                self.second_beam,
                self.bracket,
                self.rope,
                self.head,
                self.body,
                self.first_leg,
                self.second_leg,
                self.first_arm,
                self.second_arm,
            ]

            # only draw a figure if the guessed
            # letter was not already guessed earlier
            if guessed_char not in self.hangman.attempts:
                figures[num_mistakes]()

            self.hangman.guess(guessed_char)

    def hill(self):
        self.gallow_writer.turnto(90)
        self.gallow_writer.circle(50, 180)

    def first_beam(self):
        self.gallow_writer.circle(50, -90, draw=False)
        self.gallow_writer.turnto(90)
        self.gallow_writer.move(100)

    def second_beam(self):
        self.gallow_writer.turnto(0)
        self.gallow_writer.move(100)

    def bracket(self):
        # move back and build the supporting beam (and yes, the strange
        # number 36 is necessary because the gallow must be hit exactly
        # on the right place)
        self.gallow_writer.jump(-75)
        self.gallow_writer.turnto(225)
        self.gallow_writer.move(36)

        # don't forget to to move to the place where the man will be hung
        self.gallow_writer.jump(-36)
        self.gallow_writer.turnto(0)
        self.gallow_writer.jump(75)

    def rope(self):
        self.gallow_writer.turnto(270)
        self.gallow_writer.move(25)

    def head(self):
        self.gallow_writer.turnto(0)
        self.gallow_writer.circle(-15)

    def body(self):
        self.gallow_writer.turnto(270)
        self.gallow_writer.jump(30)
        self.gallow_writer.move(50)

    def first_leg(self):
        self.gallow_writer.turnto(225)
        self.gallow_writer.move(25)

    def second_leg(self):
        self.gallow_writer.jump(-25)
        self.gallow_writer.turnto(315)
        self.gallow_writer.move(25)

    def first_arm(self):
        self.gallow_writer.jump(-25)
        self.gallow_writer.turnto(90)
        self.gallow_writer.jump(25)
        self.gallow_writer.turnto(135)
        self.gallow_writer.move(25)

    def second_arm(self):
        """ last figure -> user lost! """
        self.gallow_writer.jump(-25)
        self.gallow_writer.turnto(45)
        self.gallow_writer.move(25)
        self.gallow_writer.message(
            'Info',
            'You lost! Shame on you! The word was: ' + self.hangman.word)
        # start a new game
        self.reset()