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

Kasen BjuganGreen
Kasen BjuganGreen
2,311 Points

Dungeon Game program not changing coordinates

import os
import random

# draw grid
# pick random location for player
# pick random location for exit door
# pick random location for the monster
# draw player in the grid
# take input for movement
# move player, unless invalid (beyond 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


monster, door, player = get_locations()

while True:
    valid_moves = get_moves(player)
    clear_screen()
    print("Welcome to the dungeon.")
    print("You're currently in room {}".format(player))
    print("You can move {}".format(", ".join(valid_moves)))
    print("Type 'QUIT' to quit.")

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

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

    # Good move? change the player postiton.
    # Bad move? don't change anything.
    # On the door? they win
    # On the monster? they lose
    # Otherwise, loop back around

When I run it and type in a valid position, it displays the new screen and clears the last. However the coordinates haven't changed. I feel like I've double checked everything, but obviously I haven't. Any help would be appreciated!

1 Answer

Steven Parker
Steven Parker
176,597 Points

When calling a method, always use parentheses after the name, even if there are no arguments being passed:

    move = move.upper   # should be: move.upper()

This was preventing the input from being recognized and processed.

Kasen BjuganGreen
Kasen BjuganGreen
2,311 Points

Oh, I guess I forgot that! Thank you!