# Set a message variable to display a message on selected menu item
message = None

# Now we want to create some menus to tell the player what to do, or to
# give some informations/directions
# IMPORTANT: Menu do absolutely nothing by themselves, they are just a
# structured display of informations.
# The syntaxe is game_object.add_menu_entry(category,shortcut,message)
option_red = "A cool menu in dim red"
option_magenta = "Another cool menu in bright magenta"
mygame.add_menu_entry("main_menu", None, "=" * 22)
mygame.add_menu_entry("main_menu", "h", "Show the help menu")
mygame.add_menu_entry("main_menu", None, "=" * 22)
mygame.add_menu_entry("main_menu", "1", Utils.red_dim(option_red))
mygame.add_menu_entry("main_menu", "2", Utils.magenta_bright(option_magenta))
mygame.add_menu_entry("main_menu", "q", "Quit game")

mygame.add_menu_entry("help_menu", None, "---------")
mygame.add_menu_entry("help_menu", None, "Help Menu")
mygame.add_menu_entry("help_menu", None, "---------")
mygame.add_menu_entry("help_menu", "j", "Random help menu")
mygame.add_menu_entry("help_menu", "b", "Back to main menu")

# let's set a variable that hold the current menu category (for navigation)
current_menu = "main_menu"
# Now let's make a loop to dynamically navigate in the menu
key = None
while True:
    # clear screen
    mygame.clear_screen()
