Creació de jocs amb PyBadge

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

Afegim textos

Aquesta és una versió ampliada de l'exemple anterior en la qual fem servir textos per presentar el joc, dir a qui li toca i indicar qui guanya.

El programa, en el qual hem marcat en groc les línies noves o modificades respecte la versió anterior, és el següent:

import board
import random
import analogio
import ugame
import stage
import time
soroll = analogio.AnalogIn(board.A3)
random.seed(soroll.value)
banc = stage.Bank.from_bmp16("tile0.bmp")
spt = stage.Bank.from_bmp16("tile2.bmp")
fons = stage.Grid(banc, 10, 8)  # 16 * 10 = 160
                                # 16 * 8 = 128
# Creem un sprite per al fons i un per a l'indicador de torn
cursor = stage.Sprite(spt, 3, 24, 24)  # Inici a (24, 24)
torn = stage.Sprite(spt, 3, 136, 56)
# Creem les 9 fitxes, inicialment invisibles
fitxes = []
for i in range(3):
    for j in range(3):
        xf = 24 + 32 * i
        yf = 24 + 32 * j
        fitxes = fitxes + [stage.Sprite(spt, 3, xf, yf)]
joc = stage.Stage(ugame.display, 12)
# Creem els textos
text_dalt = stage.Text(20, 1)
text_dalt.move(6, 6)
text_baix = stage.Text(20, 1)
text_baix.move(6, 114)
# Llista on guardarem les posicions de les fitxes
# 0 = lliure     1 = verd     2 = vermell
caselles = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
coord_curs = [1, 1]
estat = 0  # Per començar, l'estat inicial
abans = 0  # Lectura anterior dels polsadors
jugador = random.randint(1, 2)  # Jugador aleatori
noms_jug = ["verd", "roig"]
# Funcio que comprova si ja hem acabat
# Torna el jugador que ha guanyat o 3 si hi ha empat
def comprova():
    acabat = 0
    suma = 0
    for xa in range(3):
        for ya in range(3):
            if caselles[xa][ya] > 0:
                suma += 1
    if suma == 9:
        acabat = 3
    for jg in range(1, 3):
        for k in range(3):
            if caselles[k][0] == jg and caselles[k][1] == jg and caselles[k][2] == jg:
                acabat = jg  # Columna k
        for k in range(3):
            if caselles[0][k] == jg and caselles[1][k] == jg and caselles[2][k] == jg:
                acabat = jg  # Filera k
        if caselles[0][0] == jg and caselles[1][1] == jg and caselles[2][2] == jg:
            acabat = jg  # Diagonal
        if caselles[2][0] == jg and caselles[1][1] == jg and caselles[0][2] == jg:
            acabat = jg  # Diagonal
    return acabat
# Fi de la funcio
# Funcio que amaga les fitxes
# 0 = invisible     1 = verd     2 = vermell
def amaga_fitxes():
    for i in range(9):
        fitxes[i].set_frame(3, 0)
# Fi de la funcio
# Funcio que mostra les fitxes
# 0 = invisible     1 = verd     2 = vermell
def mostra_fitxa(x, y, jug):
    ind = 3 * x + y
    if jug == 0:
        torn.set_frame(3, 0)
    elif jug < 3:
        fitxes[ind].set_frame(jug - 1, 0)
# Fi de la funcio
# Funcio que mostra a qui li toca tirar
# 0 = no mostra     1 = verd     2 = vermell
def mostra_jugador(vis):
    if vis == 0:
        torn.set_frame(3, 0)
    elif vis < 3:
        torn.set_frame(vis - 1, 0)
# Fi de la funcio
# Funcio que escriu a qui li toca tirar
# 0 = no mostra     1 = verd     2 = vermell
def escriu_jugador(vis):
    text_dalt.clear()
    text_dalt.cursor(0, 0)
    if 0 < vis < 3:
        text_dalt.text("Tira " + noms_jug[vis - 1])
# Fi de la funcio
# Funcio que mostra o amaga el cursor
# Si el paràmetre és 0 no es veura
def mostra_cursor(vis):
    if vis == 0:
        cursor.set_frame(3, 0)
    else:
        cursor.set_frame(2, 0)
# Fi de la funcio
# Funcio que situa el cursor en una casella buida
# Retorna la posicio del cursor
def busca_pos_cursor():
    cc = [0, 0]
    for xa in range(3):
        for ya in range(3):
            if caselles[xa][ya] == 0:
                cc[0] = xa
                cc[1] = ya
    return cc
# Fi de la funcio
# Funcio que situa el cursor en una casella buida
def situa_cursor(coord):
    xyc = [0, 0]
    xyc[0] = 24 + 32 * coord[0]
    xyc[1] = 24 + 32 * coord[1]
    cursor.move(xyc[0], xyc[1])
    return xyc
# Fi de la funcio
# Funcio que reinicia la partida
def nova_partida():
    for i in range(3):
        for j in range(3):
            caselles[i][j] = 0
