Programació | Gràfics | Recursos CITCEA | ||
Tutorial | Exemples | Projectes | Inici |
Aquest programa és bàsicament el del tres en línia amb NeoPixels però hi hem afegit alguns sons, en concret tres melodies que sonaran en moments concrets del joc. Hem canviat la forma de llegir els polsadors per evitar problemes de compatibilitat.
import audio_lib import audioio import digitalio import board import displayio import neopixel import time import adafruit_imageload from gamepadshift import GamePadShift
# Objecte per als NeoPixels cadena = neopixel.NeoPixel(board.NEOPIXEL, 5, brightness=0.1) # Configuracio de l'altaveu altaveu = digitalio.DigitalInOut(board.SPEAKER_ENABLE) altaveu.direction = digitalio.Direction.OUTPUT sons = audioio.AudioOut(board.SPEAKER) # Objecte per llegir els botons pad = GamePadShift(digitalio.DigitalInOut(board.BUTTON_CLOCK), digitalio.DigitalInOut(board.BUTTON_OUT), digitalio.DigitalInOut(board.BUTTON_LATCH)) # 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
# 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] # Melodies mel_inici = [262, 294, 330, 262] mel_error = [294, 294] mel_guanya = [349, 370, 330, 277, 415, 440, 392, 466, 494, 262, 294, 311] # Constants dels botons K_LEFT = 128 K_UP = 64 K_DOWN = 32 K_RIGHT = 16 K_SELECT = 8 K_START = 4 K_X = 2 K_O = 1
# Fem que el fons del cursor sigui transparent palette.make_transparent(6) # Llegim el fitxer CSV fit = open("taulell.csv", "r") cont_fit = fit.read() fit.close()
# Funcio que toca una melodia def toca_melodia(melod): altaveu.value = True for nota in melod: sinusoide = audio_lib.nota(nota, 1) sons.play(sinusoide, loop=True) time.sleep(0.1) sons.stop() altaveu.value = False # Fi de la funcio # 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 = pad.get_pressed() # Lectura actual dels polsadors # A cada if ens assegurem que el boto s'havia deixat anar if not abans & K_START and boto & K_START: estat = 1 # Inici del joc jugador = 1 # Primer el jugador vermell abans = boto if estat == 1: # Partida # Toquem una melodia toca_melodia(mel_inici) # 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 = pad.get_pressed() # Lectura actual dels polsadors # A cada if ens assegurem que el boto s'havia deixat anar if not abans & K_RIGHT and boto & K_RIGHT and coord_curs[0] < 2: coord_curs[0] += 1 if not abans & K_LEFT and boto & K_LEFT and coord_curs[0] > 0: coord_curs[0] -= 1 if not abans & K_DOWN and boto & K_DOWN and coord_curs[1] < 2: coord_curs[1] += 1 if not abans & K_UP and boto & K_UP and coord_curs[1] > 0: coord_curs[1] -= 1 if not abans & K_SELECT and boto & 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: # So d'error toca_melodia(mel_error) 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] # Toquem una melodia toca_melodia(mel_guanya) 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 = pad.get_pressed() # Lectura actual dels polsadors # A cada if ens assegurem que el boto s'havia deixat anar if not abans & K_START and boto & 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.