1
0
Files
2024-03-22 17:37:24 +01:00

104 lines
2.6 KiB
C

// Laboratorio 7 - Esercizio 1 - equipArray.c
// Matteo Schiff - s295565
#ifndef EQUIPARRAY_C_DEFINED
#define EQUIPARRAY_C_DEFINED
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#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