En aquest joc tenim un personatge que va corrent i ha de saltar o ajupir-se per evitar obstacles.
Les imatges que fa servir el joc són les que comentem tot seguit. La primera mostra el fons del joc i la segona el missatge que surt a l'acabar la partida. També tenim el terra.
D'altra banda, tenim el personatge i els obstacles.
El programa és el següent:
import board import displayio import ugame import adafruit_imageload import time import random import digitalio import audioio import audio_lib
pant = board.DISPLAY
# Creem l'sprite (personatge)
doc_sprites, paleta= adafruit_imageload.load("/personaa.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
pers = displayio.TileGrid(doc_sprites,pixel_shader=paleta,
width = 1, height = 1,
tile_width = 31, tile_height = 34)
# Creem sprites del terra
doc_sprites2, paleta2= adafruit_imageload.load("/terra.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
terra0 = displayio.TileGrid(doc_sprites2,pixel_shader=paleta2,
width = 1, height = 1,
tile_width = 40, tile_height = 26)
terra1 = displayio.TileGrid(doc_sprites2,pixel_shader=paleta2,
width = 1, height = 1,
tile_width = 40, tile_height = 26)
terra2 = displayio.TileGrid(doc_sprites2,pixel_shader=paleta2,
width = 1, height = 1,
tile_width = 40, tile_height = 26)
terra3 = displayio.TileGrid(doc_sprites2,pixel_shader=paleta2,
width = 1, height = 1,
tile_width = 40, tile_height = 26)
terra4 = displayio.TileGrid(doc_sprites2,pixel_shader=paleta2,
width = 1, height = 1,
tile_width = 40, tile_height = 26)
# Creem sprites obstacles
doc_sprites3, paleta3= adafruit_imageload.load("/objectess.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
obs0 = displayio.TileGrid(doc_sprites3,pixel_shader=paleta3,
width = 1, height = 1,
tile_width = 20, tile_height = 25)
obs1 = displayio.TileGrid(doc_sprites3,pixel_shader=paleta3,
width = 1, height = 1,
tile_width = 20, tile_height = 25)
obs2 = displayio.TileGrid(doc_sprites3,pixel_shader=paleta3,
width = 1, height = 1,
tile_width = 20, tile_height = 25)
doc_sprites4, paleta4= adafruit_imageload.load("/ocell.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
obs3 = displayio.TileGrid(doc_sprites4,pixel_shader=paleta4,
width = 1, height = 1,
tile_width = 20, tile_height = 40)
# Creem sprite per quan s'acaba el joc
doc_sprites5, paleta5= adafruit_imageload.load("/gameover.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
gameover = displayio.TileGrid(doc_sprites5,pixel_shader=paleta5,
width = 1, height = 1,
tile_width = 160, tile_height = 54)
# Creem un mosaic per al taulell
doc_sprites0, paleta0= adafruit_imageload.load("/fondovideojoc.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
taulell = displayio.TileGrid(doc_sprites0,pixel_shader=paleta0,
width = 1, height = 1,
tile_width = 186, tile_height = 128)
taulell2 = displayio.TileGrid(doc_sprites0,pixel_shader=paleta0,
width = 1, height = 1,
tile_width = 186, tile_height = 128)
# Definim un grup per al personatge
grup_pers = displayio.Group(scale=1)
grup_pers.append(pers)
# Definim un grup per al taulell
grup_taulell = displayio.Group(scale=1)
grup_taulell.append(taulell)
# Creem un grup pel terra
grup_terra=displayio.Group()
grup_terra.append(terra0)
grup_terra.append(terra1)
grup_terra.append(terra2)
grup_terra.append(terra3)
grup_terra.append(terra4)
#Creem grup obstacles
grup_obstacles=displayio.Group()
grup_obstacles.append(obs0)
grup_obstacles.append(obs1)
grup_obstacles.append(obs2)
grup_obstacles.append(obs3)
#Creem grup de gameover
grup_final = displayio.Group()
grup_final.append(taulell2)
grup_final.append(gameover)
#Creem un grup de tot
grup = displayio.Group()
# Afegim els grups anteriors al global
grup.append(grup_taulell) # Primer el taulell
grup.append(grup_pers) # Despres el personatge
grup.append(grup_terra)
grup.append(grup_obstacles)
# Fem que el fons sigui transparent
paleta.make_transparent(9)
paleta3.make_transparent(12)
paleta4.make_transparent(249)
# Inicalitzacio de variables saltar=False gameoverr=False deslliçar=False abans=0 i=1
# Funcions
def Mou_Terra(grup,b,z):
for i in range(5):
grup_terra[i].x= z-b
z=z+40
if b< 38:
b=b+3
else:
b=0
return b
def Mou_Obstacles(grup):
for i in grup:
x= i.x
i.x= x-3
def Colocar(grup,g):
##randomitzar objectes
grup_colocar=grup
for i in range(3):
grup_colocar[i][0]= random.randint(0,2)
for i in range(4):
grup_colocar[i].x= g
g= g + random.randint(50,100)
def Colocar_y(grup):
##randomitzar objectes
grup_colocar=grup
for i in range(3):
ob=grup_colocar[i]
ob.y=77
grup_colocar[3].y=50
def volar(grup):
obj=grup[3][0]
if obj==1:
grup[3][0]=0
elif obj==0:
grup[3][0]=1
# Situem el terra
grup_terra.y=102
b= Mou_Terra(grup_terra,0,0)
# Situem els obstacles
Colocar_y(grup_obstacles)
Colocar(grup_obstacles, 200)
# Situem Personatje
grup_pers.x = 30
grup_pers.y = 72
# Mostra el grup a la pantalla
pant.show(grup)
# Moviment
abanss=time.monotonic()
while True:
# Moviment personatge, terra i obstacles
pers[0] = i
volar(grup_obstacles)
time.sleep(0.15)
if pers[0]==i and not saltar and not deslliçar:
pers[0] = 0
volar(grup_obstacles)
b=Mou_Terra(grup_terra,b,0)
g=Mou_Obstacles(grup_obstacles)
time.sleep(0.15)
b=Mou_Terra(grup_terra,b,0)
Mou_Obstacles(grup_obstacles)
pers[0] = i
volar(grup_obstacles)
#temps abans de saltar
boto = ugame.buttons.get_pressed() # Lectura actual dels polsadors
# El que passa al clicar el boto de saltar
if not abans & ugame.K_UP and boto & ugame.K_UP and not saltar and not deslliçar:
#sinusoide = audio_lib.nota(330, 1) # Mi
# El segon parametre es el volum, entre 0 i 1
#sons.play(sinusoide, loop=True)
grup_pers.y = 32
b=Mou_Terra(grup_terra, b,0)
Mou_Obstacles(grup_obstacles)
volar(grup_obstacles)
saltar=True
abanss=time.monotonic()
# El que passa al clicar el boto de deslliçar
if not abans & ugame.K_DOWN and boto & ugame.K_DOWN and not saltar and not deslliçar:
#sinusoide = audio_lib.nota(392, 1) # Sol
#sons.play(sinusoide, loop=True)
i=2
b=Mou_Terra(grup_terra, b,0)
Mou_Obstacles(grup_obstacles)
volar(grup_obstacles)
deslliçar=True
abanss=time.monotonic()
temps= time.monotonic()
if temps-abanss>= 2.0:
if saltar: # temps de salt
grup_pers.y = 72
saltar=False
if deslliçar:# temps de salt
i=1
deslliçar=False
abans = boto
abanss=temps
x0=obs0.x
x1=obs1.x
x2=obs2.x
x3=obs3.x
y0=pers.y
if x3<-20: # si els ostacles desapareixen de la pantalla es tornen a colocar
Colocar(grup_obstacles,200)
# Condicio pk sigui game over
if ((x0 in range(25,35) or x1 in range(25,35) or x2 in range(25,35)) and not saltar) or (x3 in range(25,35)and not deslliçar):
grup_final.x=0
grup_final[0].y=0
grup_final[1].y=37
pant.show(grup_final)
gameoverr=True
if boto & ugame.K_START and gameoverr:
# Inicialitzem variables
saltar=False
gameoverr=False
deslliçar=False
abans=0
i=1
#Situem Terra
grup_terra.y=102
b= Mou_Terra(grup_terra,0,0)
# Situem els obstacles
Colocar_y(grup_obstacles)
Colocar(grup_obstacles, 200)
# Situem Personatje
grup_pers.x = 30
grup_pers.y = 72
# Mostra el grup a la pantalla
pant.show(grup)

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