JAVASCRIPT #5 Realizzazione del gioco della Roulette HTML, CSS e JAVASCRIPT
Obiettivo: Realizzare un programma che implementi il gioco della Roulotte utilizzando il linguaggio di programmazione HTML, CSS e JAVASCRIPT.
Codice:
Viene in seguito illustrato il codice utilizzato per implementare una semplice versione del gioco della Roulotte. Nello specifico, la pagina è caratterizzata da:
Un titolo principale (“Roulette”).
Immagine della roulette (che si trova in img/Roulette.png).
Visualizzazione del saldo (fisso a 100$).
Input per inserire un numero proposto dal giocatore.
Bottone SPIN per avviare l’estrazione. Premendo il tasto SPIN viene eseguita la funzione Spin() che genera un numero randomico e lo scrive nel relativo spazio.
Visualizzazione del numero estratto, inizialmente impostato su “0”.
Modifiche: Al fine di terminare il gioco è necessario introdurre una serie di modifiche:
Completare il codice gestendo i casi di vittoria e sconfitta (il giocatore perde dei soldi nel caso di sconfitta oppure vince dei soldi nel caso di vittoria)
Aggiungere una animazione legata alla vincita o alle possibili vincite.
Dare la possibilità all’utente di scegliere la puntata.
Dare la possibilità all’utente di scegliere se puntare sul colore oppure sul numero
JAVASCRIPT #4 Realizzazione del gioco del TRIS HTML, CSS e JAVASCRIPT
Obiettivo: Realizzare un programma che implementi il gioco del TRIS utilizzando il linguaggio di programmazione HTML, CSS e JAVASCRIPT.
Codice:
Viene in seguito illustrato il codice utilizzato per implementare una semplice versione del gioco del TRIS. Nello specifico, la pagina è caratterizzata da:
Nove immagini rappresentanti la matrice 3×3 del TRIS (inizialmente impostate su img/0.png immagine vuota). Premendo su ogni immagine viene lanciata una funziona denominata Premuto alla quale viene passato un parametro che riporta l’informazione del pulsante che è stato premuto attraverso un identificativo da 0 a 8. Premendo i pulsanti cambiano le immagini riportate sul matrice 3×3 diventano rispettivamente croci oppure cerchi.
Due paragrafi (i.e., giocatore1 e giocatore2 che dovrebbero riportare lo status delle vittorie di ogni giocatore).
Modifiche: Al fine di terminare il gioco è necessario introdurre una serie di modifiche:
Completare il codice associando la funzione Premuto a tutte le immagini della matrice 3×3.
Introdurre un meccanismo utile per determinare il giocatore vincitore.
Impedire all’utente di premere una casella già scelta.
Aggiungere una animazione legata alla vincita o alle possibili vincite.
Aggiungere un contatore delle vittorie.
Introdurre una intelligenza artificiale per giocare contro il computer.
C++ #16 Realizzazione di un gioco di combattimento con i Pokemon
Obiettivo: Realizzare un programma che implementi un gioco di combattimento tra Pokemon utilizzando il linguaggio di programmazione C++.
I Pokemon
Vengono in seguito riportate una serie di Carte Pokemon dalle quali si può prendere spunto per la realizzazione del gioco. Ogni carta è caratterizzata da una serie di attributi che saranno definiti nel codice attraverso la struttura pokemon. Questi attributi sono: nome, tipo, puntiVita, nomeAttacco, danniAttacco, debolezza.
Il codice
Viene in seguito illustrato il codice utilizzato per implementare un gioco di combattimento tra Pokemon. Il programma simula un gioco di combattimento tra due allenatori di Pokémon, ognuno con un mazzo di 3 Pokémon. Ogni Pokémon ha un nome, un tipo, dei punti vita, un attacco e una debolezza. Il codice gestisce la creazione di mazzi di Pokémon, l’inizializzazione delle proprietà di ogni Pokémon, e la simulazione di combattimenti tra i Pokémon di due allenatori.
Struttura del codice
Inclusioni e dichiarazioni globali:
La struttura pokemon definisce un Pokémon con: – nome: nome del Pokémon (es. Pikachu, Charmander). – tipo: tipo del Pokémon (es. “fuoco”, “acqua”). – puntiVita: salute del Pokémon. – nomeAttacco: nome dell’attacco del Pokémon. – danniAttacco: danno dell’attacco. – debolezza: tipo di attacco che danneggia maggiormente il Pokémon.
Variabili globali:
Vengono dichiarati sei oggetti di tipo pokemon (uno per ogni Pokémon di gioco: Pikachu, Charmander, Pidgey, Squirtle, Vulpix, Bulbasaur).
Vengono dichiarate delle costanti di tipo stringa per rappresentare i tipi di Pokémon: elettro, fuoco, acqua, ghiaccio, lotta.
Funzioni:
inizializzaPikachu(pokemon &p): inizializza un oggetto di tipo pokemon con i valori specifici di Pikachu.
inizializzaCharmander(pokemon &p): inizializza un oggetto di tipo pokemon con i valori specifici di Charmander.
intro(): stampa un messaggio di benvenuto. La funzione è vuota e non implementata.
creazioneMazzi(pokemon mazzo1[], pokemon mazzo2[], int numPokemon): crea due mazzi con i Pokémon specificati. Ogni mazzo contiene 3 Pokémon.
combattimento(pokemon &p1, pokemon &p2): gestisce un combattimento tra due Pokémon. La funzione non è ancora implementata in modo completo, ma stampa un messaggio indicando i Pokémon che stanno combattendo. La funzione dovrebbe restituire 1 se il primo Pokémon vince e 2 se il secondo Pokémon vince.
combattimentoMazzi(pokemon mazzo1[], pokemon mazzo2[], int numPokemon): simula un combattimento tra i mazzi dei due allenatori. Chiama la funzione combattimento per ciascun Pokémon dei due mazzi. La funzione dovrebbe restituire 1 se il giocatore 1 vince più sfide e 2 se il giocatore 2 vince più sfide.
Funzione main():
Definisce i nomi degli allenatori e il numero di Pokémon in ciascun mazzo (3 per ciascun giocatore).
Viene inizializzato Pikachu e Charmander tramite le funzioni inizializzaPikachu e inizializzaCharmander.
La funzione intro() stampa un messaggio di benvenuto (anche se non implementata).
I mazzi dei due giocatori vengono creati dalla funzione creazioneMazzi.
Viene avviato un ciclo per eseguire un numero definito di sfide (3 in questo caso). Ad ogni sfida, si simula un combattimento tra i Pokémon nei mazzi.
Modifiche:
Al fine di rendere il gioco più avvincente è possibile introdurre una serie di modifiche:
Elementi di Randomicità Probabilità di Colpo Critico: – Ogni attacco potrebbe avere una probabilità di infliggere danni doppi o tripli, per simulare i colpi critici. – Mossa Speciale Casuale: I Pokémon potrebbero avere un’abilità speciale che si attiva in modo casuale (per esempio, un attacco che colpisce 2 volte di seguito).
Aggiungere Altri Pokémon: I giocatori potrebbero scegliere tra una lista di Pokémon più ampia, con caratteristiche diverse (punteggi vita, tipo di attacco, ecc.).
Tipi di Attacco e Interazioni con i Tipi: Ogni Pokémon potrebbe avere una lista di attacchi con effetti diversi, e gli attacchi potrebbero essere influenzati dal tipo del Pokémon avversario. Ad esempio: Fuoco è efficace contro Erba. Acqua è efficace contro Fuoco. Elettrico è efficace contro Acqua. Potrebbero implementare la logica che, in base al tipo di attacco e al tipo di Pokémon, i danni subiti o inflitti cambiano.
Punti Esperienza e Livelli Punti Esperienza (XP): Ogni volta che un Pokémon vince una battaglia, guadagna dei punti esperienza che lo fanno salire di livello, aumentando così i suoi punti vita o danni.
Evoluzione: I Pokémon potrebbero evolversi quando raggiungono un certo livello, aumentando le loro statistiche (esempio: Pikachu evolve in Raichu).
Intelligenza Artificiale: Implementare un’IA per il secondo giocatore.
Modalità Storia: I giocatori potrebbero affrontare una serie di battaglie contro allenatori (che potrebbero avere Pokémon diversi) fino a raggiungere il “campione” finale.
C++ #14 Realizzazione del tris
Obiettivo: Realizzare un programma che implementi il gioco del TRIS utilizzando il linguaggio di programmazione C++.
Il codice
Viene in seguito illustrato il codice utilizzato per implementare una semplice versione del gioco del TRIS. Nel dettaglio, il codice prevede una netta distinzione tra il motore grafico che permette di stampare la griglia del gioco ed il codice di gestione del gioco (i.e., scelta della posizione, controllo del vincitore etc…).
Motore Grafico: La funzione void grafica(char t[]) ha il ruolo di stampare la griglia di gioco definita nell’array di caratteri t che contiene le informazioni relative alle celle del tabellone e aggiorna la console con il contenuto di ogni cella, disegnando una griglia di gioco.
Esempio componente grafica del gioco del tris
Codice di gestione del gioco: La dinamica del gioco viene sviluppata all’interno della funzione main. Nel dettaglio l’intero gioco viene implementato attraverso un ciclo while indefinito che prevede l’impiego di due condizioni ((vittoriaG1==0) && (vittoriaG2==0)). In questo caso i giocatori continueranno a giocare fino a che uno dei due non vince e la variabile di riferimento è impostata uguale ad 1. Ogni volta che un giocatore sceglie la posizione all’interno della griglia, viene aggiornata la GUI attraverso la funzione, precedentemente illustrata, grafica(tabellone). Sono inoltre definite una serie di funzioni, alcune già implementate ed altre invece da implementare al fine di terminare il gioco.
Costanti e Definizione dei colori: Utilizza macro per definire alcuni colori (rosso, verde, giallo, blu) per il testo in console e applicarli tramite escape codes. La macro NUMCELLE definisce la dimensione del tabellone (3×3 = 9 celle).
Funzione mySleep(int seconds): Definisce una versione personalizzata della funzione sleep, compatibile con l’ambiente di esecuzione online di OnlineGDB, per ritardare l’output di un certo numero di secondi. In aggiunta, std::cout.flush() forza l’output immediato del buffer di stampa.
Funzione intro(): Visualizza un messaggio di benvenuto al gioco del tris usando colori diversi per ogni parola (“Il”, “Gioco”, “del”, “Tris”) con una pausa tra ognuna. Chiede poi all’utente di premere Invio per proseguire.
Funzione regole(): È una funzione vuota che può essere riempita per mostrare le regole del gioco. Al momento, non ha alcuna implementazione.
Funzione inserimentoPosizione(char tabellone[], char simbolo): Chiede all’utente di inserire una posizione (indice da 0 a 8) dove desidera giocare il proprio simbolo (‘x’ o ‘y’). La funzione aggiorna l’array tabellone on il simbolo alla posizione specificata. È presente un commento per inserire un controllo di validità per evitare inserimenti fuori dai limiti dell’array o su celle già occupate.
Funzione controlloVittoriaG1(char t[], char mark): Controlla se il giocatore ha vinto. Verifica solo una combinazione di vittoria, cioè se le prime tre celle del tabellone contengono lo stesso simbolo (mark). Ritorna 1 se la condizione è vera e 0 altrimenti. Questa funzione è molto semplice e non verifica tutte le combinazioni vincenti (orizzontali, verticali, diagonali), quindi necessita di ampliamento.
Al fine di rendere il gioco più avvincente è possibile introdurre una serie di modifiche:
Completare le funzioni di riferimento per terminare il gioco. Design più Creativo per il Tabellone: Offrire temi personalizzati per il tabellone e per i simboli (X e O) che i giocatori possono scegliere, creando un’esperienza più personalizzata.
Implementare una intelligenza artificiale come avversario, così i giocatori possono competere anche da soli (introdurre differenti livelli di difficoltà, facile medio e difficile).
Implementare un sistema di punteggio e statistiche che memorizzi il numero di vittorie, sconfitte e pareggi in una sessione.
Tabellone alternativo: realizzare un tabellone alternativo 4×4 del tris.