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
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.