def dibujarAutomataEscarabajo(x0,y0):
     x0,y0 = reducirConModulo(x0, y0)
     for y in range(y0-6,y0+7):
        for x in range(x0-6,x0+7):
            cambiarEstado(x, y, 0) 
     dibujarAutomataPalo3(x0 -3, y0 +1, False)
     dibujarAutomataPalo3(x0 -3, y0 -1, False)
     dibujarAutomataPalo3(x0 +3, y0 +1, False)
     dibujarAutomataPalo3(x0 +3, y0 -1, False)
     
     dibujarAutomataPalo3(x0 -1, y0 +3)
     dibujarAutomataPalo3(x0 -1, y0 -3)
     dibujarAutomataPalo3(x0 +1, y0 +3)
     dibujarAutomataPalo3(x0 +1, y0 -3)
     
     
     dibujarAutomataPalo3(x0 -3, y0 -6, False)
     dibujarAutomataPalo3(x0 -3, y0 +6, False)
     dibujarAutomataPalo3(x0 +3, y0 -6, False)
     dibujarAutomataPalo3(x0 +3, y0 +6, False)
     
     dibujarAutomataPalo3(x0 -6, y0 -3)
     dibujarAutomataPalo3(x0 -6, y0 +3)
     dibujarAutomataPalo3(x0 +6, y0 -3)
     dibujarAutomataPalo3(x0 +6, y0 +3)
     pass
def dibujarAutomataGeneradorDeslizadores(x0, y0, NumeroCuadranteAlQueApunta):
    x0, y0 = reducirConModulo(x0, y0)
    ejeY, ejeX = 21, 6

    puntosVivos = [
        (0, 5), (0, 6), (1, 5), (1, 6), (5, 3), (5, 4), (10, 2), (10, 3),
        (10, 7), (10, 8), (11, 3), (11, 4), (11, 5), (11, 6), (11, 7), (12, 3),
        (12, 4), (12, 6), (12, 7), (13, 3), (13, 4), (13, 6), (13, 7), (14, 4),
        (14, 5), (14, 6), (22, 3), (23, 2), (23, 3), (23, 4), (24, 1), (24, 2),
        (24, 3), (24, 4), (24, 5), (25, 0), (25, 2), (25, 4), (25, 6), (26, 0),
        (26, 1), (26, 5), (26, 6), (29, 3), (30, 2), (30, 4), (31, 2), (31, 4),
        (32, 3), (33, 3), (33, 4), (34, 3), (34, 4), (35, 3), (35, 4)
    ]

    if NumeroCuadranteAlQueApunta == 3:
        puntosVivos = simetria(puntosVivos, ejeY, ejeX, True, False)

    elif NumeroCuadranteAlQueApunta == 1:
        puntosVivos = simetria(puntosVivos, ejeY, ejeX, False, True)

    elif NumeroCuadranteAlQueApunta == 2:
        puntosVivos = simetria(puntosVivos, ejeY, ejeX, True, True)

    else:
        puntosVivos = simetria(puntosVivos, ejeY, ejeX, False, False)

    for x, y in puntosVivos:
        cambiarEstado(x0 + x, y0 + y, 1)
    pass
def dibujarAutomataPalo10(x0, y0, vertical = True):
    x0,y0 = reducirConModulo(x0, y0)
    for i in range(0,10):
        if vertical:
            cambiarEstado(x0, y0 +i, 1)
        else:
            cambiarEstado(x0 +i, y0, 1)
    pass   
def dibujar4AutomatasMoviles(x0, y0):
    x0, y0 = reducirConModulo(x0, y0)
    for y in range(y0 - 4, y0 + 5):
        for x in range(x0 - 4, x0 + 5):
            cambiarEstado(x, y, 0)

    dibujarAutomataMovilArribaIzda(x0 - 3, y0 - 3)
    dibujarAutomataMovilArribaDcha(x0 + 3, y0 - 3)
    dibujarAutomataMovilAbajoIdza(x0 - 3, y0 + 3)
    dibujarAutomataMovilAbajoDcha(x0 + 3, y0 + 3)
    pass
def dibujarCuadrado(x0, y0):
    x0, y0 = reducirConModulo(x0, y0)
    cambiarEstado(x0, y0, 1)
    cambiarEstado(x0 + 1, y0, 1)
    cambiarEstado(x0 + 1, y0 + 1, 1)
    cambiarEstado(x0, y0 + 1, 1)
    pass
