def get_moves(self): """ Returns a list of all possible moves from this piece.""" row_offset = 1 if self.color == label.RED else -1 left_offset = -1 right_offset = 1 moves = [] # Try advance if self.state.check_cell(self.pos.row + row_offset, self.pos.col) == label.BLANK: moves.append( Move(self, Position(self.pos.row + row_offset, self.pos.col))) # Left attack if self.state.check_cell(self.pos.row + row_offset, self.pos.col + left_offset) == \ label.get_opposite(self.color): moves.append( Move( self, Position(self.pos.row + row_offset, self.pos.col + left_offset))) # Right attack if self.state.check_cell(self.pos.row + row_offset, self.pos.col + right_offset) == \ label.get_opposite(self.color): moves.append( Move( self, Position(self.pos.row + row_offset, self.pos.col + right_offset))) return moves
def check_gameover(self): """Checks if the gameover state has occurred.""" # Check no piece end red = 0 blue = 0 for i, j in itertools.product(range(3), range(self.width)): if self.board[i][j] == label.RED: red += 1 elif self.board[i][j] == label.BLUE: blue += 1 if red == 0: self.winner = label.BLUE return True elif blue == 0: self.winner = label.RED return True # Check RED end line for i in range(self.width): if self.board[2][i] == label.RED: self.winner = label.RED return True # Check BLUE end line for i in range(self.width): if self.board[0][i] == label.BLUE: self.winner = label.BLUE return True # No moves available if len(self.get_available_moves()) == 0: self.winner = label.get_opposite(self.turn) return True
def get_moves(self): """ Returns a list of all possible moves from this piece.""" row_offset = 1 if self.color == label.RED else -1 left_offset = -1 right_offset = 1 moves = [] # Try advance if self.state.check_cell(self.pos.row + row_offset, self.pos.col) == label.BLANK: moves.append(Move(self, Position(self.pos.row + row_offset, self.pos.col))) # Left attack if self.state.check_cell(self.pos.row + row_offset, self.pos.col + left_offset) == \ label.get_opposite(self.color): moves.append(Move(self, Position(self.pos.row + row_offset, self.pos.col + left_offset))) # Right attack if self.state.check_cell(self.pos.row + row_offset, self.pos.col + right_offset) == \ label.get_opposite(self.color): moves.append(Move(self, Position(self.pos.row + row_offset, self.pos.col + right_offset))) return moves
def alternate_turn(self): """Alternates the player turn on the board.""" self.turn = label.get_opposite(self.turn)