I am having trouble with a function in my reversi logic code. The function is the isLegalMove I am asked to "Return a Boolean indicating if the current player can place their chip in the square at position (row, col). Both row and col must be valid indices​." So I came up with my code below, however a move I make in the game says Error: not a legal move. Please help!
Code: from ezarrays import Array2D # Values representing the color of the chips on the board. EMPTY = 0 BLACK = 1 WHITE = 2 class ReversiGameLogic : # Creates an instance of Reversi game logic with the board correctly # initialized and the current player set to black. def __init__(self) : # Use a 2-D array to represent the board. self._gameBoard = Array2D(8, 8) self._gameBoard.clear(EMPTY) # Set the initial configuration of the board. self._gameBoard[4,3] = BLACK self._gameBoard[3,4] = BLACK self._gameBoard[3,3] = WHITE self._gameBoard[4,4] = WHITE # Maintain the number of the current player. self._currentPlayer = BLACK # Keep track of the number of each players chips. self._numBlackChips = 2 self._numWhiteChips = 2 # A flag that is set when the game is over. That is, when there are # no empty squares on the board or neither player can make a move. self._gameOver = False # Returns a boolean indicating whether the game is over. def isOver(self) : isOver = 0 for i in range(8) : for j in range(8) : if self._gameBoard[i, j] != 0 : isOver + 1 if isOver == 64 : self._gameOver = True return True else: return False # Returns the player number of the current player. def whoseTurn(self) : if self._currentPlayer == 1: return 1 else: self._curentPlayer == 2 return 2 # Returns the number of chips on the board for the given player. def numChips(self, player) : chipCounter = 0 if player == 1 : for i in range(8) : for j in range(8) : if self._gameBoard[i, j] == BLACK : chipCounter = chipCounter + 1 else : for i in range(8) : for j in range(8) : if self._gameBoard[i, j] == WHITE : chipCounter = chipCounter + 1 return chipCounter # Returns the number of open squares on the board. def numOpenSquares(self) : numOpenSquares = 0 for i in range(8) : for j in range(8) : if self._gameBoard[i, j] == EMPTY : numOpenSquares = numOpenSquares + 1 return numOpenSquares # Returns the player number of the winner or 0 if it's a draw. def getWinner( self ): player1 = 0 player2 = 0 if self._gameOver is True : for i in range(8) : for j in range(8) : if self._gameBoard[i, j] == BLACK : player1 = player1 + 1 else : player2 = player2 + 1 if player1 > player2 : return 1 if player2 > player1 : return 2 else: return 0 # Returns the def isLegalMove( self, row, col): if row < 8 and col < 8: if self._gameBoard[row,col] != EMPTY: return True else: return False # Returns the player number whose chip occupies the given square. def occupiedBy(self, row, col): if self._gameBoard[row, col] == BLACK : return 1 if self._gameBoard[row, col] == WHITE : return 2 else: return 0 # Performs an actual move in the game. That is the current player places # one of his chips in the square at position (row, col). def makeMove( row, col ): if isALineOfAttack(row, col, 1, 1) is True : if self._currentPlayer == 1 : self._gameBoard[row, col] = BLACK else : self._gameBoard[row, col] = WHITE # Helper method that returns a Boolean indicating if there is a line of # attack from cell (row, col) in the direction offset given by rowInc # and colInc. The direction offsets should be, 0, 1, or -1. def _isALineOfAttack(self, row, col, rowInc, colInc) : row += rowInc col += colInc # The next cell in the line must contain the opponents chip. if self.occupiedBy(row, col) == self._currentPlayer : return False # Traverse along the line and determine if it's a line of attack. while row >= 0 and col >= 0 and row < 8 and col < 8 : if self.occupiedBy(row, col) == self._currentPlayer : return True elif self.occupiedBy(row, col) == EMPTY : return False else : row += rowInc col += colInc if row < 0 or row > 7 or col < 0 or col > 7 : return False return False _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor