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.
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.
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
Posta un commento