Creació de jocs amb PyBadge

Programació Gràfics     Recursos CITCEA
Tutorial Exemples Projectes   Inici

Situem diversos sprites

Fins ara només haviem situat un sprite al taulell. Ara n'anem a posar més. Teníem tres sprites, el del personatge, un cercle que representa una fruita i una estrella. Situarem un personatge (que es podrà moure), dues fruites i dues estrelles.

Tindrem una llista que contindrà els sprites i una altra llista on guardarem les coordenades de cada un d'ells. En la llista d'sprites fem servir l'índex per saber de quin dibuix es tracta; el primer serà el personatge, després vindran les dues fruites i finalment les dues estrelles.

A la funció que dibuixa el taulell fem servir les coordenades del primer sprite (el personatge) per situar la finestra però després representem tots els sprites.

El programa és el següent:

import board
import keypad
import displayio
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()
abans = 0  # Lectura anterior dels polsadors
while True:
    boto_act = pad.events.get()
    if boto_act and boto_act.pressed:
        boto = boto_act.key_number
        if boto == K_RIGHT and coord_sprites[0][0] < ample - 2:
            coord_sprites[0][0] += 1
        if boto == K_LEFT and coord_sprites[0][0] > 1:
            coord_sprites[0][0] -= 1
        if boto == K_DOWN and coord_sprites[0][1] < alt - 2:
            coord_sprites[0][1] += 1
        if boto == K_UP and coord_sprites[0][1] > 1:
            coord_sprites[0][1] -= 1
    dib_taulell()

Amb aquest exemple volíem mostrar només com es poden crear els elements que formen part del joc i la manera de moure'ls. Aquest exemple es podria anar millorant fins arribar a tenir un joc complet. Algunes coses que es podrien fer són:

 

 

 

 

 

 

 

 

 

 

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