Beispiel #2
0
def create_wizard():
    global game
    key = ''
    while True:
        game.clear_screen()
        print(Utils.green_bright("\t\tObject creation wizard"))
        print('What do you want to create: a NPC or a structure?')
        print('1 - NPC (Non Playable Character)')
        print('2 - Structure (Wall, Door, Treasure, Portal, Trees, etc.)')
        key = Utils.get_key()
        if key == '1' or key == '2':
            break
    if key == '1':
        game.clear_screen()
        print(
            Utils.green_bright("\t\tObject creation wizard: ") +
            Utils.cyan_bright("NPC"))
        new_object = NPC()
        print("First give a name to your NPC. Default value: " +
              new_object.name)
        r = str(input('(Enter name)> '))
        if len(r) > 0:
            new_object.name = r
        print(
            "Then give it a type. A type is important as it allows grouping.\nType is a string. Default value: "
            + new_object.type)
        r = str(input('(Enter type)> '))
        if len(r) > 0:
            new_object.type = r
        print("Now we need a model. Default value: " + new_object.model)
        input('Hit "Enter" when you are ready to choose a model.')
        new_object.model = model_picker()
        game.clear_screen()
        print(
            Utils.green_bright("\t\tObject creation wizard: ") +
            Utils.cyan_bright("NPC") + f' - {new_object.model}')
        print(
            'We now needs to go through some basic statistics. You can decide to go with default by simply hitting the "Enter" key.'
        )
        r = input_digit(
            f'Number of cell crossed in one turn. Default: {new_object.step}(type: int) > '
        )
        if len(r) > 0:
            new_object.step = int(r)
        else:
            # If it's 0 it means it's going to be a static NPC so to prevent python to pass some random pre-initialized default, we explicitly set the Actuator to a static one
            new_object.actuator = SimpleActuators.RandomActuator(moveset=[])
        r = input_digit(
            f'Max HP (Health Points). Default: {new_object.max_hp}(type: int) > '
        )
        if len(r) > 0:
            new_object.max_hp = int(r)
        new_object.hp = new_object.max_hp
        r = input_digit(
            f'Max MP (Mana Points). Default: {new_object.max_mp}(type: int) > '
        )
        if len(r) > 0:
            new_object.max_mp = int(r)
        new_object.mp = new_object.max_mp
        r = input_digit(
            f'Remaining lives (it is advised to set that to 1 for a standard NPC). Default: {new_object.remaining_lives}(type: int) > '
        )
        if len(r) > 0:
            new_object.remaining_lives = int(r)
        r = input_digit(
            f'AP (Attack Power). Default: {new_object.attack_power}(type: int) > '
        )
        if len(r) > 0:
            new_object.attack_power = int(r)
        r = input_digit(
            f'DP (Defense Power). Default: {new_object.defense_power}(type: int) > '
        )
        if len(r) > 0:
            new_object.defense_power = int(r)
        r = input_digit(
            f'Strength. Default: {new_object.strength}(type: int) > ')
        if len(r) > 0:
            new_object.strength = int(r)
        r = input_digit(
            f'Intelligence. Default: {new_object.intelligence}(type: int) > ')
        if len(r) > 0:
            new_object.intelligence = int(r)
        r = input_digit(
            f'Agility. Default: {new_object.agility}(type: int) > ')
        if len(r) > 0:
            new_object.agility = int(r)
        game.clear_screen()
        print(
            "We now need to give some life to that NPC. What kind of movement should it have:"
        )
        print("1 - Randomly chosen from a preset of directions")
        print("2 - Following a predetermined path")
        r = Utils.get_key()
        if r == '1':
            new_object.actuator = SimpleActuators.RandomActuator(moveset=[])
            print(
                'Random it is! Now choose from which preset of movements should we give it:'
            )
            print('1 - UP,DOWN,LEFT, RIGHT')
            print('2 - UP,DOWN')
            print('3 - LEFT, RIGHT')
            print('4 - UP,DOWN,LEFT, RIGHT + all DIAGONALES')
            print(
                '5 - DIAGONALES (DIAG UP LEFT, DIAG UP RIGHT, etc.) but NO straight UP, DOWN, LEFT and RIGHT'
            )
            print('6 - No movement')
            r = Utils.get_key()
            if r == '1':
                new_object.actuator.moveset = [
                    Constants.UP, Constants.DOWN, Constants.LEFT,
                    Constants.RIGHT
                ]
            elif r == '2':
                new_object.actuator.moveset = [Constants.UP, Constants.DOWN]
            elif r == '3':
                new_object.actuator.moveset = [Constants.RIGHT, Constants.LEFT]
            elif r == '4':
                new_object.actuator.moveset = [
                    Constants.UP, Constants.DOWN, Constants.LEFT,
                    Constants.RIGHT, Constants.DLDOWN, Constants.DLUP,
                    Constants.DRDOWN, Constants.DRUP
                ]
            elif r == '5':
                new_object.actuator.moveset = [
                    Constants.DLDOWN, Constants.DLUP, Constants.DRDOWN,
                    Constants.DRUP
                ]
            elif r == '6':
                new_object.actuator.moveset = []
            else:
                Utils.warn(
                    f'"{r}" is not a valid choice. Movement set is now empty.')
                new_object.actuator.moveset = []
        elif r == '2':
            new_object.actuator = SimpleActuators.PathActuator(path=[])
            print("Great, so what path this NPC should take:")
            print('1 - UP/DOWN patrol')
            print('2 - DOWN/UP patrol')
            print('3 - LEFT/RIGHT patrol')
            print('4 - RIGHT/LEFT patrol')
            print('5 - Circle patrol: LEFT, DOWN, RIGHT, UP')
            print('6 - Circle patrol: LEFT, UP, RIGHT, DOWN')
            print('7 - Circle patrol: RIGHT, DOWN, LEFT, UP')
            print('8 - Circle patrol: RIGHT, UP, LEFT, DOWN')
            print('9 - Write your own path')
            r = Utils.get_key()
            if r == '1':
                print(
                    "How many steps should the NPC go in one direction before turning back ?"
                )
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
            elif r == '2':
                print(
                    "How many steps should the NPC go in one direction before turning back ?"
                )
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
            elif r == '3':
                print(
                    "How many steps should the NPC go in one direction before turning back ?"
                )
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.LEFT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.RIGHT for i in range(0, r, 1)
                ]
            elif r == '3':
                print(
                    "How many steps should the NPC go in one direction before turning back ?"
                )
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.RIGHT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.LEFT for i in range(0, r, 1)
                ]
            elif r == '4':
                print(
                    "How many steps should the NPC go in one direction before turning back ?"
                )
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
            elif r == '5':
                print(
                    "How many steps should the NPC go in EACH direction before changing ?"
                )
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.LEFT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.RIGHT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
            elif r == '6':
                print(
                    "How many steps should the NPC go in EACH direction before changing ?"
                )
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.LEFT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.RIGHT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
            elif r == '7':
                print(
                    "How many steps should the NPC go in EACH direction before changing ?"
                )
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.RIGHT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.LEFT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
            elif r == '8':
                print(
                    "How many steps should the NPC go in EACH direction before changing ?"
                )
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.RIGHT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.LEFT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
            elif r == '9':
                print(
                    "Write your own path using only words from this list: UP, DOWN, LEFT, RIGHT, DLDOWN, DLUP, DRDOWN, DRUP."
                )
                print('Each direction has to be separated by a coma.')
                r = str(input('Write your path: ')).upper()
                new_object.actuator.path = r.split(',')
            else:
                Utils.warn(f'"{r}" is not a valid choice. Path is now empty.')
                new_object.actuator.path = []

        return new_object
    elif key == '2':
        while True:
            game.clear_screen()
            print(
                Utils.green_bright("\t\tObject creation wizard: ") +
                Utils.magenta_bright("Structure"))
            print("What kind of structure do you want to create:")
            print(
                '1 - A wall like structure (an object that cannot be picked-up and is not overlappable). Ex: walls, trees, non moving elephant (try to go through an elephant or to pick it up in your backpack...)'
            )
            print('2 - A door (player and/or NPC can go through)')
            print(
                '3 - A treasure (can be picked up, take space in the inventory, give points to the player)'
            )
            print(
                '4 - A generic object (you can set the properties to make it pickable or overlappable)'
            )
            print(
                '5 - A generic actionable object (to make portals, heart to replenish life, etc.)'
            )
            key = Utils.get_key()
            new_object = None
            if key == '1':
                new_object = Structures.Wall()
                new_object.name = str(uuid.uuid1())
                new_object.model = model_picker()
                break
            elif key == '2':
                new_object = Structures.Door()
                new_object.name = str(uuid.uuid1())
                new_object.model = model_picker()
                break
            elif key == '3':
                new_object = Structures.Treasure()
                print("First give a name to your Treasure. Default value: " +
                      new_object.name)
                r = str(input('(Enter name)> '))
                if len(r) > 0:
                    new_object.name = r
                print(
                    "Then give it a type. A type is important as it allows grouping (in this case probably in the inventory).\nType is a string. Default value: "
                    + new_object.type)
                r = str(input('(Enter type)> '))
                if len(r) > 0:
                    new_object.type = r
                print("Now we need a model. Default value: " +
                      new_object.model)
                input('Hit "Enter" when you are ready to choose a model.')
                new_object.model = model_picker()
                break
            elif key == '4' or key == '5':
                if key == '4':
                    new_object = Structures.GenericStructure()
                else:
                    new_object = Structures.GenericActionableStructure()
                new_object.set_overlappable(False)
                new_object.set_pickable(False)
                print("First give a name to your structure. Default value: " +
                      new_object.name)
                r = str(input('(Enter name)> '))
                if len(r) > 0:
                    new_object.name = r
                print(
                    "Then give it a type. \nType is a string. Default value: "
                    + new_object.type)
                r = str(input('(Enter type)> '))
                if len(r) > 0:
                    new_object.type = r
                print("Now we need a model. Default value: " +
                      new_object.model)
                input('Hit "Enter" when you are ready to choose a model.')
                new_object.model = model_picker()
                print(
                    'Is this object pickable? (can it be picked up by the player)?'
                )
                print('0 - No')
                print('1 - Yes')
                r = Utils.get_key()
                if r == '1':
                    new_object.set_pickable(True)
                print(
                    'Is this object overlappable? (can it be walked over by player?'
                )
                print('0 - No')
                print('1 - Yes')
                r = Utils.get_key()
                if r == '1':
                    new_object.set_overlappable(True)
                break

        return new_object

    #Placeholder
    return BoardItemVoid()
