Search code examples
pythonconsole

Debugging Maze game in Python


Ive been learning python recently and am currently working on a small terminal game that has a character move through a maze. Im having a bug where my character is getting stuck and not allowed to move into the open spaces. Ive checked that all my movements the correct directions, and im not sure why the character is stuck.

App

played = player.Player(3, 2)

while True:
    board.printBoard(played.rowPosition, played.columnPosition)
    selection = input("Make a move: ")

    if selection == "w":
        if board.checkMove(played.rowPosition - 1, played.columnPosition):
            played.moveUp()
    elif selection == "s":
        if board.checkMove(played.rowPosition + 1, played.columnPosition):
            played.moveDown()
    elif selection == "a":
        if board.checkMove(played.rowPosition, played.columnPosition - 1):
            played.moveLeft()
    elif selection == "d":
        if board.checkMove(played.rowPosition, played.columnPosition - 1):
            played.moveRight()
    else:
        print("Invalid key")

    if board.checkWin(played.rowPosition, played.columnPosition):
        print("You Win!")
        break;

Player:

class Player:
    def __init__(self, intitalRow, initialColumn):
        self.rowPosition = intitalRow
        self.columnPosition = initialColumn

    def moveUp(self):
        self.rowPosition = self.rowPosition - 1

    def moveDown(self):
        self.rowPosition = self.rowPosition + 1

    def moveRight(self):
        self.columnPosition = self.columnPosition + 1

    def moveLeft(self):
        self.columnPosition = self.columnPosition - 1

Gameboard

class GameBoard:
    def __init__(self):
        self.winningRow = 0
        self.winningColumn = 2
        self.board = [
            [" * ", " * ", "   ", " * ", " * ", " * "],
            [
                " * ",
                "   ",
                "   ",
                "   ",
                " * ",
                " * ",
            ],
            [
                " * ",
                "   ",
                " * ",
                " * ",
                "   ",
                " * ",
            ],
            [
                " * ",
                "   ",
                "   ",
                "   ",
                "   ",
                " * ",
            ],
            [" * ", " * ", " * ", " * ", " * ", " * "],
        ]

    def printBoard(self, playerRow, playerColumn):
        for i in range(len(self.board)):
            for j in range(len(self.board[i])):
                if i == playerRow and j == playerColumn:
                    print("P", end="")
                else:
                    print(self.board[i][j], end="")
            print("")

    def checkMove(self, testRow, testColumn):
        if self.board[testRow][testColumn].find("*") != -1:
            print("Can't move there!")
            return False
        return True

    def checkWin(self, playerRow, playerColumn):
        if playerRow == 0 and playerColumn == 2:
            return True
        else: 
            return False

Solution

  • When the selection is "d" the same cell is being checked as when the selection is "a". I think you meant for one of these to use played.columnPosition + 1.