Gioco dell’oca semplificato in C++

Una piccola sfida per i miei studenti. Realizzare un gioco dell’oca semplificato con due giocatori che tirano a caso un dado da 1 a 6 e avanzano di turno in turno fino ad arrivare a 50.

Il programma in realtà non è complesso, ma rappresenta un buon esercizio per mettersi alla prova con le funzioni. Qui poi ho inserito degli abbellimenti di grafica e una temporizzazione per rendere il gioco più gradevole e realistico, se possibile.

L’unica funzione che abbiamo utilizzato non prende parametri ma al suo interno estrae un numero casuale e lo restituisce al programma principale. Il valore restituito può essere stampato per capire il numero di dado uscito ed essere sommato alla sommatoria del singolo giocatore. Il ciclo while, sicuramente migliorabile, intercetta se uno dei due giocatori è giunto a 50 e segnala quindi con un semplice if il vincitore.

Gli abbellimenti inseriti sono semplici: #include <iomanip> //per usare setw() ci permette di impostare uno spazio di 2 caratteri fisso in fase di stampa. Utili spesso per allineare testo la cui dimensione massima è nota a priori ma cresce in diversi momenti del programma.

L’altra particolarità è la funzione sleep per simulare l’attesa di 2 secondi tra un turno e l’altro, altrimenti verrebbe stampato tutto insieme. L’unico inconveniente è che la funzione sleep non è standard: in windows è Sleep() in millisecondi, in linux è sleep() con la s minuscola e prende i secondi. Piccolo esempio per vedere come il codice, per forza di cose, non sia sempre “portabile” tra piattaforme software ed hardware differenti. Se il compilatore da errori, potete eliminare le porzioni di codice gestite dalle chiamate #ifdev #endif

#include<iostream>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include <iomanip> //per usare setw()
#ifdef _WIN32
    #include <windows.h>  //usa Sleep() su windows
#else
    #include <unistd.h>  //usa sleep() su linux
#endif

using namespace std;

int casuale()
{
    int numero;
    numero = rand() % 6 + 1;
    return numero;
}


int main()
{
    srand(time(NULL));

    int giocatorea = 0;
    int giocatoreb = 0;
    int turno = 0;
    int estrazione = 0;

    while (giocatorea <50 && giocatoreb < 50)
    {
        cout << "|-----------TURNO "<< setw(2)<<turno <<"-----------|" <<endl;
        estrazione = casuale();
        giocatorea += estrazione;
        cout << "| Giocatore A tira: " << estrazione << " va a: "<<giocatorea << endl;

        estrazione = casuale();
        giocatoreb += estrazione;
        cout << "| Giocatore B tira: " << estrazione << " va a: "<<giocatoreb << endl;
        cout << "|------------------------------|" <<endl;
        turno++;
        cout << endl;

       #ifdef _WIN32
            Sleep(2000);
       #else
          sleep(2);
       #endif
       
    }

    cout << endl;
    if (giocatorea >= 50)
        cout << "Giocatore A ha vinto!"<< endl;

    if (giocatoreb >= 50)
        cout << "Giocatore B ha vinto!"<< endl;

    return 0 ;
}

Ultima modifica 19 Maggio 2022