def dibujarCuadradoInmovilGigante(x0, y0):
    x0, y0 = reducirConModulo(x0, y0)
    for y in range(y0 - 7, y0 + 8):
        for x in range(x0 - 7, x0 + 8):
            cambiarEstado(x, y, 0)

    dibujarAutoomatainvomil8(x0 - 2, y0 - 2)
    dibujarAutoomatainvomil8(x0 + 2, y0 - 2, True)
    dibujarAutoomatainvomil8(x0 + 2, y0 + 2)
    dibujarAutoomatainvomil8(x0 - 2, y0 + 2, True)

    dibujarCuadrado(x0 - 6, y0 - 2)
    dibujarCuadrado(x0 - 6, y0 + 1)
    dibujarCuadrado(x0 + 5, y0 - 2)
    dibujarCuadrado(x0 + 5, y0 + 1)

    dibujarCuadrado(x0 - 2, y0 - 6)
    dibujarCuadrado(x0 - 2, y0 + 5)
    dibujarCuadrado(x0 + 1, y0 - 6)
    dibujarCuadrado(x0 + 1, y0 + 5)
    pass
def dibujarAutoomatainvomil8(x0, y0, reversed=False):
    x0, y0 = reducirConModulo(x0, y0)
    for y in range(y0 - 1, y0 + 2):
        for x in range(x0 - 1, x0 + 2):
            cambiarEstado(x, y, 0)

    cambiarEstado(x0 + 1, y0, 1)
    cambiarEstado(x0 - 1, y0, 1)
    cambiarEstado(x0, y0 + 1, 1)
    cambiarEstado(x0, y0 - 1, 1)

    if not reversed:
        cambiarEstado(x0 + 1, y0 - 1, 1)
        cambiarEstado(x0 - 1, y0 + 1, 1)
    else:
        cambiarEstado(x0 + 1, y0 + 1, 1)
        cambiarEstado(x0 - 1, y0 - 1, 1)
    pass
def dibujarCruz(x0, y0):
    for y in range(y0 - 4, y0 + 5):
        for x in range(x0 - 4, x0 + 5):
            cambiarEstado(x, y, 0)
    cambiarEstado(x0 - 2, y0 + 1, 1)
    cambiarEstado(x0 - 2, y0 - 1, 1)
    cambiarEstado(x0 - 3, y0 + 1, 1)
    cambiarEstado(x0 - 3, y0 - 1, 1)
    cambiarEstado(x0 - 4, y0, 1)

    cambiarEstado(x0 + 2, y0 + 1, 1)
    cambiarEstado(x0 + 2, y0 - 1, 1)
    cambiarEstado(x0 + 3, y0 + 1, 1)
    cambiarEstado(x0 + 3, y0 - 1, 1)
    cambiarEstado(x0 + 4, y0, 1)

    cambiarEstado(x0 - 1, y0 + 2, 1)
    cambiarEstado(x0 - 1, y0 + 3, 1)
    cambiarEstado(x0, y0 + 4, 1)
    cambiarEstado(x0 + 1, y0 + 2, 1)
    cambiarEstado(x0 + 1, y0 + 3, 1)

    cambiarEstado(x0 - 1, y0 - 2, 1)
    cambiarEstado(x0 - 1, y0 - 3, 1)
    cambiarEstado(x0, y0 - 4, 1)
    cambiarEstado(x0 + 1, y0 - 2, 1)
    cambiarEstado(x0 + 1, y0 - 3, 1)
    pass
def dibujarBarco(x0, y0, NumeroCuadranteAlQueApunta):
    x0, y0 = reducirConModulo(x0, y0)
    for y in range(y0 - 1, y0 + 2):
        for x in range(x0 - 1, x0 + 2):
            cambiarEstado(x, y, 0)
    cambiarEstado(x0 + 1, y0 + 1, 1)
    cambiarEstado(x0 + 1, y0 - 1, 1)
    cambiarEstado(x0 - 1, y0 - 1, 1)
    cambiarEstado(x0 - 1, y0 + 1, 1)
    if NumeroCuadranteAlQueApunta == 1:
        cambiarEstado(x0 + 1, y0 - 1, 1)
    elif NumeroCuadranteAlQueApunta == 3:
        cambiarEstado(x0 - 1, y0 + 1, 1)
    elif NumeroCuadranteAlQueApunta == 4:
        cambiarEstado(x0 + 1, y0 + 1, 1)
    else:
        cambiarEstado(x0 - 1, y0 - 1, 1)
    pass
def dibujarAutomataMovilArribaIzda(x0, y0):
    x0, y0 = reducirConModulo(x0, y0)
    for y in range(y0 - 1, y0 + 2):
        for x in range(x0 - 1, x0 + 2):
            cambiarEstado(x, y, 0)
    cambiarEstado(x0 - 1, y0 - 1, 1)
    cambiarEstado(x0, y0 - 1, 1)
    cambiarEstado(x0 + 1, y0 - 1, 1)
    cambiarEstado(x0 - 1, y0, 1)
    cambiarEstado(x0, y0 + 1, 1)
    pass
def dibujarAutomataMovilVertical(x0, y0, reverse=False):
    x0, y0 = reducirConModulo(x0, y0)
    for y in range(y0, y0 + 5):
        for x in range(x0, x0 + 4):
            cambiarEstado(x, y, 0)
    cambiarEstado(x0, y0 + 2, 1)
    cambiarEstado(x0 + 1, y0 + 1, 1)
    cambiarEstado(x0 + 1, y0 + 2, 1)
    cambiarEstado(x0 + 1, y0 + 3, 1)
    cambiarEstado(x0 + 2, y0, 1)
    cambiarEstado(x0 + 2, y0 + 1, 1)
    cambiarEstado(x0 + 2, y0 + 3, 1)
    cambiarEstado(x0 + 2, y0 + 4, 1)
    cambiarEstado(x0 + 3, y0 + 2, 1)

    if not reverse:
        cambiarEstado(x0, y0 + 3, 1)
        cambiarEstado(x0 + 1, y0 + 4, 1)
        cambiarEstado(x0 + 3, y0 + 1, 1)
    else:
        cambiarEstado(x0, y0 + 1, 1)
        cambiarEstado(x0 + 1, y0, 1)
        cambiarEstado(x0 + 3, y0 + 3, 1)
    pass
def dibujarAutomataMovilHorizontalGrande(x0, y0, reverse=False):
    x0, y0 = reducirConModulo(x0, y0)
    for y in range(y0, y0 + 4):
        for x in range(x0, x0 + 6):
            cambiarEstado(x0 + 5, y, 0)
    dibujarAutomataMovilHorizontal(x0 + 1, y0, reverse)
    if not reverse:
        cambiarEstado(x0 + 1, y0, 1)
        cambiarEstado(x0, y0 + 1, 1)
        cambiarEstado(x0, y0 + 2, 1)
    else:
        cambiarEstado(x0 + 5, y0, 1)
        cambiarEstado(x0 + 6, y0 + 1, 1)
        cambiarEstado(x0 + 6, y0 + 2, 1)
def dibujarAutomataRana(x0,y0,reverse=False):
    x0,y0 = reducirConModulo(x0, y0)
    for y in range(y0-3, y0+4):
        for x in range(x0-2, x0+3):
            cambiarEstado(x, y, 0)
    
    cambiarEstado(x0, y0 -2, 1)
    cambiarEstado(x0, y0 +2, 1)
    
    if not reverse:
        cambiarEstado(x0 +1, y0 -1, 1)
        cambiarEstado(x0 +1, y0   , 1)
        cambiarEstado(x0 +1, y0 +1, 1)
        cambiarEstado(x0 +2, y0 -1, 1)
        cambiarEstado(x0 +2, y0   , 1)
        cambiarEstado(x0 +2, y0 +1, 1)
        
        
        cambiarEstado(x0 -2, y0 -2, 1)
        cambiarEstado(x0 -2, y0 -3, 1)
        
        cambiarEstado(x0 -2, y0 +2, 1)
        cambiarEstado(x0 -2, y0 +3, 1)
    else:
        cambiarEstado(x0 -1, y0 -1, 1)
        cambiarEstado(x0 -1, y0   , 1)
        cambiarEstado(x0 -1, y0 +1, 1)
        cambiarEstado(x0 -2, y0 -1, 1)
        cambiarEstado(x0 -2, y0   , 1)
        cambiarEstado(x0 -2, y0 +1, 1)
        
        
        cambiarEstado(x0 +2, y0 -2, 1)
        cambiarEstado(x0 +2, y0 -3, 1)
        
        cambiarEstado(x0 +2, y0 +2, 1)
        cambiarEstado(x0 +2, y0 +3, 1)
    pass
