In questo post viene descritto il progetto e l’implementazione di un gioco di traduzione delle parole in linguaggio C++. In questo gioco l’esecutore va programmato per porre delle domande al giocatore del tipo: “Traduci in inglese la parola: MACCHINA”. Il giocatore risponderà alla domanda; se la risposta è corretta guadagna un punto! (gioco traduttore)

Analisi del problema

Iniziamo la nostra fase di analisi considerando le strutture dati che ci servono per implementare questo gioco. Per prima cosa abbiamo certamente bisogno di due vettori che fungono da “dizionari” ovvero contenitori delle parole da utilizzare. Un dizionario contiene le parole in lingua italiana che il giocatore dovrà tradurre e un secondo dizionario contiene invece delle parole in lingua inglese corrispondenti alla giusta traduzione. Questi due dizionari possiamo implementarli con dei vettori di tipo string.

In seguito dobbiamo considerare anche una variabile di tipo intero nella quale memorizzeremo il punteggio ottenuto. In definitiva utilizzeremo queindi le seguenti strutture dati:

  • dizionarioItaliano : vettore che contiene le parole in lingua italiana
  • dizionarioInglese : vettore che contiene le parole in lingua inglese
  • punteggio : numero intero che memorizza i punti attualmente accumulati

Algoritmo

Poichè il problema è complesso utilizzeremo la scomposizione top-down per la sua risoluzione. Possiamo scomporre il problema in due differenti sottoproblemi:

  • caricaDizionari(): funzione che permette di caricare due vettori di stringhe conententi le parole
  • gioco(): funzione che gestisce la dinamica di gioco.

caricaDizionari()

il sottoproblema carica dizionari non prende in input nulla (perchè le variabili dei vettori sono globali e viste quindi da tutti i sottoproblemi) e non restituisce nulla perchè effettua solo l’operazione di caricamento dei valori corrispondenti alle parole. L’algoritmo di risoluzione di questa funzione potrebbe essere il seguente:

La cosa importante è che la parola in inglese abbia la stessa posizione della parola in italiano. Questo ci permetterà di effettuare il controllo di correttezza sulla stringa. L’implementazione del sottoprogramma è la seguente:

void caricaDizionari()
{
	dizionarioItaliano[0] = "macchina";
	dizionarioItaliano[1] = "cielo";
	dizionarioItaliano[2] = "tavolo";

	dizionarioInglese[0] = "car";
	dizionarioInglese[1] = "sky";
	dizionarioInglese[2] = "table";
}

gioco()

Il sottoproblema del gioco() permette di gestire l’interazione fra esecutore e giocatore. Per ogni parola presente nel dizionario di italiano l’esecutore deve comunicare al giocatore una parola e il giocatore deve rispondere.

Dopo aver letto la risposta l’algoritmo deve controllare che è quella corretta. La soluzione corretta corrisponde alla stessa casella del vettore dizionarioInglese. Modelliamo tutto con una selezione doppia

Nel complesso la soluzione algoritmica è la seguente:

In linguaggio C++ possiamo fornire la seguente implementazione:

void gioco() 
{
	cout << "GIOCO DEL TRADUTTORE" << endl;

	for(int i =0; i<3; i++)
	{
		cout << "Traduci la parola:  " << dizionarioItaliano[i] << endl;
		string risposta;
		cin >> risposta;
		if(risposta == dizionarioInglese[i])
		{
			punteggio++;
			cout << "GIUSTO" << endl;
		}
		else
		{
			cout << "SBAGLIATO";
		}
	}
}

Possiamo ora progettare l’algoritmo del programma principale:

Implementazione

#include <iostream>

using namespace std;

void caricaDizionari();
void gioco();
string dizionarioItaliano[3];
string dizionarioInglese[3];
int punteggio = 0;
int main()
{
	caricaDizionari();
	gioco();
}

void caricaDizionari()
{
	dizionarioItaliano[0] = "macchina";
	dizionarioItaliano[1] = "cielo";
	dizionarioItaliano[2] = "tavolo";

	dizionarioInglese[0] = "car";
	dizionarioInglese[1] = "sky";
	dizionarioInglese[2] = "table";
}

void gioco() 
{
	cout << "GIOCO DEL TRADUTTORE" << endl;

	for(int i =0; i<4; i++)
	{
		cout << "Traduci la parola:  " << dizionarioItaliano[i] << endl;
		string risposta;
		cin >> risposta;
		if(risposta == dizionarioInglese[i])
		{
			punteggio++;
			cout << "GIUSTO" << endl;
		}
		else
		{
			cout << "SBAGLIATO";
		}
	}
}

Implementa su ideone.com

Torna a vettori

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *