Morra Cinese

 





Benvenuti amici,

come avrete notato sto giocando un po' con i reels di instagram ( se non mi segui fallo subito , aiutami a crescere, per me sarebbe un grande aiuto 💪) un po' per svago e un po' per lavoro ma non mi dimentico di aggiungere sempre contenuti a supporto di quello che si fa per poter imparare anche divertendosi. In questo , vista anche la ripartenza delle scuole, ho voluto utilizzare il nostro amato gattino e creare una piccola app per giocare con la morra cinese.

Andremo infatti a realizzare il codice per poter sfidare scratch in una partita a morra cinese, molto semplice ma anche molto variegata nell'utilizzo dei vari componenti. Non sarà un tutorial passo passo , ma vi lascio il link al progetto completo QUI, bensì una chiacchierata su come ho affrontato alcuni aspetti del gioco e del codice.

Intro

Appena apriremo il progetto verremo invogliati a cliccare il pulsante ( di nome e di fatto 😂) per accedere alla sfida e compariranno in basso le possibili scelte e in alto ,dopo una breve pausa, la mano del nostro avversario che una volta in movimento sancirà l'inizio del match e quindi il tempo in cui poter effettuare la scelta.

Finito il tempo ci sarà anche la verifica del vincitore o eventualmente la notifica della non scelta effettuata. La maggior parte del codice è deputato ad abbellire o differenziare i vari momenti del gioco, quindi sbizzarritevi e personalizzate al massimo il vostro progetto, le parti salienti sono poche e vedremo adesso le mie scelte.

Il codice

Come anticipato vedremo solo alcuni punti e il codice che ho realizzato per poter raggiungere il mio obiettivo. 

Spulciando all'interno del progetto noterete l'utilizzo dei messaggi per attivare le varie parti del codice, pratica molto semplice e molto utilizzata per scandire i vari tempi. In questo caso il messaggio play manda in esecuzione il corpo centrale del mio codice , siamo nello sprite relativo alla " mano " dell'avversario e da qui andremo ad eseguire l'animazione, e quindi scandire i tempi, della mano che si muove in attesa della scelta. Nel mio caso ad ogni giro ( perché ho introdotto la possibilità di fare più giocate ) vado a inizializzare la dimensione e il costume di partenza per poi mostrare la mano e far partire l'estrazione della scelta dell'avversario, una piccola pausa di 0.8 sec.

La variabile OnPlay impostata su yes indica che siamo nel range di tempo in cui è possibile selezionare la scelta per l'avversario, infatti non possiamo permettere di selezionare dopo la scelta di scratch. I due cicli ripetuti tre volte mi servono per simulare il classico movimento usato durante il gioco e infine imposteremo il costume selezionandolo a caso dalla lista estratti, bloccheremo la scelta ( lo vedremo dopo ) andando a impostare la variabile OnPlay su no , invierò la giocata selezionata da scratch e partirà la verifica. 


Andiamo a vedere allora queste procedure cosa contengono e vediamo anche le liste usate e perché. Partendo dalla procedura estrai nel tempo ho usato vari modi, e questo la dice lunga su quanto è bello giocare con scratch, questa volta per cercare di randomizzare un po' di più la scelta ho optato per riempire casualmente una lista e estrarre casualmente da quest'ultima un numero, quel numero sarà usato per impostare il costume.

Azzero la lista estratti visto che è un nuovo turno e anche la variabile index che uso subito dopo con un ciclo per riempire la lista segni con numeri da uno a tre . Sì, non mi sono impegnato tanto 😓ma sarò curiosissimo di vedere la vostra personalizzazione. Appoggiandomi sempre alla variabile index ( andiamo a risparmio ) vado ad estratte un numero casuale e usarlo per prelevare un elemento dalla lista segni e salvarlo in estratti poi cancello lo stesso elemento dalla lista segni per preparare la prossima scelta. Da qui notare due cose importanti 1) lunghezza di segni mi permette di legare l'estrazione al numero di elementi disponibili 2) i blocchi aggiungi e cancella lavorano in modo diverso, il primo vuole direttamente l'elemento da salvare il secondo vuole la posizione dell'elemento da eliminare. Ecco perché nel primo caso usiamo elemento index di segni e nel secondo direttamente index.

