| 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 |
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.

La llista de materials principals és la següent:
1 Placa Circuit Playground Express
Les fotografies següents mostren el resultat final.



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.

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