Tecnologia vestible

Per començar Elements d'entrada Programació CircuitPython   Recursos CITCEA
Elements no electrònics Elements de sortida Programació Arduino    
Projectes Elements de control Dades pràctiques   Inici

Tic Tac Case

Es tracta d'un estoig, com els típics per al material escolar, que incorpora un joc del tres en ratlla. El taulell de joc es mostra en una matriu de 8 x 8 NeoPixel i hi ha dos polsadors tàctils per a la interacció amb l'usuari. Cada posició del tauler de joc són quatre NeoPixel i hi ha dues línies de NeoPixel que dibuixen les línies del tauler. El programa permet jugar dues persones o una contra la màquina.

logo

La llista de materials principals és la següent:

1   Placa Circuit Playground Express

1   NeoPixel Matrix

1   Tros de teixit conductor

Les fotografies següents mostren el resultat final.

Tic Tac Case

Tic Tac Case

Tic Tac Case

A continuació tenim el llistat del programa:

import board
import neopixel
import time
import digitalio
import random
import touchio
pixels = neopixel.NeoPixel(board.A3, 64, brightness=0.03,auto_write=False)  # 0.008 es el minimo para video.
touch1 = touchio.TouchIn(board.A1)
touch7 = touchio.TouchIn(board.A7)
#funciones
def set_pixels(a, b):
    pixels[a]= pixels[a+1]= pixels[a+8]= pixels[a+9] = b
def IA1(lista):
    for i in l:
        boardcopy = lista[:]
        boardcopy = boardcopy + [i]
        for elem in lg:
            if elem[0] in boardcopy:
                if elem[1] in boardcopy:
                    if elem[2] in boardcopy:
                        global k
                        k=i
                        return True
def Ok(i):    #usada en la AI para ahorrar memoria
    global l
    global j
    global l2
    pixels[i]= pixels[i+1]= pixels[i+8]= pixels[i+9] = color
    l2.append(i)
    posiOk=l.index(i)
    l.pop(posiOk)
    if posiOk>= len(l):
        i=l[0]
        j=i
    else:
        j=l[posiOk]
def guanyador():    #Victoria
    global juegonuevo
    if lactual==l1:
        color=cdef[0]
    else:
        color=cdef[1]
    for elem in lg:
        if elem[0] in lactual:
            if elem[1] in lactual:
                if elem[2] in lactual:
                    while juegonuevo<=5:
                        set_pixels(elem[0], color)
                        set_pixels(elem[1], color)
                        set_pixels(elem[2], color)
                        pixels.write()
                        time.sleep(0.4)
                        set_pixels(elem[0], (0, 0, 0))
                        set_pixels(elem[1], (0, 0, 0))
                        set_pixels(elem[2], (0, 0, 0))
                        pixels.write()
                        time.sleep(0.4)
                        juegonuevo= juegonuevo +1
                    break
while True:
    #variables escoger color
    cdef=[]
    jcdef=0
    jc=0
    jsq=0
    csq=[2, 5, 16, 40]
    r=(255, 0, 0)
    g=(0, 255, 0)
    b=(0, 0, 255)
    a=(255, 255, 0)
    IA=(0, 255, 255)
    colores=[r, b, a, g]
    jsqq=[0, 1, 2, 3, 4, 5, 6, 7, 8, 15, 16, 23, 24, 31, 32, 39, 40, 47, 48, 55, 56, 57, 58, 59, 60, 61, 62, 63]
    #variables partida
    l=[0, 3, 6, 24, 27, 30, 48, 51, 54]
    lg=[[0, 3, 6], [24, 27, 30], [48, 51, 54], [0, 24, 48], [3, 27, 51], [6, 30, 54], [0, 27, 54], [6, 27, 48]] #lista de posibles combinaciones ganadoras
    l1=[]
    l2=[]
    lactual=[]
    j=0
    posición=0
    k=0
    juegonuevo=0
    #Programa Escoger color
    while juegonuevo==0:
        while jcdef<=1:    #Elección de colores
            if touch1.value:
                jc=jc+1
            if jc>=len(colores):
                jc=0
            pixels.fill(colores[jc])
            for elem in jsqq:
                pixels[elem]= (150, 150, 150)
            pixels.write()
            time.sleep(0.4)
            if touch7.value:
                cdef.append(colores[jc])
                pixels.fill((0, 0, 0))
                for elem in jsqq:
                    pixels[elem]= (150, 150, 150)
                pixels.write()
                time.sleep(0.05)
                pixels.fill(colores[jc])
                for elem in jsqq:
                    pixels[elem]= (150, 150, 150)
                pixels.write()
                time.sleep(0.05)
                pixels.fill((0, 0, 0))
                pixels.write()
                time.sleep(0.05)
                pixels.fill(colores[jc])
                pixels.write()
                time.sleep(0.05)
                colores.pop(jc)
                colores= colores+ [IA]#para la segunda ronda
                jcdef=jcdef+1
        if jcdef==2:    #para que no quede todo del color escogido por el último jugador, y empiece en blanco la partida.
            pixels.fill((0, 0, 0))
            pixels.write()
            time.sleep(0.5)
            color=cdef[0]
            while jsq<8:    # delimita la cuadrilla
                jsq=jsq+1
                pixels[csq[0]]= pixels[csq[1]]= pixels[csq[2]]= pixels[csq[3]] = (150, 150, 150)
                pixels.write()
                time.sleep(0.05)
                csq=[csq[0]+8, csq[1]+8, csq[2]+1, csq[3]+1]
            jcdef=3
        # partida
        set_pixels(j, (0, 0, 0))
        pixels.write()
        time.sleep(0.5)
        set_pixels(j, color)
        pixels.write()
        time.sleep(0.5)
        if touch1.value:
            set_pixels(j, (0, 0, 0))
            pixels.write()
            posición= posición +1
            if posición>= len(l):
                posición=0
            j= l[posición]
        if touch7.value:
            set_pixels(j, color)
            l.pop(l.index(j))    #posición será igual
            if color==cdef[0]:
                l1.append(j)
                lactual=l1
            if color==cdef[1]:
                l2.append(j)
                lactual=l2    #se crea con el proposito de compararla en el for del siguiente bucle a la lista de opciones ganadoras
            if posición>= len(l):
                posición=0
            if len(l)>0:    #si no, no llega a entrar en el empate ya que se necesita que len(l)==0
                j= l[posición]
            if len(l)%2==0:
                color=cdef[1]
            else:
                color=cdef[0]
            guanyador()
        while len(l) ==0 and juegonuevo<5:    #Empate
            for elem in l1:
                pixels[elem]= pixels[elem+1]= pixels[elem+8]= pixels[elem+9] = cdef[0]
            for elem in l2:
                pixels[elem]= pixels[elem+1]= pixels[elem+8]= pixels[elem+9] = cdef[1]
            pixels.write()
            time.sleep(0.4)
            for elem in l1:
                pixels[elem]= pixels[elem+1]= pixels[elem+8]= pixels[elem+9] = (0, 0, 0)
            for elem in l2:
                pixels[elem]= pixels[elem+1]= pixels[elem+8]= pixels[elem+9] = (0, 0, 0)
            pixels.write()
            time.sleep(0.4)
            juegonuevo=juegonuevo + 1
        if color == IA and juegonuevo==0:    #IA
            if IA1(l2):
                Ok(k)
            elif IA1(l1):
                Ok(k)
            else:
                i=random.choice(l)
                Ok(i)
            lactual=l2
            guanyador()
            color=cdef[0]

 

 

 

En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.