Python Python Collections (2016, retired 2019) Dungeon Game Cartographer

Marta P.
Marta P.
2,849 Points

Dungeon game: my game sort of works but my map does not show

Here is my snapshot: https://w.trhou.se/ph1thy60vw

Thanks in advance for your help:)

Robert Smedley
Robert Smedley
4,460 Points

line 70 you have mispelled your variable by using lined_end instead of line_end.

4 Answers

Mischa Yartsev
Mischa Yartsev
20,540 Points

Hi, Marta Palandri !

Actually, there are two small mistakes in your code.

As it was previously mentioned a typo on line 70, where a variable name should be line_end and a print statement on 75 line, it should inside for loop, like this:

    for cell in CELLS:
        x, y = cell
        if x < 4:
            line_end = ""
            if cell == player:
                output = tile.format("X")
            else:
                output = tile.format("_")
        else:
            line_end = "\n"
            if cell == player:
                output = tile.format("X|")
            else:
                output = tile.format("_|")
        print(output, end=line_end)

Hope it helps. Cheers!

Shreyas Papinwar
Shreyas Papinwar
2,371 Points

Its easy -

line 70 you have mispelled your variable by using lined_end instead of line_end.

Just Change it.

Marta P.
Marta P.
2,849 Points

Hi, thanks to both! However my game still doesn't work properly. Meaning, I can't really see the grid while it is being played!

Shreyas Papinwar
Shreyas Papinwar
2,371 Points

Hey please add your full code.

Shreyas Papinwar
Shreyas Papinwar
2,371 Points

Hey I am made some changes to your code to work grid_map function but you have to think to solve other problems -

import os
import random

# draw grid
# pick random location for player
# pick random location for exit door
# pick random location for monster
# draw player in the grid
# take input for movement
# move player, unless invalid move (past edges of grid)
# check for win/loss
# clear screen and redraw grid

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  move == "RIGHT":
        x += 1
    if move == "UP":
        y -= 1
    if move == "DOWN":
        y += 1

    return x, y


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

    return moves


def draw_map(player, monster, door):
    print(" _"*5)
    tile = "|{}"

    for cell in CELLS:
        x, y = cell
        if x < 4:
            line_end = ""
            if cell == player:
                output = tile.format("X")
            elif cell == door:
                output = tile.format("D")
            elif cell == monster:
                output = tile.format("M")
            else:
                output = tile.format("_")
        else:
            line_end = "\n"
            if cell == player:
                output = tile.format("X|")
            elif cell == monster:
                output = tile.format("M|")

            elif cell == door:
                output = tile.format("D|")           
            else:
                output = tile.format("_|")
        print(output, end=line_end)

def game_loop():
    monster, door, player = get_locations()
    playing = True
    while True:
        draw_map(player, monster, door)
        valid_moves = get_moves(player)   

        print("You're currently in room {}".format(player))  
        print("You can move {}".format(", ".join(valid_moves)))
        print("Enter QUIT to quit")
        move = input("> ")
        move = move.upper()

        if move == 'QUIT':
            print("\n ** See you next time! **\n")
            break
        if move in valid_moves:
            player = move_player(player, move)
        else:
            input("\n ** Walls are hard! Don't run into them! **!\n")
        clear_screen()    


clear_screen()
print("Welcome to the dungeon!")
input("Press return to start!")
clear_screen()
game_loop()

GOOD LUCK!!