Programació | Gràfics | Recursos CITCEA | ||
Tutorial | Exemples | Projectes | Inici |
Aquest programa és molt similar al del tres en línia però hi hem afegit que el jugador que tira en cada moment i el guanyador també es mostrin als NeoPixels.
import board import displayio import ugame import neopixel import time import adafruit_imageload
# Objecte per als NeoPixels cadena = neopixel.NeoPixel(board.NEOPIXEL, 5, brightness=0.1) # Creem un objecte per a la pantalla pant = board.DISPLAY # Carreguem el fitxer amb la imatge imatge, palette = adafruit_imageload.load("/tile.bmp", bitmap=displayio.Bitmap, palette=displayio.Palette) # Creem l'sprite del cursor curs = displayio.TileGrid(imatge, pixel_shader=palette, width = 1, height = 1, tile_width = 16, tile_height = 16) # Creem un mosaic per al taulell taulell = displayio.TileGrid(imatge, pixel_shader=palette, width = 10, height = 8, tile_width = 16, tile_height = 16) # Definim un grup per a l'sprite grup_curs = displayio.Group(scale=1) grup_curs.append(curs) # Definim un grup per al taulell grup_taulell = displayio.Group(scale=1) grup_taulell.append(taulell) # Creem un grup per englobar-ho tot grup = displayio.Group() # Afegim els grups anteriors al global grup.append(grup_taulell) # Primer el taulell grup.append(grup_curs) # Despres el cursor
# Fem que el fons del cursor sigui transparent palette.make_transparent(6) # Llista on guardarem les posicions de les fitxes # 0 = lliure 1 = vermell 2 = verd fitxes = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] # Llista que ens diu que es mostra a cada casella caselles = [[0, 1, 4, 5], [8, 9, 12, 13], [10, 11, 14, 15]] # Coordenades del cursor coord_curs = [1, 1] # Llegim el fitxer CSV fit = open("taulell.csv", "r") cont_fit = fit.read() fit.close()
# Funcio que comprova si ja hem acabat def comprova(): acabat = 0 suma = 0 for xa in range(0, 3): for ya in range(0, 3): if fitxes[xa][ya] > 0: suma += 1 if suma == 9: acabat = 3 for jg in range(1, 3): if fitxes[0][0] == jg and fitxes[0][1] == jg and fitxes[0][2] == jg: acabat = jg # Columna 1 if fitxes[1][0] == jg and fitxes[1][1] == jg and fitxes[1][2] == jg: acabat = jg # Columna 2 if fitxes[2][0] == jg and fitxes[2][1] == jg and fitxes[2][2] == jg: acabat = jg # Columna 3 if fitxes[0][0] == jg and fitxes[1][0] == jg and fitxes[2][0] == jg: acabat = jg # Filera 1 if fitxes[0][1] == jg and fitxes[1][1] == jg and fitxes[2][1] == jg: acabat = jg # Filera 1 if fitxes[0][2] == jg and fitxes[1][2] == jg and fitxes[2][2] == jg: acabat = jg # Filera 3 if fitxes[0][0] == jg and fitxes[1][1] == jg and fitxes[2][2] == jg: acabat = jg # Diagonal if fitxes[2][0] == jg and fitxes[1][1] == jg and fitxes[0][2] == jg: acabat = jg # Diagonal return acabat # Fi de la funcio # Funcio que situa el cursor def posa_cursor(): cc = [0, 0] for xa in range(0, 3): for ya in range(0, 3): if fitxes[xa][ya] == 0: cc[0] = xa cc[1] = ya return cc # Fi de la funcio # Funcio que dibuixa el taulell def dib_taulell(): for xa in range(0, 3): for ya in range(0, 3): f = fitxes[xa][ya] xx = 1 + 2 * xa yy = 1 + 2 * ya taulell[xx, yy] = caselles[f][0] taulell[xx+1, yy] = caselles[f][1] taulell[xx, yy+1] = caselles[f][2] taulell[xx+1, yy+1] = caselles[f][3] # Fi de la funcio # Funcio que inicialitza el taulell def ini_taulell(): # Descomposem el fitxer en una llista de linies llista_fit = cont_fit.replace("\r", "").split("\n") # Bucle que recorre totes les linies for vy in range(0, len(llista_fit)): # Creem una llista amb els elements de la linia linia = llista_fit[vy].split(",") # Bucle que recorre tots els elements de la linia for vx in range(0, len(linia)): # Dibuixem el taulell taulell[vx, vy] = int(linia[vx]) # Fi de la funcio
# Mostra el grup a la pantalla pant.show(grup) abans = 0 # Lectura anterior dels polsadors estat = 0 # De moment, estat inicial while True: if estat == 0: # Situacio inicial # Inicialitzem el taulell ini_taulell() # Apaga el NeoPixel cadena[0] = (0, 0, 0) # Fem invisible el cursor coord_curs = posa_cursor() curs[0] = 3 for xa in range(0, 3): for ya in range(0, 3): fitxes[xa][ya] = 0 while estat == 0: # Esperem que es premi Start boto = ugame.buttons.get_pressed() # Lectura actual dels polsadors # A cada if ens assegurem que el boto s'havia deixat anar if not abans & ugame.K_START and boto & ugame.K_START: estat = 1 # Inici del joc jugador = 1 # Primer el jugador vermell abans = boto if estat == 1: # Partida # Mostrem el cursor coord_curs = posa_cursor() curs[0] = 2 while estat == 1: # Indiquem qui juga taulell[8, 3] = caselles[jugador][0] taulell[9, 3] = caselles[jugador][1] taulell[8, 4] = caselles[jugador][2] taulell[9, 4] = caselles[jugador][3] if jugador == 1: cadena[0] = (255, 0, 0) if jugador == 2: cadena[0] = (0, 255, 0) # Mirem els polsadors boto = ugame.buttons.get_pressed() # Lectura actual dels polsadors # A cada if ens assegurem que el boto s'havia deixat anar if not abans & ugame.K_RIGHT and boto & ugame.K_RIGHT and coord_curs[0] < 2: coord_curs[0] += 1 if not abans & ugame.K_LEFT and boto & ugame.K_LEFT and coord_curs[0] > 0: coord_curs[0] -= 1 if not abans & ugame.K_DOWN and boto & ugame.K_DOWN and coord_curs[1] < 2: coord_curs[1] += 1 if not abans & ugame.K_UP and boto & ugame.K_UP and coord_curs[1] > 0: coord_curs[1] -= 1 if not abans & ugame.K_SELECT and boto & ugame.K_SELECT: if fitxes[coord_curs[0]][coord_curs[1]] == 0: fitxes[coord_curs[0]][coord_curs[1]] = jugador coord_curs = posa_cursor() jugador +=1 if jugador > 2: jugador = 1 else: coord_curs = posa_cursor() dib_taulell() guanya = comprova() if guanya > 0: estat = 2 abans = boto curs.x = 24 + 32 * coord_curs[0] curs.y = 24 + 32 * coord_curs[1] if estat == 2: # Fi partida curs[0] = 3 # Amaga el cursor jugador = guanya if guanya == 3: jugador = 0 taulell[8, 3] = 7 taulell[9, 3] = 7 taulell[8, 4] = 7 taulell[9, 4] = 7 taulell[8, 1] = caselles[jugador][0] taulell[9, 1] = caselles[jugador][1] taulell[8, 2] = caselles[jugador][2] taulell[9, 2] = caselles[jugador][3] taulell[8, 5] = caselles[jugador][0] taulell[9, 5] = caselles[jugador][1] taulell[8, 6] = caselles[jugador][2] taulell[9, 6] = caselles[jugador][3] for i in range(0, 5): if jugador == 0: cadena[0] = (0, 0, 255) if jugador == 1: cadena[0] = (255, 0, 0) if jugador == 2: cadena[0] = (0, 255, 0) time.sleep(0.2) cadena[0] = (0, 0, 0) time.sleep(0.2) while estat == 2: boto = ugame.buttons.get_pressed() # Lectura actual dels polsadors # A cada if ens assegurem que el boto s'havia deixat anar if not abans & ugame.K_START and boto & ugame.K_START: estat = 0 # Inici del joc abans = boto
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.