def _update(self, frame_no):
        if self._signal:
            start_x = int((self._screen.width - self._signal.max_width) // 2)
            start_y = int((self._screen.height - self._signal.max_height) // 2)
            text, colours = self._signal.rendered_text
        else:
            start_x = start_y = 0
            text, colours = "", []

        for y in range(self._screen.height):
            if self._strength < 1.0:
                offset = randint(0, int(6 - 6 * self._strength))
            else:
                offset = 0
            for x in range(self._screen.width):
                ix = x - start_x
                iy = y - start_y
                if (self._signal and random() <= self._strength and
                        x >= start_x and y >= start_y and
                        iy < len(text) and ix + offset < len(text[iy])):
                    self._screen.paint(text[iy][ix + offset],
                                       x, y,
                                       colour_map=[colours[iy][ix]])
                else:
                    if random() < 0.2:
                        self._screen.print_at(chr(randint(33, 126)), x, y)

        # Tune the signal
        self._strength += self._step
        if self._strength >= 1.25 or self._strength <= -0.5:
            self._step = -self._step
dataset/ETHPy150Open peterbrittain/asciimatics/asciimatics/effects.py/RandomNoise._update/original