Beispiel #3
0
import examples_includes  # noqa: F401

# First import the Utils module
import gamelib.Utils as Utils

# Then get creative!

# you directly print colored messages:
print(Utils.magenta_bright("This is a rather flashy magenta..."))

# Each color function has 3 variations : regular, dim and bright
print(Utils.yellow_dim("This is dim."))
print(Utils.yellow("This is regular."))
print(Utils.yellow_bright("This is bright."))

# Now, the color functions are just that: functions. So you can store the
# results in a variable and use them:
blue = Utils.blue_bright("blue")
white = Utils.white_bright("white")
red = Utils.red_bright("red")
print(f"France's flag is {blue} {white} {red}!")
Beispiel #4
0
    sprite_treasure = Sprites.GEM_STONE
    sprite_treasure2 = Sprites.MONEY_BAG
    sprite_tree = Sprites.TREE_PINE
    sprite_wall = Sprites.WALL
    sprite_npc = Sprites.SKULL
    sprite_npc2 = Sprites.POO
    sprite_heart = Sprites.HEART_SPARKLING
    sprite_heart_minor = Sprites.HEART_BLUE
else:
    # sprite_player = Utils.RED_BLUE_SQUARE
    sprite_portal = Utils.CYAN_SQUARE
    sprite_treasure = Utils.YELLOW_RECT + Utils.RED_RECT
    sprite_treasure2 = Utils.yellow_bright('$$')
    sprite_tree = Utils.GREEN_SQUARE
    sprite_wall = Utils.WHITE_SQUARE
    sprite_npc = Utils.magenta_bright("oO")
    sprite_npc2 = Utils.magenta_bright("'&")
    sprite_heart = Utils.red_bright('<3')
    sprite_heart_minor = Utils.blue_bright('<3')


