Come passa il tempo. Il quiz che avevo intenzione di fare, l'ho fatto e ve lo risparmio. Funza e la mia dolce bambina lo schifa. In compenso ho fatto sto mostro (e non credo di capire nemmeno bene fino in fondo come gira).
Questo è il file a corredo:
9|Prosegui senza curarti di nessuno e raggiungi l'uscita del tuo carcere. Sei salvo!|1|z|z
8|A volte e' meglio non disturbare uno zombie apparentemente privo di qualunque tipo di scopo. Ti azzanna al collo e dopo un po' tutto quanto sembra non avere piu' senso. RIP!|1|z|z
7|Nel corridoio ci sono altri uomini, ma non sembrano accorgersi della tua presenza. Provi a parlare con uno di essi?|0|8|9
6|La porta e' talmente affascinante per te che decidi di restare con lei per sempre. RIP!|1|z|z
5|Ti trovi in un lungo e stretto corridoio. Avanzi?|0|7|6
4|Hai ragione ad agire con prudenza, ma la porta non presenta nulla di strano. La attraversi?|0|5|6
3|Incredibilmente la chiave che hai trovato apre proprio la porta della cella. Controlli la porta prima di attraversarla?|0|4|5
2|Passerai i tuoi ultimi giorni in questo luogo. RIP!|1|z|z
1|Rovistando nella stanza trovi una chiave. Provi a usarla con la porta?|0|3|2
0|Ti trovi in una cella. Provi a cercare un modo per uscire?|0|1|2
e questo è il programma:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <locale.h>
typedef struct node {
int id;
char *desc;
int final_status; //1 final, 0 non-final
struct node *next_yes;
struct node *next_no;
} node;
FILE *myFile;
int contatore_righe = 0;
char riga[500];
char fp[] = ".\\adventure.txt";
void get_node_data(node *n);
int check_y(char y);
void game(node *i);
node* create_node(int id, char *desc, int final_status, node *next_yes, node *next_no);
int main()
{
//setlocale (LC_ALL,""); //settings per le lettere accentate insieme a #include <locale.h>
myFile = fopen(fp, "r");
while ( fscanf(myFile, "%500[^\n]\n", riga) == 1 )
{
contatore_righe++;
}
fclose(myFile);
printf("DEBUG righe: %i\n", contatore_righe);
//int N;
node **n; // = malloc(N * sizeof(node));
char c1[3]; //indice
char c2[500]; //testo
char c3[2]; //final_status
char c4[3]; //next yes
char c5[3]; //next no
int indice_righe = contatore_righe-1;
myFile = fopen(fp, "r");
while ( fscanf(myFile, "%3[^|]|%500[^|]|%c|%3[^|]|%3[^\n]\n", c1, c2, c3, c4, c5) == 5 )
{
if (atoi(c3) == 1)
*(n+indice_righe) = create_node(atoi(c1), c2, atoi(c3), NULL, NULL);
else
*(n+indice_righe) = create_node(atoi(c1), c2, atoi(c3), *(n+atoi(c4)), *(n+atoi(c5)));
indice_righe--;
}
fclose(myFile);
game(*n);
puts("\nFine!");
return 0;
}
void game(node *i)
{
char answer_y_n;
while (i != NULL)
{
get_node_data(i);
if (i->final_status != 1)
{
scanf("%c", &answer_y_n);
fflush(stdin);
}
if (check_y(answer_y_n))
i = i->next_yes;
else
i = i->next_no;
}
}
node* create_node(int id, char *desc, int final_status, node *next_yes, node *next_no)
{
node *n = malloc(sizeof(node));
n->id = id+1;
n->desc = strdup(desc);
n->final_status = final_status;
n->next_yes = next_yes;
n->next_no = next_no;
return n;
}
void get_node_data(node *n)
{
printf("%d: %s ", n->id, n->desc);
}
int check_y(char y)
{
switch (y)
{
case 'y':
case 'Y':
case 's':
case 'S':
return 1;
default:
return 0;
}
}