import pygame , pygame.locals

RED , GREY , LIGHT_GREY = ( 255 , 0 , 0 ), ( 154 , 154 , 147 ), ( 169 , 169 , 169 )

OFF , ON = 0 , 1

def get_grid ( orient = OFF ):

return [( j * 20 - 4 , i * 20 - 4 , orient ) for i in range ( 1 , 6 ) for j in range ( 1 , 8 )]

class Board ( object ):

""" Simulates a display grid of LEDs """

def __init__ ( self , title , size = ( 152 , 110 )):

pygame . init ()

self . window = pygame . display . set_mode ( size )

pygame . display . set_caption ( title )

self . window . fill ( LIGHT_GREY )

self . screen = pygame . display . get_surface ()

self . grid = get_grid ()

self . update_grid ()

def update_grid ( self ):

for coords in self . grid :

pygame . draw . circle ( self . window , [ GREY , RED ][ coords [ 2 ]], coords [ 0 : 2 ], 8 , 0 )

pygame . display . update ()

def clear ( self ):

self . grid = get_grid ()

self . update_grid ()

def fill ( self ):

self . grid = get_grid ( ON )

self . update_grid ()

def dot_flip ( self , coords ):

loc = coords [ 0 ] * 7 + coords [ 1 ]

if coords [ 0 ] < 5 and coords [ 1 ] < 7 and 0 <= loc < len ( self . grid ):

self . grid [ loc ] = self . grid [ loc ][ 0 : 2 ] + ([ ON , OFF ][ self . grid [ loc ][ 2 ]],)