# Here are some functions to manage the game
# This one clear the screen, print the game title, print the player stats,
# display the current board, print the inventory and print the menu.
def refresh_screen(mygame, player, menu):
    mygame.clear_screen()
    # print(Utils.magenta_bright(f"\t\t~+~ Welcome to {mygame.name} ~+~"))
    mygame.display_player_stats()
    mygame.display_board()
    if player.inventory.size() > 0:
        # If inventory is not empty print it
Beispiel #5
0
mygame = Game(name='Demo game')

# Set a message variable to display a message on selected menu item
message = None

# Now we want to create some menus to tell the player what to do, or to give some informations/directions
# IMPORTANT: Menu do absolutely nothing by themselves, they are just a structured display of informations
# The syntaxe is game_object.add_menu_entry(category,shortcut,message)
mygame.add_menu_entry('main_menu', None, '=' * 22)
mygame.add_menu_entry('main_menu', 'h', 'Show the help menu')
mygame.add_menu_entry('main_menu', None, '=' * 22)
mygame.add_menu_entry('main_menu', '1',
                      Utils.red_dim('A cool menu in dim red'))
mygame.add_menu_entry(
    'main_menu', '2',
    Utils.magenta_bright('Another cool menu in bright magenta'))
mygame.add_menu_entry('main_menu', 'q', 'Quit game')

mygame.add_menu_entry('help_menu', None, '---------')
mygame.add_menu_entry('help_menu', None, 'Help Menu')
mygame.add_menu_entry('help_menu', None, '---------')
mygame.add_menu_entry('help_menu', 'j', 'Random help menu')
mygame.add_menu_entry('help_menu', 'b', 'Back to main menu')

# let's set a variable that hold the current menu category (for navigation)
current_menu = 'main_menu'
# Now let's make a loop to dynamically navigate in the menu
key = None
while True:
    # clear screen
    mygame.clear_screen()
import examples_includes

# First import the Utils module
import gamelib.Utils as Utils

# Then get creative!

# you directly print colored messages:
print("France flag is "+Utils.blue_bright('blue ')+Utils.white_bright('white ')+Utils.red_bright('red')+"!")

# Each color function has 3 variations : regular, dim and bright
print( Utils.yellow_dim('This is dim.')+Utils.yellow(' This is regular.')+Utils.yellow_bright(' This is bright.') )

