Esercitazioni di Informatica e Sistemi

Gioco di carte.

Lo studente è invitato ad analizzare i vari passaggi proposti nel programma seguente.

Al termine lo studente deve apportare alcune ulteriori modifiche al programma.

Vengono simulate le 52 carte da poker. Dopo averle mescolate, vengono distribiuite ai giocatori.

#include <iostream>
#include <stdlib.h>
using namespace std;

// int carta[52];
int Carte[52], seme[52];
int carteDate[52];
char valore[][3]={"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
char colore[]={'C', 'Q', 'F', 'P'};
int i, j, k, tmp;

int NGioc = 4, estratte=0;
int giocatore[4][5]; // 4 giocatori con 5 carte

int main() {
    srand(time(NULL)); // evita che si ripeta la stessa sequenza 

    for (i=0; i<52; i++) {      // generazione delle carte:
      Carte[i] = i%13; // si ottengono 4 sequenze di valori 1, 2, ..., 13
                            // che vengono assegnate in ordine agli elementi dell'array
      seme[i] = i/13;       // si ottengono 13 volte 0, 13 volte 1, 13 volte 2 e 13 volte 3
                            // che servono a simulare il colore della carta.
    }
    
    // stampa di prova per verificare l'esatta generazione delle carte:
    for (j=0; j<52; j++) {
      cout << valore[Carte[j]] << colore[seme[j]] << " ";
      if (!((j+1)%13)) cout << endl; // passa alla linea successiva ogni 13 carte
    }

    // mescola le carte
    for (k=51; k>0; k--) {
      i= rand() % k;
      tmp = Carte[i];
      Carte[i] = Carte[k];
      Carte[k] = tmp;
      tmp = seme[i];
      seme[i] = seme[k];
      seme[k] = tmp;
    }

    // stampa di prova
    cout << endl << "carte mescolate" << endl;
    for (j=0; j<52; j++) {
      cout << valore[Carte[j]] << colore[seme[j]] << " ";
      if (!((j+1)%13)) cout << endl; // passa alla linea successiva ogni 13 carte
    }

    // distribuzione delle carte:
    estratte=0;
    // prima carta a ciascun giocatore
    giocatore[0][0]=estratte++;
    giocatore[1][0]=estratte++;
    giocatore[2][0]=estratte++;
    giocatore[3][0]=estratte++;
    // seconda carta a ciascun giocatore    
    giocatore[0][1]=estratte++;
    giocatore[1][1]=estratte++;
    giocatore[2][1]=estratte++;
    giocatore[3][1]=estratte++;
    // terza carta a ciascun giocatore    
    giocatore[0][2]=estratte++;
    giocatore[1][2]=estratte++;
    giocatore[2][2]=estratte++;
    giocatore[3][2]=estratte++;
    // quarta carta a ciascun giocatore    
    giocatore[0][3]=estratte++;
    giocatore[1][3]=estratte++;
    giocatore[2][3]=estratte++;
    giocatore[3][3]=estratte++;
    // quinta carta a ciascun giocatore    
    giocatore[0][4]=estratte++;
    giocatore[1][4]=estratte++;
    giocatore[2][4]=estratte++;
    giocatore[3][4]=estratte++;

    cout << endl;
    // mostra carte del giocatore 0
    cout << "Carte del primo giocatore: ";
    for (k=0; k<5; k++) cout << valore[Carte[giocatore[0][k]]] << colore[seme[giocatore[0][k]]] << " ";
    cout << endl;
    
    // mostra carte del giocatore 1
    cout << "Carte del secondo giocatore: ";
    for (k=0; k<5; k++) cout << valore[Carte[giocatore[1][k]]] << colore[seme[giocatore[1][k]]] << " ";
    cout << endl;
    
    // mostra carte del giocatore 2
    cout << "Carte del terzo giocatore: ";
    for (k=0; k<5; k++) cout << valore[Carte[giocatore[2][k]]] << colore[seme[giocatore[2][k]]] << " ";
    cout << endl;
        
    // mostra carte del giocatore 3
    cout << "Carte del quarto giocatore: ";
    for (k=0; k<5; k++) cout << valore[Carte[giocatore[3][k]]] << colore[seme[giocatore[3][k]]] << " ";
    cout << endl;

system("PAUSE");
return 0; 
}

Esercizi:

Compattare le operazioni di distribuzione delle carte e le successive operazioni di stampa, utilizzando uno o più cicli.

Calcolare il punteggio di ciascun giocatore