Creació de jocs amb PyBadge

Programació Dades pràctiques     Recursos CITCEA
Tutorial Exemples Projectes   Inici

Endless Runner game

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.

fons       final       terra

D'altra banda, tenim el personatge i els obstacles.

personatge       objectes       ocell       obstacle

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)

 

 

 

 

 

 

 

 

 

 

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