# Fi de la funcio
# Funcio que dibuixa el taulell
def dib_taulell():
    tau = [ [5, 5, 5, 5, 5, 5, 5, 5, 0, 0], 
    [5, 1, 2, 1, 2, 1, 2, 5, 0, 0], 
    [5, 4, 3, 4, 3, 4, 3, 5, 0, 0], 
    [5, 1, 2, 1, 2, 1, 2, 5, 1, 2], 
    [5, 4, 3, 4, 3, 4, 3, 5, 4, 3], 
    [5, 1, 2, 1, 2, 1, 2, 5, 0, 0], 
    [5, 4, 3, 4, 3, 4, 3, 5, 0, 0], 
    [5, 5, 5, 5, 5, 5, 5, 5, 0, 0] ]
    for i in range(8):  # 8 fileres
        for j in range(10):  # 10 columnes
            fons.tile(j, i, tile=tau[i][j])
# Fi de la funcio
joc.layers = [cursor, torn] + fitxes + [text_dalt, text_baix, fons]
dib_taulell()
while True:
    if estat == 0:  # Situacio inicial
        amaga_fitxes()
        nova_partida()
        mostra_jugador(0)
        text_dalt.clear()
        text_baix.clear()
        text_dalt.cursor(0, 0)
        text_baix.cursor(0, 0)
        text_dalt.text("Tres en ratlla")
        text_baix.text("Prem START")
        joc.render_block()
    while estat == 0:  # Esperem que es premi Start
        boto = ugame.buttons.get_pressed()  # Lectura actual dels polsadors
        # A cada if ens assegurem que el boto s'havia deixat anar
        if not abans & ugame.K_START and boto & ugame.K_START:
            estat = 1  # Inici del joc
        abans = boto
    if estat == 1:  # Partida
        text_baix.clear()
        text_baix.cursor(0, 0)
        # Mostrem el cursor
        coord_curs = [1,1]
        situa_cursor(coord_curs)
        escriu_jugador(jugador)
        mostra_jugador(jugador)
        mostra_cursor(1)
        joc.render_block()
    while estat == 1:
        # Indiquem qui juga
        escriu_jugador(jugador)
        mostra_jugador(jugador)
        # Mirem els polsadors per moure el cursor
        boto = ugame.buttons.get_pressed()  # Lectura actual dels polsadors
        # A cada if ens assegurem que el boto s'havia deixat anar
        if not abans & ugame.K_RIGHT and boto & ugame.K_RIGHT and coord_curs[0] < 2:
            coord_curs[0] += 1
        if not abans & ugame.K_LEFT and boto & ugame.K_LEFT and coord_curs[0] > 0:
            coord_curs[0] -= 1
        if not abans & ugame.K_DOWN and boto & ugame.K_DOWN and coord_curs[1] < 2:
            coord_curs[1] += 1
        if not abans & ugame.K_UP and boto & ugame.K_UP and coord_curs[1] > 0:
            coord_curs[1] -= 1
        situa_cursor(coord_curs)
        joc.render_block()
		# El botó SELECT posa la fitxa, si es pot
        if not abans & ugame.K_SELECT and boto & ugame.K_SELECT:
            if caselles[coord_curs[0]][coord_curs[1]] == 0:
                caselles[coord_curs[0]][coord_curs[1]] = jugador
                mostra_fitxa(coord_curs[0], coord_curs[1], jugador)
                jugador +=1
                if jugador > 2:
                    jugador = 1
			# Resituem el cursor
            coord_curs = busca_pos_cursor()
            situa_cursor(coord_curs)
            joc.render_block()
			# Mirem si ja ha acabat
            guanya = comprova()
            if guanya > 0:
                estat = 2
        abans = boto
    if estat == 2:  # Final
        mostra_cursor(0)
        jugador = random.randint(1, 2)  # Jugador aleatori
        text_dalt.clear()
        text_dalt.cursor(0, 0)
        if guanya == 3:
            ja = 1
            jb = 2
            text_dalt.text("Empat!")
        else:
            ja = guanya
            jb = 0
            text_dalt.text("Guanya el " + noms_jug[guanya - 1])
        text_baix.clear()
        text_baix.cursor(0, 0)
        text_baix.text("Prem START")
    while estat == 2:
		#Mostra el guanyador intermitent
        mostra_jugador(ja)
        joc.render_block()
        time.sleep(0.5)
        mostra_jugador(jb)
        joc.render_block()
        time.sleep(0.5)
		# Esperem START per tornar a l'inici
        boto = ugame.buttons.get_pressed()  # Lectura actual dels polsadors
        # A cada if ens assegurem que el boto s'havia deixat anar
        if not abans & ugame.K_START and boto & ugame.K_START:
            estat = 0  # Inici del joc
        abans = boto

 

 

 

 

 

 

 

 

 

 

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