Beispiel #1
0
def ExitProgram():
    # Save & Exit
    Files.SaveScoreboard(Files.ScoreboardPath, Scoreboard)
    ConsoleTools.Clear()
    exit(1)
Beispiel #2
0
def Game():
    global Dictionary
    Dictionary = Files.LoadDictionary(Files.DictionaryPath)
    word = random.choice(Dictionary)
    word = word.upper()

    # Get individual characters of the word to compare length to guesses.
    # This will find whether it's been guessed properly or not.
    wordCharacters = []
    for character in word:
        if character not in wordCharacters:
            wordCharacters.append(character)

    unsuccessfulGuesses = []
    successfulGuesses = []

    # While guesses are less than the max amount of stages
    def GetGuesses() -> int:
        base = len(Text.ArtStages) - len(unsuccessfulGuesses)
        for char in unsuccessfulGuesses:
            if char in "AEIOU":
                base -= 1
        return base

    while GetGuesses() > 0:
        ConsoleTools.Clear()

        # Write the ASCII art
        ConsoleTools.WriteFromPosition(
            Text.ArtStages[len(unsuccessfulGuesses)], XOffset + 50,
            YOffset + 2)

        # Write the word
        ConsoleTools.WriteFromPosition("Word:", XOffset + 4, YOffset + 2)
        ConsoleTools.WriteFromPosition(
            Text.GetPrintableWord(word, successfulGuesses), XOffset + 12,
            YOffset + 2)

        # Write unsuccessful guesses
        if len(unsuccessfulGuesses) > 0:
            ConsoleTools.WriteErrorFromPosition("Unsuccessful Guesses:",
                                                XOffset, YOffset + 4)
            ConsoleTools.WriteErrorFromPosition(
                Text.FormatArray(unsuccessfulGuesses), XOffset + 5,
                YOffset + 5)

        # Write the guesses left
        ConsoleTools.WriteFromPosition(
            "You have " + str(GetGuesses()) + " guesses left.", XOffset,
            YOffset + 7)

        # Set cursor position to correct spot for input, then get the letter.
        ConsoleTools.SetCursor(XOffset, YOffset + 8)
        guess = input("Enter a letter: ")
        guess = guess.upper()

        # Check if it is one letter.
        if len(guess) != 1:
            ConsoleTools.DialogError("You must enter one letter.")
            continue

        # Check if already guessed this letter
        if guess in unsuccessfulGuesses or guess in successfulGuesses:
            ConsoleTools.DialogError("You have already guessed this letter.")
            continue

        if guess not in word:
            # Add to bad guesses
            unsuccessfulGuesses.append(guess)
            ConsoleTools.DialogError("Incorrect guess.")
        else:
            # Add to successful guesses
            successfulGuesses.append(guess)
            ConsoleTools.Dialog("Successful Guess!")

        # Check if word is fully guessed
        if len(wordCharacters) == len(successfulGuesses): break

    # Success / Game Over
    ConsoleTools.TimeoutTime = 0.5
    if len(wordCharacters) == len(successfulGuesses):
        # Success
        ConsoleTools.Dialog("You have guessed the word!")
        ConsoleTools.WriteFromPosition(
            "The word was: " + word + ".",
            ConsoleTools.XOffset + ConsoleTools.DialogOffsetX,
            ConsoleTools.YOffset + ConsoleTools.DialogOffsetY + 1)

        # Get the score
        time.sleep(0.25)
        score = GetGuesses() * Text.UniqueLetters(word)
        ConsoleTools.WriteFromPosition(
            "Your score was: " + str(score),
            ConsoleTools.XOffset + ConsoleTools.DialogOffsetX + 2,
            ConsoleTools.YOffset + ConsoleTools.DialogOffsetY + 3)

        # Allow player to enter name
        ConsoleTools.SetCursor(
            ConsoleTools.XOffset + ConsoleTools.DialogOffsetX + 2,
            ConsoleTools.YOffset + ConsoleTools.DialogOffsetY + 5)
        name = input(
            "Enter your name if you want to add it to the scoreboard: ")
        if len(name) > 0:
            Scoreboard.append((name, score))
            Files.SaveScoreboard(Files.ScoreboardPath, Scoreboard)
    else:
        # Failed
        ConsoleTools.DialogError("You have failed to guess the word.")
        ConsoleTools.WriteErrorFromPosition(
            "The word was: " + word + ".",
            ConsoleTools.XOffset + ConsoleTools.DialogOffsetX,
            ConsoleTools.YOffset + ConsoleTools.DialogOffsetY + 1)
    time.sleep(5.0)
    Menu()