// Laboratorio 7 - Esercizio 1 - equipArray.c // Matteo Schiff - s295565 #ifndef EQUIPARRAY_C_DEFINED #define EQUIPARRAY_C_DEFINED #include #include #include #include "invArray.h" #include "equipArray.h" /* ADT di prima classe collezione di oggetti di equipaggiamento */ typedef struct equipArray_s { int inUse; int items[EQUIP_SLOT]; } *equipArray_t; /* creatore e disruttore */ equipArray_t equipArray_init() { equipArray_t new = malloc(sizeof(struct equipArray_s)); new->inUse = 0; return new; } void equipArray_free(equipArray_t equipArray) { free(equipArray); } /* quanti equipaggiamenti sono in uso */ int equipArray_inUse(equipArray_t equipArray) { return equipArray->inUse; } int equipArray_getEquipByIndex(equipArray_t equipArray, int index) { return equipArray->items[index]; } /* scrittura su file */ void equipArray_print(FILE *fp, equipArray_t equipArray, invArray_t invArray) { for (int i = 0; i < equipArray->inUse; i++) { printf(" %d: ", i); invArray_printByIndex(fp, invArray, equipArray->items[i]); } } void equipArray_insert(equipArray_t equipArray, invArray_t invArray) { char name[LEN+1]; if (equipArray->inUse >= EQUIP_SLOT) { puts("Tutti gli slot sono occupati"); return; } puts("Inserisci il nome dell'oggetto da equipaggiare: "); scanf(" %50s", name); int index = invArray_searchByName(invArray, name); if (index == -1) { puts("Oggetto non trovato"); return; } equipArray->items[(equipArray->inUse)++] = index; } void equipArray_remove(equipArray_t equipArray, invArray_t invArray) { int index; if (equipArray->inUse <= 0) { puts("Tutti gli slot sono vuoti"); return; } puts("Oggetti equipaggiati: "); equipArray_print(stdout, equipArray, invArray); puts("Inserisci l'indice dell'oggetto da rimuovere: "); scanf(" %d", &index); if (index < 0 || index >= equipArray->inUse) { puts("Indice oggetto non valido"); return; } equipArray->items[index] = equipArray->items[--(equipArray->inUse)]; } /* modifica equipaggiamento scegliendo un oggetto da inventario */ void equipArray_update(equipArray_t equipArray, invArray_t invArray) { char selection; puts("Vuoi inserire o rimuovere un oggetto? Rispondi (i) o (r): "); scanf(" %c", &selection); if (selection == 'i') { equipArray_insert(equipArray, invArray); } else { equipArray_remove(equipArray, invArray); } } /* Si possono aggiungere altre funzioni se ritenute necessarie */ #endif