Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Python

Robert Baucus
Robert Baucus
3,400 Points

Dungeon_game, trying to print out a sweet ASCII monster image, doesn't come out right

So after much banging my head on the wall and some help from the knowledgeable folks here at Treehouse , I got my program to work. I even put in some custom error messages and jazzed it up a notch.
The problem is that the sweet ASCII text image that i print when the player hits a monster does not come out right: there is apparently a couple of lines shifted when it runs in the program. I saved the ASCII text in between triple quotes and put that into a variable and printed that variable , here is the code:

import random
import os
import sys

error_messages = [
"Not without a shovel, mate!",
"Sorry guv, you've hit the wall!",
"Ain't gonna happen, brev!",
"Stop knockin' yer 'ead on the wall guv'na ! Turn around!",
"Ain't going no furver, mate!",
"Stop slammin the wall, ya cheeky bastard!",
"Hear that clunk? That's your head banging the wall!",
"Go ahead, keep banging into the wall, see what I care!"
]

monster_image = '''\\
                              ,--,  ,.-.
                ,                   \,       '-,-`,'-.' | ._
               /|           \    ,   |\         }  )/  / `-,',
               [ '          |\  /|   | |        /  \|  |/`  ,`
               | |       ,.`  `,` `, | |  _,...(   (      _',
               \  \  __ ,-` `  ,  , `/ |,'      Y     (   \_L\
                \  \_\,``,   ` , ,  /  |         )         _,/
                 \  '  `  ,_ _`_,-,<._.<        /         /
                  ', `>.,`  `  `   ,., |_      |         /
                    \/`  `,   `   ,`  | /__,.-`    _,   `\
                -,-..\  _  \  `  /  ,  / `._) _,-\`       \
                 \_,,.) /\    ` /  / ) (-,, ``    ,        |
                ,` )  | \_\       '-`  |  `(               \
               /  /```(   , --, ,' \   |`<`    ,            |
              /  /_,--`\   <\  V /> ,` )<_/)  | \      _____)
        ,-, ,`   `   (_,\ \    |   /) / __/  /   `----`
       (-, \           ) \ ('_.-._)/ /,`    /
       | /  `          `/ \\ V   V, /`     /
    ,--\(        ,     <_/`\\     ||      /
   (   ,``-     \/|         \-A.A-`|     /
  ,>,_ )_,..(    )\          -,,_-`  _--`
 (_ \|`   _,/_  /  \_            ,--`
  \( `   <.,../`     `-.._   _,-`
   `                      ```
'''


CELLS = [(0,0),(1,0),(2,0),(3,0),(4,0),
         (0,1),(1,1),(2,1),(3,1),(4,1),
         (0,2),(1,2),(2,2),(3,2),(4,2),
         (0,3),(1,3),(2,3),(3,3),(4,3),
         (0,4),(1,4),(2,4),(3,4),(4,4),]

def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')

def get_locations():
    return random.sample(CELLS,3)



def move_player(player, move):
    x, y = player
    if move == 'LEFT':
        x -= 1
        if x < 0:
            x = 0
    if move == 'RIGHT':
        x += 1
        if x > 4:
            x = 4
    if move == 'UP':
        y -= 1
        if y < 0:
            y = 0
    if move == 'DOWN':
        y += 1
        if y > 4:
            y = 4
    return x,y

def get_move(player):
    move = ["LEFT", "RIGHT", "UP", "DOWN"]
    x, y = player
    if x == 0:
        move.remove("LEFT")
    if x == 4:
        move.remove("RIGHT")
    if y == 0:
        move.remove("UP")
    if y == 4:
        move.remove("DOWN")
    return move




monster, door, player  = get_locations()

while True:
    valid_moves = get_move(player)

    print("Welcome to the DUNGEON !")
    print("You are currently in room {}".format(player)) 
    print("You can move {}".format(", ".join(valid_moves)))
    print("Enter QUIT to quit")

    move = input("> ")
    move = move.upper()

    if player == door:
        print("")
        print("")
        print(" BY JOVE, YOU'VE DONE IT , YOU HAVE FOUND THE DOOR AND LEFT THE MAZE! ")
        break

    if player == monster:
        print("")
        print("")
        print("\n")
        print(monster_image)
        print("RUN AWAY, IT'S A MONSTER!!!")
        break

    if move == 'QUIT':
        print("I guess you were afraid of the DUNGEON!")
        break
    if move in valid_moves:
        player = move_player(player, move)
    else:
        print(random.choice(error_messages))
        continue
    clear_screen()

The actual image comes out like this though:

\ ,--, ,.-. , \, '-,-,'-.' | ._ /| \ , |\ } )/ /-,', [ ' |\ /| | | / | |/, | | ,.,, | | ,...( ( _', \ \ _ ,- , , / |,' Y ( \_L \ \_\,, , , / | ) ,/ \ ' ` , `,-,<..< / / ', >., ,., | | / \/, , | /,.-_, -,-..\ _ \ / , /.) _,-` _,,.) /\ / / ) (-,,, | , ) | _\ '-|( / /``( , --, ,' \ |<` , | / /,--\ <\ V /> , )</) | \ _) ,-, , (,\ \ | /) / _/ / ---- (-, \ ) \ ('.-.)/ /,/ | / / \ V V, / / ,--( , </\ || / ( ,- \/| \-A.A-| / ,>,_ ),..( )\ -,,-_-- (_ |_,/_ / \_ ,-- ( <.,../ -.._ _,- ``

RUN AWAY, IT'S A MONSTER!!!

I am not sure why it is not coming out right. I hope it is something simple that can be changed to fix it, otherwise I am not sure if a huge amount of work is worth it for something so silly

1 Answer

Steven Parker
Steven Parker
216,017 Points

To avoid having a backslash ("\") treated as a special "escape" character, put the string in "raw" mode by adding the letter "R" (or "r") in front of the first quote:

monster_image = R'''
                                             ,--,  ,.-.
                ,                   \,       '-,-`,'-.' | ._
               /|           \    ,   |\         }  )/  / `-,',
               [ '          |\  /|   | |        /  \|  |/`  ,`
               | |       ,.`  `,` `, | |  _,...(   (      _',
               \  \  __ ,-` `  ,  , `/ |,'      Y     (   \_L\
                \  \_\,``,   ` , ,  /  |         )         _,/
                 \  '  `  ,_ _`_,-,<._.<        /         /
                  ', `>.,`  `  `   ,., |_      |         /
                    \/`  `,   `   ,`  | /__,.-`    _,   `\
                -,-..\  _  \  `  /  ,  / `._) _,-\`       \
                 \_,,.) /\    ` /  / ) (-,, ``    ,        |
                ,` )  | \_\       '-`  |  `(               \
               /  /```(   , --, ,' \   |`<`    ,            |
              /  /_,--`\   <\  V /> ,` )<_/)  | \      _____)
        ,-, ,`   `   (_,\ \    |   /) / __/  /   `----`
       (-, \           ) \ ('_.-._)/ /,`    /
       | /  `          `/ \\ V   V, /`     /
    ,--\(        ,     <_/`\\     ||      /
   (   ,``-     \/|         \-A.A-`|     /
  ,>,_ )_,..(    )\          -,,_-`  _--`
 (_ \|`   _,/_  /  \_            ,--`
  \( `   <.,../`     `-.._   _,-`
   `                      ```
'''

I also removed some stray backslashes and adjusted the spacing on the first line.

Robert Baucus
Robert Baucus
3,400 Points

Thanks! As Sean Connery's character said in "Finding Forester",

"You're the man now dog!"