# Now, the color functions are just that: functions. So you can store the results in a variable and use them:
flashymagy = Utils.magenta_bright('This is a rather flashy magenta...')

print('Now that is a colored message in a variable: '+flashymagy)
Beispiel #7
0
def create_wizard():
    global game
    key = ""
    while True:
        game.clear_screen()
        print(Utils.green_bright("\t\tObject creation wizard"))
        print("What do you want to create: a NPC or a structure?")
        print("1 - NPC (Non Playable Character)")
        print("2 - Structure (Wall, Door, Treasure, Portal, Trees, etc.)")
        key = Utils.get_key()
        if key == "1" or key == "2":
            break
    if key == "1":
        game.clear_screen()
        print(
            Utils.green_bright("\t\tObject creation wizard: ") +
            Utils.cyan_bright("NPC"))
        new_object = NPC()
        print("First give a name to your NPC. Default value: " +
              new_object.name)
        r = str(input("(Enter name)> "))
        if len(r) > 0:
            new_object.name = r
        print(
            "Then give it a type. A type is important as it allows grouping.\n"
            "Type is a string. Default value: " + new_object.type)
        r = str(input("(Enter type)> "))
        if len(r) > 0:
            new_object.type = r
        print("Now we need a model. Default value: " + new_object.model)
        input('Hit "Enter" when you are ready to choose a model.')
        new_object.model = model_picker()
        game.clear_screen()
        print(
            Utils.green_bright("\t\tObject creation wizard: ") +
            Utils.cyan_bright("NPC") + f" - {new_object.model}")
        print("We now needs to go through some basic statistics. "
              "You can decide to go with default by simply hitting "
              'the "Enter" key.')
        r = input_digit(f"Number of cell crossed in one turn. "
                        f"Default: {new_object.step}(type: int) > ")
        if len(r) > 0:
            new_object.step = int(r)
        else:
            # If it's 0 it means it's going to be a static NPC so to prevent
            # python to pass some random pre-initialized default, we explicitly
            # set the Actuator to a static one
            new_object.actuator = SimpleActuators.RandomActuator(moveset=[])

        r = input_digit(f"Max HP (Health Points). "
                        f"Default: {new_object.max_hp}(type: int) > ")
        if len(r) > 0:
            new_object.max_hp = int(r)
        new_object.hp = new_object.max_hp

        r = input_digit(f"Max MP (Mana Points). "
                        f"Default: {new_object.max_mp}(type: int) > ")
        if len(r) > 0:
            new_object.max_mp = int(r)
        new_object.mp = new_object.max_mp

        r = input_digit(
            f"Remaining lives (it is advised to set that to 1 for a "
            f"standard NPC). "
            f"Default: {new_object.remaining_lives}(type: int) > ")
        if len(r) > 0:
            new_object.remaining_lives = int(r)

        r = input_digit(f"AP (Attack Power). "
                        f"Default: {new_object.attack_power}(type: int) > ")
        if len(r) > 0:
            new_object.attack_power = int(r)

        r = input_digit(f"DP (Defense Power). "
                        f"Default: {new_object.defense_power}(type: int) > ")
        if len(r) > 0:
            new_object.defense_power = int(r)

        r = input_digit(
            f"Strength. Default: {new_object.strength}(type: int) > ")
        if len(r) > 0:
            new_object.strength = int(r)

        r = input_digit(
            f"Intelligence. Default: {new_object.intelligence}(type: int) > ")
        if len(r) > 0:
            new_object.intelligence = int(r)

        r = input_digit(
            f"Agility. Default: {new_object.agility}(type: int) > ")
        if len(r) > 0:
            new_object.agility = int(r)

        game.clear_screen()
        print("We now need to give some life to that NPC. "
              "What kind of movement should it have:")
        print("1 - Randomly chosen from a preset of directions")
        print("2 - Following a predetermined path")
        print("3 - Following a predetermined path back and forth")
        print(
            "4 - Automatically finding it's way from one point to another (no"
            " pre-determined path, you will set the points on the map).")
        r = Utils.get_key()
        if r == "1":
            new_object.actuator = SimpleActuators.RandomActuator(moveset=[])
            print("Random it is! Now choose from which preset "
                  "of movements should we give it:")
            print("1 - UP,DOWN,LEFT, RIGHT")
            print("2 - UP,DOWN")
            print("3 - LEFT, RIGHT")
            print("4 - UP,DOWN,LEFT, RIGHT + all DIAGONALES")
            print("5 - DIAGONALES (DIAG UP LEFT, DIAG UP RIGHT, etc.) "
                  "but NO straight UP, DOWN, LEFT and RIGHT")
            print("6 - No movement")
            r = Utils.get_key()
            if r == "1":
                new_object.actuator.moveset = [
                    Constants.UP,
                    Constants.DOWN,
                    Constants.LEFT,
                    Constants.RIGHT,
                ]
            elif r == "2":
                new_object.actuator.moveset = [Constants.UP, Constants.DOWN]
            elif r == "3":
                new_object.actuator.moveset = [Constants.RIGHT, Constants.LEFT]
            elif r == "4":
                new_object.actuator.moveset = [
                    Constants.UP,
                    Constants.DOWN,
                    Constants.LEFT,
                    Constants.RIGHT,
                    Constants.DLDOWN,
                    Constants.DLUP,
                    Constants.DRDOWN,
                    Constants.DRUP,
                ]
            elif r == "5":
                new_object.actuator.moveset = [
                    Constants.DLDOWN,
                    Constants.DLUP,
                    Constants.DRDOWN,
                    Constants.DRUP,
                ]
            elif r == "6":
                new_object.actuator.moveset = []
            else:
                Utils.warn(
                    f'"{r}" is not a valid choice. Movement set is now empty.')
                new_object.actuator.moveset = []
        elif r == "2" or r == "3":
            if r == "2":
                new_object.actuator = SimpleActuators.PathActuator(path=[])
            elif r == "3":
                new_object.actuator = SimpleActuators.PatrolActuator(path=[])
            print("Great, so what path this NPC should take:")
            print("1 - UP/DOWN patrol")
            print("2 - DOWN/UP patrol")
            print("3 - LEFT/RIGHT patrol")
            print("4 - RIGHT/LEFT patrol")
            print("5 - Circle patrol: LEFT, DOWN, RIGHT, UP")
            print("6 - Circle patrol: LEFT, UP, RIGHT, DOWN")
            print("7 - Circle patrol: RIGHT, DOWN, LEFT, UP")
            print("8 - Circle patrol: RIGHT, UP, LEFT, DOWN")
            print("9 - Write your own path")
            r = Utils.get_key()
            if r == "1":
                print("How many steps should the NPC go in one direction "
                      "before turning back ?")
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += ([
                    Constants.UP for i in range(0, r, 1)
                ], )
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
            elif r == "2":
                print("How many steps should the NPC go in one "
                      "direction before turning back ?")
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
            elif r == "3":
                print("How many steps should the NPC go in one "
                      "direction before turning back ?")
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.LEFT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.RIGHT for i in range(0, r, 1)
                ]
            elif r == "3":
                print("How many steps should the NPC go in one direction "
                      "before turning back ?")
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.RIGHT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.LEFT for i in range(0, r, 1)
                ]
            elif r == "4":
                print("How many steps should the NPC go in one "
                      "direction before turning back ?")
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
            elif r == "5":
                print("How many steps should the NPC go in EACH "
                      "direction before changing ?")
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.LEFT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.RIGHT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
            elif r == "6":
                print("How many steps should the NPC go in EACH "
                      "direction before changing ?")
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.LEFT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.RIGHT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
            elif r == "7":
                print("How many steps should the NPC go in EACH "
                      "direction before changing ?")
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.RIGHT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.LEFT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
            elif r == "8":
                print("How many steps should the NPC go in EACH direction "
                      "before changing ?")
                r = int(input_digit("(please enter an integer)> "))
                new_object.actuator.path += [
                    Constants.RIGHT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.UP for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.LEFT for i in range(0, r, 1)
                ]
                new_object.actuator.path += [
                    Constants.DOWN for i in range(0, r, 1)
                ]
            elif r == "9":
                print("Write your own path using only words from this list: "
                      "UP, DOWN, LEFT, RIGHT, DLDOWN, DLUP, DRDOWN, DRUP.")
                print("Each direction has to be separated by a coma.")
                r = str(input("Write your path: ")).upper()
                new_object.actuator.path = r.split(",")
            else:
                Utils.warn(f'"{r}" is not a valid choice. Path is now empty.')
                new_object.actuator.path = []
        elif r == "4":
            new_object.actuator = AdvancedActuators.PathFinder(
                parent=new_object, circle_waypoints=True)
            print(
                "Do you want the NPC to go through your way points once and stop or"
                " to cycle through all of them infinitely ?")
            print("1 - Cycle once")
            print("2 - Cycle infinitely (default value)")
            r = Utils.get_key()
            if r == "1":
                new_object.actuator.circle_waypoints = False
        return new_object
    elif key == "2":
        while True:
            game.clear_screen()
            print(
                Utils.green_bright("\t\tObject creation wizard: ") +
                Utils.magenta_bright("Structure"))
            print("What kind of structure do you want to create:")
            print(
                "1 - A wall like structure (an object that cannot be picked-up "
                "and is not overlappable). Ex: walls, trees, non moving "
                "elephant (try to go through an elephant or to pick it up "
                "in your backpack...)")
            print("2 - A door (player and/or NPC can go through)")
            print("3 - A treasure (can be picked up, take space in the "
                  "inventory, give points to the player)")
            print("4 - A generic object (you can set the properties to "
                  "make it pickable or overlappable)")
            print("5 - A generic actionable object (to make portals, heart "
                  "to replenish life, etc.)")
            key = Utils.get_key()
            new_object = None
            if key == "1":
                new_object = Structures.Wall()
                new_object.name = str(uuid.uuid1())
                new_object.model = model_picker()
                break
            elif key == "2":
                new_object = Structures.Door()
                new_object.name = str(uuid.uuid1())
                new_object.model = model_picker()
                break
            elif key == "3":
                new_object = Structures.Treasure()
                print("First give a name to your Treasure. Default value: " +
                      new_object.name)
                r = str(input("(Enter name)> "))
                if len(r) > 0:
                    new_object.name = r
                print("Then give it a type. A type is important as it allows "
                      "grouping (in this case probably in the inventory).\n"
                      "Type is a string. Default value: " + new_object.type)
                r = str(input("(Enter type)> "))
                if len(r) > 0:
                    new_object.type = r
                print("Now we need a model. Default value: " +
                      new_object.model)
                input('Hit "Enter" when you are ready to choose a model.')
                new_object.model = model_picker()
                break
            elif key == "4" or key == "5":
                if key == "4":
                    new_object = Structures.GenericStructure()
                else:
                    new_object = Structures.GenericActionableStructure()
                new_object.set_overlappable(False)
                new_object.set_pickable(False)
                print("First give a name to your structure. Default value: " +
                      new_object.name)
                r = str(input("(Enter name)> "))
                if len(r) > 0:
                    new_object.name = r
                print(
                    "Then give it a type. \nType is a string. Default value: "
                    + new_object.type)
                r = str(input("(Enter type)> "))
                if len(r) > 0:
                    new_object.type = r
                print("Now we need a model. Default value: " +
                      new_object.model)
                input('Hit "Enter" when you are ready to choose a model.')
                new_object.model = model_picker()
                print("Is this object pickable? (can it be picked up "
                      "by the player)?")
                print("0 - No")
                print("1 - Yes")
                r = Utils.get_key()
                if r == "1":
                    new_object.set_pickable(True)
                print("Is this object overlappable? (can it be walked "
                      "over by player?")
                print("0 - No")
                print("1 - Yes")
                r = Utils.get_key()
                if r == "1":
                    new_object.set_overlappable(True)
                break

        return new_object

    # Placeholder
    return BoardItemVoid()