import pygame, time, sys, random
from pygame.locals import *

numrows = 16
ledsrow = 18
numleds = numrows * ledsrow

pygame.init()
screen = pygame.display.set_mode ((64+numrows*24,32+64+ledsrow*24),0,32)
screen.fill ((255,255,255))
pygame.display.set_caption ('NeoPixel Matrix')

colorarray = []

for i in range (numleds):
    colorarray.append (i)
    colorarray[i] = (16,16,16)

class WS2812:
    def __init__(self,color,screen):
        self.c = color
        self.screen = screen
        self.draw()

    def draw(self):
        for x in range (numrows):
            for y in range (ledsrow):
                led = pygame.draw.rect (screen,self.c[x*ledsrow+y],(32+x*24,16+ledsrow*24-y*24,24-8,24-8))
        pygame.display.update ()

    def color(self,color):
        self.c = color
        self.draw ()

led = WS2812 (colorarray,screen)

for i in range (numleds):
    colorarray[i] = (random.randrange(0,255,1),random.randrange(0,255,1),random.randrange(0,255,1))
    led.color (colorarray)

for i in range (100):
    colortemp = colorarray[0]
    for j in range (numleds):
        colorarray[j] = colorarray[(j+1)%numleds]
    colorarray[numleds-1] = colortemp
    led.color (colorarray)
    time.sleep(1)

    pygame.image.save(screen, "screenshot"+str(i)+".png")

    for event in pygame.event.get ():
        if event.type == QUIT or (event.type == KEYUP and event.key == K_ESCAPE):
            pygame.quit ()
            sys.exit ()
