#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
Nome: Impiccatelo 1.0
Autore: Antonio xxxxx
Data: 12/02/2012
*/
void playGame()
{
/*
| Definizione variabili:
|
| - letter: char, lettera digitata dal giocatore.
| - word: array, parola da indovinare, impostata su "parola".
| - wordCache: array, parola cifrata.
| - lCache: array, lista le lettere già digitate.
| - i: int, contatore.
| - tries: int, il numero di tentativi rimanenti.
| - errors: int, il numero di errori commessi.
! - cacheTries: int, contatore.
| - wordlenght: int, ritorna la lunghezza della parola tramite la funzione strlen();
| - flag: int, contatore necessario per uscire dal ciclo.
| - lCacheLenght: int, ritorna il numero di lettere contenute nella cache.
|
*/
char letter;
char lCache[25];
char word[25]="parola";
char wordCache[25]="\0";
int i;
int tries=5;
int errors=0;
int cacheTries=0;
int wordlenght=strlen(word);
// Imposto il massimo di errori a 5 ed eseguo un ciclo while fino al raggiungimento della soglia. (Praticamente corrisponde al numero dei tentativi).
while(errors!=5)
{
// Recupero la lunghezza della parola da indovinare necessaria per contare gli errori e quella della cache contenente le lettere provate.
int flag=strlen(word), lCacheLenght=strlen(lCache);
// Pulisco la schermata DOS.
system("cls");
// Stampo il numero dei tentativi rimanenti.
printf("# hai a disposizione %i tentativi per indovinare la parola seguente:\n\n", tries);
// Stampo la parola criptata, Esempio: PAROLA = ______
// Ad ogni iterazione gli spazi verranno sostituiti in caso di lettera corrispondente.
for(i=0; i<wordlenght; i++)
{
if(wordCache[i]=='\0')
{
printf("_");
}
else
{
printf("%c", wordCache[i]);
}
}
printf("\n\n");
// Stampo le lettere già provate tramite un ciclo for sull'array lCache solo nel caso in cui non sia il primo tentativo.
if(cacheTries!=0)
{
printf("# Hai gia' provato le seguenti lettere: ");
for(i=0; i<lCacheLenght; i++)
{
printf("%c", lCache[i]);
}
printf("\n\n");
}
// Recupero la lettera "tentativo" tramite scanf();
printf("# Inserisci una lettera: ");
scanf("%c", &letter);
// Pulisco il buffer onde evitare problemi
getchar();
// Aggiungo all'array lCache, nella posizione data dalla variabile cacheTries. Incrementata ad ogni iterazione.
lCache[cacheTries]=letter;
// Tramite ciclo for eseguo la copia della lettera indovinata nella stessa posizione dell'array wordCache, inizialmente vuoto.
for(i=0; i<wordlenght; i++)
{
// Se la lettera è presente eseguo la copia.
if(word[i]==letter)
{
wordCache[i]=word[i];
}
// Altrimenti, decremento la variabile flag.
else
{
flag--;
}
}
// Se la lunghezza della variabile flag è zero, ovvero la lettera provata non fa parte della parola misteriosa, aggiungo un errore e decremento i tentativi.
if(flag==0)
{
errors++;
tries--;
}
// Aumento in contatore necessario all'array lCache.
cacheTries++;
}
// Se gli errori arrivano il giocatore perde e viene riportato alla funzione main.
if(errors==5)
{
system("cls");
printf("# Hai esaurito le tue possibilita', hai perso!\n\n");
system("pause");
system("cls");
main();
}
}
int main()
{
int sceltaMenu;
char cache[25];
char l;
printf("######################################\n");
printf("# #\n");
printf("# 1: Inizia il gioco #\n");
printf("# #\n");
printf("# 2: ############## #\n");
printf("# #\n");
printf("# 3: ############## #\n");
printf("# #\n");
printf("######################################\n");
printf("\n\nInserisci una scelta: ");
scanf("%i", &sceltaMenu);
getchar();
switch(sceltaMenu)
{
case 1: system("cls"); playGame(); break;
default: playGame(); break;
}
return;
}