| Programació | Gràfics | Recursos CITCEA | ||
| Tutorial | Exemples | Projectes | Inici |
Anem a afegir un so al programa amb diversos sprites. Per fer aquest exemple emprarem el fitxer de so pew.wav (el podem descarregar picant amb el botó dret sobre l'enllaç). El so s'emetrà cada cop que intentem moure l'sprite fora dels límits.
A continuació tenim el programa, en el qual hem marcat les línies afegides o modificades.
import board import keypad import displayio import digitalio import audiocore import audioio import adafruit_imageload
# Noms dels botons K_X = 0 K_O = 1 K_START = 2 K_SELECT = 3 K_RIGHT = 4 K_DOWN = 5 K_UP = 6 K_LEFT = 7
# Creem un objecte per a la pantalla
pant = board.DISPLAY
# Carreguem el fitxer amb la imatge
imatge, palette = adafruit_imageload.load("/tiles.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
# Creem els sprites
sprites = [] # Llista d'sprites
coord_sprites = [] # Llista de coordenades dels sprites
for k in range(0, 5):
if k == 0:
spt = 7 # Primer situem el personatge
cdn = [4, 3]
if k > 0 and k < 3:
spt = 3 # Despres dues fruites
cdn = [3*k, 2*k]
if k > 2:
spt = 11 # Finalment dues estrelles
cdn = [3*k, 2*k]
spr = displayio.TileGrid(imatge, pixel_shader=palette,
width = 1, height = 1,
tile_width = 16, tile_height = 16)
spr[0] = spt
sprites.append(spr)
coord_sprites.append(cdn)
# 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 als sprites
grup_pers = displayio.Group(scale=1)
for sprt in sprites:
grup_pers.append(sprt)
# 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_pers) # Despres els sprites
# Objecte per llegir els botons
pad = keypad.ShiftRegisterKeys(
clock=board.BUTTON_CLOCK,
data=board.BUTTON_OUT,
latch=board.BUTTON_LATCH,
key_count=8,
value_when_pressed=True,
)
# Llegim el fitxer CSV
fit = open("taulell_gros.csv", "r")
cont_fit = fit.read()
fit.close()
# Descomposem el fitxer en una llista de linies
llista_fit = cont_fit.replace("\r", "").split("\n")
# Variables de control de la finestra
alt = len(llista_fit)
ample = len(llista_fit[0].split(","))
# Funcio que redibuixa el taulell
def dib_taulell():
xmin = coord_sprites[0][0] - 5
xmax = coord_sprites[0][0] + 4
ymin = coord_sprites[0][1] - 4
ymax = coord_sprites[0][1] + 3
while xmin < 0:
xmin += 1
xmax += 1
while xmax >= ample:
xmin -= 1
xmax -= 1
while ymin < 0:
ymin += 1
ymax += 1
while ymax >= alt:
ymin -= 1
ymax -= 1
# Bucle que recorre totes les linies
for vy in range(0, 8):
# Creem una llista amb els elements de la linia
linia = llista_fit[vy + ymin].split(",")
for vx in range(0, 10):
# Dibuixem el taulell
taulell[vx, vy] = int(linia[vx + xmin])
# Situem els sprites
n = 0
for sprt in sprites:
sprt.x = 16 * (coord_sprites[n][0] - xmin)
sprt.y = 16 * (coord_sprites[n][1] - ymin)
n += 1
# Fi de la funcio
# Fem que el fons dels personatges sigui transparent
palette.make_transparent(2)
# Mostra el grup a la pantalla
pant.root_group = grup
dib_taulell()
so_rebot = open("pew.wav", 'rb')
wav = audiocore.WaveFile(so_rebot)
sons = audioio.AudioOut(board.SPEAKER)
speaker_enable = digitalio.DigitalInOut(board.SPEAKER_ENABLE)
speaker_enable.switch_to_output(value=True)
while True:
boto_act = pad.events.get()
if boto_act and boto_act.pressed:
boto = boto_act.key_number
if boto == K_RIGHT:
if coord_sprites[0][0] < ample - 2:
coord_sprites[0][0] += 1
else:
sons.play(wav)
if boto == K_LEFT:
if coord_sprites[0][0] > 1:
coord_sprites[0][0] -= 1
else:
sons.play(wav)
if boto == K_DOWN:
if coord_sprites[0][1] < alt - 2:
coord_sprites[0][1] += 1
else:
sons.play(wav)
if boto == K_UP:
if coord_sprites[0][1] > 1:
coord_sprites[0][1] -= 1
else:
sons.play(wav)
dib_taulell()
En el programa, abans del bucle principal, hem obert el fitxer de so per a lectura; també hem creat un objecte de so. Després li diem que el so no estigui desactivat; aquesta opció és molt interessant si, per exemple, volem que es pugui tenir un mode de joc silenciós.
En el bucle de programa, fem que el so es reprodueixi cada cop que s'intenta moure l'sprite en una direcció en la qual ja s'ha arribat a la vora.

Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.