def dibujarAutomataPalo3(x0,y0,vertical=True):
    x0,y0 = reducirConModulo(x0, y0)
    for y in range(y0-1,y0+2):
        for x in range(x0-1,x0+2):
            cambiarEstado(x, y, 0)
    cambiarEstado(x0, y0, 1)
    if not vertical:
        cambiarEstado(x0+1, y0, 1)
        cambiarEstado(x0-1, y0, 1)
    else:
        cambiarEstado(x0, y0+1, 1)
        cambiarEstado(x0, y0-1, 1)
    pass
def dibujarTortuga(x0, y0, reverse = False):
    x0,y0 = reducirConModulo(x0, y0)
    for y in range(y0, y0 +6):
        for x in range(x0, x0 +7):
            cambiarEstado(x, y, 0)
    cambiarEstado(x0 +2, y0 +1, 1)
    cambiarEstado(x0 +2, y0 +2, 1)
    cambiarEstado(x0 +2, y0 +3, 1)
    cambiarEstado(x0 +2, y0 +4, 1)
    
    cambiarEstado(x0 +4, y0 +1, 1)
    cambiarEstado(x0 +4, y0 +2, 1)
    cambiarEstado(x0 +4, y0 +3, 1)
    cambiarEstado(x0 +4, y0 +4, 1)
    
    cambiarEstado(x0 +1, y0   , 1)
    cambiarEstado(x0 +1, y0 +5, 1)
    
    cambiarEstado(x0 +5, y0   , 1)
    cambiarEstado(x0 +5, y0 +5, 1)
    if not reverse:
        cambiarEstado(x0   , y0 +3, 1)
        cambiarEstado(x0   , y0 +4, 1)
        cambiarEstado(x0   , y0 +5, 1)
        cambiarEstado(x0 +6, y0 +3, 1)
        cambiarEstado(x0 +6, y0 +4, 1)
        cambiarEstado(x0 +6, y0 +5, 1)
        
        cambiarEstado(x0 +1, y0 +1, 1)
        cambiarEstado(x0 +2, y0   , 1)
        cambiarEstado(x0 +4, y0   , 1)
        cambiarEstado(x0 +5, y0 +1, 1)
    else:
        cambiarEstado(x0   , y0   , 1)
        cambiarEstado(x0   , y0 +1, 1)
        cambiarEstado(x0   , y0 +2, 1)
        cambiarEstado(x0 +6, y0   , 1)
        cambiarEstado(x0 +6, y0 +1, 1)
        cambiarEstado(x0 +6, y0 +2, 1)
        
        cambiarEstado(x0 +1, y0 +4, 1)
        cambiarEstado(x0 +2, y0 +5, 1)
        cambiarEstado(x0 +4, y0 +5, 1)
        cambiarEstado(x0 +5, y0 +4, 1)
    pass
        
def dibujarNoria(x0,y0):
    x0,y0 = reducirConModulo(x0, y0)
    for y in range(y0, y0 +8):
        for x in range(x0, x0 +8):
            cambiarEstado(x, y, 0)
            
    cambiarEstado(x0   , y0 +4, 1)
    cambiarEstado(x0 +1, y0 +4, 1)
    
    cambiarEstado(x0 +3, y0   , 1)
    cambiarEstado(x0 +3, y0 +1, 1)
    
    cambiarEstado(x0 +6, y0 +3, 1)
    cambiarEstado(x0 +7, y0 +3, 1)
    
    cambiarEstado(x0 +4, y0 +6, 1)
    cambiarEstado(x0 +4, y0 +7, 1)
    
    cambiarEstado(x0 +1, y0 +2, 1)
    
    cambiarEstado(x0 +2, y0 +6, 1)
    
    cambiarEstado(x0 +5, y0 +1, 1)
    
    cambiarEstado(x0 +6, y0 +5, 1)
    pass