codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define W_HEIGHT 15
#define W_WIDTH 80
#define CLEAR system("cls") /* Per DOS/Windows */
// #define CLEAR system("clear") /* Per Unix/Linux */
void search_pattern(char *c, char *s, char pattern);
int count_pattern(char *c, char pattern);
void titolo(void);
void fill_m_array(char (*ptr)[W_WIDTH], int n);
int draw_xy(int h, int w, char (*ptr)[W_WIDTH], char *string);
void print_m_array(char (*ptr)[W_WIDTH], int n);
char multi[W_HEIGHT][W_WIDTH];
int main(void)
{
int i;
char scelta;
char c, parola[] = "materasso";
char count[2] = {57,0};
char *impiccato = NULL;
impiccato = (char *)malloc(sizeof(parola)+1);
/* per inizializzare la stringa */
strcpy(impiccato,parola);
for(i=0;impiccato[i];i++)
{
impiccato[i]='-';
}
/* ----------------- */
titolo();
draw_xy(7,15,multi,impiccato);
draw_xy(4,50,multi,"Tentativi rimasti:");
draw_xy(4,70,multi,count);
print_m_array(multi,W_HEIGHT);
while(strcmp(impiccato,parola) && count[0]>48)
{
printf("Inserisci un carattere [a-zA-Z0-9]: ");
c = getchar();
if(count_pattern(parola,c))
{
search_pattern(parola,impiccato,c);
draw_xy(7,15,multi,impiccato);
}
else
{
count[0]--;
draw_xy(4,70,multi,count);
}
c = getchar(); //to avoid entering the '\n' char
print_m_array(multi,W_HEIGHT);
}
//Chek if the user's won the game
if(count[0]==48) //means 0 in ASCII table
{
draw_xy(4,50,multi,"Spiacente, hai perso!");
}
if(!strcmp(impiccato,parola) && count[0]>48)
{
draw_xy(4,50,multi,"Complimenti, hai vinto!");
}
do
{
print_m_array(multi,W_HEIGHT);
printf("Vuoi ancora giocare? [y/n]: ");
scanf("%c",&scelta);
printf("\n");
} while(scelta!='y' && scelta!='n');
if(scelta==121)
main();
else
return 0;
}
/******************************************/
/* */
/* FUNZIONI PER LA GESTIONE DEL GIOCO */
/* */
/******************************************/
void search_pattern(char *c, char *s, char pattern)
{
int i;
for(i=0;*c;i++)
{
if(*c++==pattern)
*(s+i) = pattern;
}
}
int count_pattern(char *c, char pattern)
{
int i, pattern_count=0;
for(i=0;*c;i++)
{
if(*c++==pattern)
pattern_count++;
}
return pattern_count;
}
/*******************************************/
/* */
/* FUNZIONI PER LA GESTIONE DELLO SCHERMO */
/* */
/*******************************************/
void titolo(void)
{
fill_m_array(multi,W_HEIGHT);
draw_xy(0,0,multi,"Gioco dell'impiccato");
draw_xy(1,0,multi,"====================");
draw_xy(0,W_WIDTH-22,multi,"Created by Noise 2006");
}
void fill_m_array(char (*ptr)[W_WIDTH], int n)
{
int i,j;
char *p;
p = (char *)ptr;
for(i=0;i<n;i++)
{
for(j=W_WIDTH*i;j<(W_WIDTH*i)+(W_WIDTH-1);j++)
{
*p++ = ' ';
}
*p++='\n';
}
}
int draw_xy(int h, int w, char (*ptr)[W_WIDTH], char *string)
{
int i;
char *p;
p = (char *)ptr;
p += (h * W_WIDTH + w); //posiziona il puntatore dove si vuole scrivere
while(*string)
{
*p++ = *string++;
}
return 1;
}
void print_m_array(char (*ptr)[W_WIDTH], int n)
{
int i;
char *p;
p = (char *)ptr;
CLEAR;
for(i=0;i<(W_WIDTH*n);i++)
{
printf("%c", *p++);
}
}