La verifica è un po' lunga per una sola immagine quindi vi consiglio di vederla direttamente su scratch ma il codice è molto semplice.

Ho cercato di ottimizzare le varie condizioni creando il percorso come segue ma visto che ormai mi dedico al blog solo la notte e super stanco mi aspetto soluzioni più ottimali. Il se altrimenti mi permette di navigare tra i vari scenari e mandare il messaggio corretto che mi servirà per mostrare il cartello corretto. Ho iniziato con un se giocata=0 nel mio caso identifica la non scelta da parte del giocate altrimenti mi fa proseguire con la mia cascata di opzioni. Subito dopo ho identificato il pareggio quindi il nome del costume attivo in quel momento è proprio uguale alla variabile giocata, quindi la scelta dell'avversario. Mi rimane solo la vittoria e la sconfitta.


In questo caso non mi sono venute altre idee se non quelle di dover identificare le possibili combinazioni ( vincenti o perdenti ) e introdurle in un lungo concatenarsi di or visto che non avverranno contemporaneamente ( and ) ma solo uno di essi si verificherà. Cosa dovremo verificare? Nel mio caso le sconfitte quindi le ho composte controllando di volta in volta l' estrazione ( nome costume = varie opzioni ) e la giocata ( giocata = varie opzioni ) e creando solo le combinazioni perdenti per l'avversario. 

Per esempio : costume sasso e giocata forbici, costume forbici e giocata carta, costume carta e giocata sasso. In tutti questi casi la giocata perde, tutte le altre combinazioni rimaste saranno giocate vincenti infatti l'ultimo altrimenti invia il messaggio vittoria. Il messaggio again attiva il pulsante per giocare di nuovo.

Vediamo velocemente anche il codice dei pulsanti di scelta o meglio cosa succede se vengono cliccati. Ad ogni click se è già selezionato deve deselezionarsi e a seconda del caso diventare un po' più grande ( identifica la scelta ) oppure ritornare alle dimensioni normali ( indica la deselezione ) , se invece non è selezionato al click deve deselezionare l'altra scelta. Tutto questo può avvenire solo nel tempo attivo di gioco e se la selezione è stata fatta voglio rendere più grande ed evidenziare l'immagine corretta.


Il primo se mi permette di attivare il codice solo se siamo nel tempo attivo di gioco ed ecco il perché del cambio della variabile OnPlay che gestisce il tempo di gioco. Passiamo alla selezione che ho gestito semplicemente con il controllo della dimensione dello sprite, se la dimensione = 50 ( quella iniziale , la vostra potrebbe essere diversa ) vuol dire che non è selezionata quindi aggiorno la variabile giocata inserendo il nome del costume , invio i messaggi agli altri due pulsanti per eventualmente deselezionarli (infatti a sinistra resetS riporta la dimensione a quella iniziale ) , aumento un po' la dimensione ma meno di quella finale se sarà la scelta ( a sinistra l'arrivo del messaggio sasso infatti porta ad 80% la dimensione ).
L' altrimenti identifica la situazione in cui ero già selezionato e clicco nuovamente per deselezionare infatti azzera giocata e porta la dimensione a quella inziale. L'arrivo del messaggio Play inizializza lo sprite a i valori corretti.

Tutto il resto è solo scena 😂 pulsanti animati, cartelli finali che indicano l'esito della sfida, il pulsante per giocare di nuovo, se seguite il mio blog sarete sicuramente in grado di leggerli da soli dal mio progetto scratch, come sempre per qualsiasi informazione vi aspetto nei commenti sul blog, su fb, su instagram, dove volete 😁

Seguitemi, mettete un bel like , chiedete, fatemi capire se i contenuti che porto vi piacciono o se bisogna aggiustare un po' il tiro.

Un saluto e aspetto di vedere i vostri progetti per ammirare il vostro lavoro e la vostra fantasia all'opera.

La sfida

Sapresti aggiungere un contatore di partite effettuate estrapolando quelle vinte e quelle perse? 👊

Raffaele



  
 

Commenti

Ciao, spero ti piaccia il blog. Se ti fa piacere qui puoi offrirmi un caffè!

Post popolari in questo blog

GOOGLE SCRIPT & KODULAR READ, WRITE, UPDATE, DELETE

Tu lo conosci THUNKABLE?