    def __init__(self, chars, x, y, dx, dy, colours, life_time, move,
                 next_colour=None, next_char=None, parm=None,
                 on_create=None, on_each=None, on_destroy=None):
        """
        :param chars: String of characters to use for the particle.
        :param x: The initial horizontal position of the particle.
        :param y: The initial vertical position of the particle.
        :param dx: The initial horizontal velocity of the particle.
        :param dy: The initial vertical velocity of the particle.
        :param colours: A list of colour tuples to use for the particle.
        :param life_time: The life time of the particle.
        :param move: A function which returns the next location of the particle.
        :param next_colour: An optional function to return the next colour for
            the particle.  Defaults to a linear progression of `chars`.
        :param next_char: An optional function to return the next character for
            the particle.  Defaults to a linear progression of `colours`.
        :param parm: An optional parameter for use within any of the
        :param on_create: An optional function to spawn new particles when this
            particle first is created.
        :param on_each: An optional function to spawn new particles for every
            frame of this particle (other than creation/destruction).
        :param on_destroy: An optional function to spawn new particles when this
            particle is destroyed.
        """
        self.chars = chars
        self.x = x
        self.y = y
        self.dx = dx
        self.dy = dy
        self.colours = colours
        self.time = 0
        self.life_time = life_time

        self._move = move
        self._next_colour = (
            self._default_next_colour if next_colour is None else next_colour)
        self._next_char = (
            self._default_next_char if next_char is None else next_char)
        self._last = None
        self.parm = parm
        self._on_create = on_create
        self._on_each = on_each
        self._on_destroy = on_destroy
:param chars: String of characters to use for the particle.
:param x: The initial horizontal position of the particle.
:param y: The initial vertical position of the particle.
:param dx: The initial horizontal velocity of the particle.
:param dy: The initial vertical velocity of the particle.
:param colours: A list of colour tuples to use for the particle.
:param life_time: The life time of the particle.
:param move: A function which returns the next location of the particle.
:param next_colour: An optional function to return the next colour for
the particle.  Defaults to a linear progression of `chars`.
:param next_char: An optional function to return the next character for
the particle.  Defaults to a linear progression of `colours`.
:param parm: An optional parameter for use within any of the
:param on_create: An optional function to spawn new particles when this
particle first is created.
:param on_each: An optional function to spawn new particles for every
frame of this particle (other than creation/destruction).
:param on_destroy: An optional function to spawn new particles when this
particle is destroyed.
asciimatics/particles.py