Search code examples
pythonlinuxeventsinputadventure

Python (linux) Text based game input error


I have been working on a text-based adventure game. I've revised it a few times and can't seem to get the outcome I want, when I attempt to create EVENTS rather than simply relying on an abundance of PRINT strings. Whenever I choose the option I want (door 1 in this case), then the following options, the input is unresponsive or gives me an error. Below is a portion of the code for door 1. A little clarity would be appreciated!

def main():
import sys
from colorama import init
init()
init(autoreset=True)
from colorama import Fore, Back, Style

def run_event(event):
    text, choices = event
    text_lines = text.split("\n")
    for line in text_lines:
        print(Style.BRIGHT + line)
        print()
    choices = choices.strip()
    choices_lines = choices.split("\n")
    for num, line in enumerate(choices_lines):
        print(Fore.GREEN + Style.BRIGHT + str(num + 1) + ". " + line)
        print()
    return colored_input()

def colored_input():
    return input(Fore.YELLOW + Style.BRIGHT + "> ")
print ("")
print ("")
print ("                                                                           WELCOME TO THE MAZE                                   ")
print ("")
print ("")
print ("You have found yourself stuck within a dark room, inside this room are 5 doors.. Your only way out..")
print ("")
print ("Do you want to enter door 1,2,3,4, or 5?")
print ("")

EVENT_DOOR1 = ("""
Theres an alien eating what appears to be a human arm, though its so damaged it's hard to be sure. There is a knife next to the alien.
what do you want to do?
""","""
Go for the knife
Attack alien before it notices you
""")

EVENT_ALIEN = ("""
You approach the knife slowly, While the alien is distracted. You finally reach the knife, but as you look up, the alien stares back at you.
You make a move to stab the alien, but he is too quick. With one swift motion, the alien thrusts you into the air.
You land hard, as the alien makes it's way towards you again. What should you do?
""", """
Accept defeat?
Last ditch effort?
""")

EVENT_ALIEN2 = ("""
You catch the alien off-guard. He stumbled and hisses in your direction. You scream in terror before he grabs the knife, and punctures your throat as he rips off your limbs.")
You died.. GAME OVER.. Mistakes can't be made this soon.. OUCH
""")

door = colored_input()
if door == "1":
    run_event(EVENT_DOOR1)

alien = colored_input()
if alien == "1":
    run_event(EVENT_ALIEN)
elif alien == "2":
    run_event(EVENT_ALIEN2)

    restart=input("Start over? Yes or No? ").lower()
    if restart == "yes":
        sys.stderr.write("\x1b[2J\x1b[H")
        main()

    else:
        exit()

main()

Solution

  • You run_event function unnecessarily makes another call to colored_input() when it returns, causing the unresponsiveness as the script waits for another input. Remove the return colored_input() line and your code would work.

    Also note that you should add a comma to the single-item tuple assigned to EVENT_ALIEN2; otherwise it would be evaluated as a string:

    EVENT_ALIEN2 = ("""
    You catch the alien off-guard. He stumbled and hisses in your direction. You scream in terror before he grabs the knife, and punctures your throat as he rips off your limbs.")
    You died.. GAME OVER.. Mistakes can't be made this soon.. OUCH
    """,)