sebaldar ha scritto:
Danielee ha scritto:
sebaldar ha scritto:
Cosa fa main?
Nulla, l'ho messo solo perchè visto che doveva compilare dovevo aggiungere strutture e funzioni ma se vuoi aggiungo anche la parte del main
bè, se non ti sbatti un po' tu non vedo perché gli altri lo debbano fare per te ?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MIN_2 1
typedef enum{NOPE, ATTACK, SKIP, FAVOR, SEE_THE_FUTURE, SHUFFLE, DJANNI_CARDS, EXPLODING_DJANNI, MEOOOW}Tipo;
typedef struct{
char descrizione[127+1];
Tipo tipo_carta;
}Carta;
struct Nodo{
Carta carta;
struct Nodo *next;
};
typedef struct Nodo Nodo;
void visualizza_lista(Nodo *p);
Nodo *elimina_in_posizione(Nodo *mazzo, Nodo *testa);
Nodo *mischia_mazzo(Nodo *mazzo, int difficolta);
int scelta_mazzo(int difficolta);
Nodo *inserisciNodoInTesta2(Nodo *p, int tipo, char *descrizione);
Nodo *leggi_lista(int );
Nodo *inserisciNodoInTesta(Nodo *, Carta);
int main()
{
int difficolta;
Nodo *mazzo, *mazzo_mischiato;
mazzo=leggi_lista(difficolta);
printf("\n\nMazzo non mischiato = ");
visualizza_lista(mazzo);
mazzo_mischiato=mischia_mazzo(mazzo, difficolta);
printf("\n\nMazzo mischiato = ");
visualizza_lista(mazzo_mischiato);
return 0;
}
Nodo *elimina_in_posizione(Nodo *mazzo, Nodo *testa){
Nodo *p=NULL;
///Se la lista è vuota
if(mazzo->next==NULL){
}
///Se la lista e' composta da più di un elemento
else if(mazzo->next!=NULL || mazzo->next->next!=NULL){
p=mazzo->next;
mazzo->next=mazzo->next->next;
free(p);
}
///Se l'elemento è l'ultimo della lista
else if(mazzo->next!=NULL || mazzo->next->next==NULL){
p=mazzo->next;
free(p);
}
return testa;
}
Nodo *leggi_lista(int difficolta){
int i;
int tipo;
char descrizione[127+1];
int numero_1, numero_2, numero_3;
Carta carta_temporanea;
Nodo *p=NULL;
FILE *fd;
///Scelta del mazzo in base alla difficolta
if(difficolta==1){
fd=fopen("explodingDjanniEasy.txt", "r");
}
if(difficolta==2){
fd=fopen("explodingDjanniMedium.txt", "r");
}
if(difficolta==3){
fd=fopen("explodingDjanniHard.txt", "r");
}
///Lettura del file
fscanf(fd, "%d %d %d\n", &numero_1, &numero_2, &numero_3);
///Caricamento del mazzo nella lista
for(i=0; i<numero_1+numero_2+numero_3; i++){
fscanf(fd, "%d %[^\n]s", &tipo, descrizione);
fscanf(fd, "\n");
carta_temporanea.tipo_carta=tipo;
strcpy(carta_temporanea.descrizione, descrizione);
p=inserisciNodoInTesta(p, carta_temporanea);
}
fclose(fd);
return p;
}
void visualizza_lista(Nodo *p){
printf("\n\n\nInizio mazzo ---> ");
while(p != NULL){
printf("\n%d %s", p->carta.tipo_carta, p->carta.descrizione);
p = p->next;
}
printf("\nFine mazzo\n");
}
Nodo *inserisciNodoInTesta(Nodo *p, Carta carta_temporanea){
Nodo *punt=NULL;
punt=p;
///Funzione usata per caricare il mazzo dal file nella lista
p=(Nodo *)malloc(sizeof(Nodo));
p->carta=carta_temporanea;
p->next=punt;
return p;
}
Nodo *mischia_mazzo(Nodo *mazzo, int difficolta){
Nodo *mazzo_provvisorio = NULL, *testa = mazzo, *testa_2 = NULL, *precedente;
int tipo_nuova_carta,dimensione_mazzo, carta_temporanea, i, j, l=1;
char descrizione_nuova_carta[127+1];
dimensione_mazzo=scelta_mazzo(difficolta);
mazzo_provvisorio = (Nodo *)malloc(sizeof(Nodo));
testa_2 = mazzo_provvisorio;
mazzo_provvisorio = mazzo_provvisorio->next;
for(i=0; i<dimensione_mazzo; i++){
///Scelgo una carta
carta_temporanea = MIN_2+rand()%((dimensione_mazzo-i)-MIN_2+1);
printf("\nCARTA SCELTA = %d", carta_temporanea);
///Scorro la lista fino alla carta scelta
for(j=0; j<carta_temporanea; j++){
precedente = mazzo;
mazzo = mazzo->next;
}
///Inserisco in testa la carta nella nuova lista
tipo_nuova_carta = mazzo->carta.tipo_carta;
strcpy(descrizione_nuova_carta, mazzo->carta.descrizione);
mazzo_provvisorio = inserisciNodoInTesta2(mazzo_provvisorio, tipo_nuova_carta, descrizione_nuova_carta);
printf("\n\nMazzo mischiato = ");
visualizza_lista(testa_2);
printf("%d", l++);
mazzo_provvisorio = mazzo_provvisorio->next;
///Elimino la carta dalla vecchia lista
mazzo = elimina_in_posizione(precedente, testa);
}
free(mazzo);
return testa_2;
}
int scelta_mazzo(int difficolta){
int numero_1, numero_2, numero_3;
FILE *fd;
int dimensione_mazzo;
///Scelta del mazzo in base alla difficolta
if(difficolta==1){
fd=fopen("explodingDjanniEasy.txt", "r");
}
if(difficolta==2){
fd=fopen("explodingDjanniMedium.txt", "r");
}
if(difficolta==3){
fd=fopen("explodingDjanniHard.txt", "r");
}
fscanf(fd, "%d %d %d\n", &numero_1, &numero_2, &numero_3);
dimensione_mazzo=numero_1+numero_2+numero_3;
fclose(fd);
return dimensione_mazzo-1;
}
Nodo *inserisciNodoInTesta2(Nodo *p, int tipo, char *descrizione){
Nodo *testa;
///Funzione usata per inserire le carte mischiate in una nuova lista
p = (Nodo *)malloc(sizeof(Nodo));
testa = p;
p->carta.tipo_carta = tipo;
strcpy(p->carta.descrizione, descrizione);
p = p->next;
return testa;
}