104 lines
2.6 KiB
C
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
|