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

109 lines
2.7 KiB
C

// Laboratorio 6 - Esercizio 3 - 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"
#include "inv.h"
/* ADT di prima classe collezione di oggetti di equipaggiamento */
typedef struct equipArray_s {
int inUse;
inv_t *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;
}
void equipArray_apply_modifier(stat_t *stats, equipArray_t equipArray) {
for (int i = 0; i < equipArray_inUse(equipArray); i++) {
stat_sum(stats, &equipArray->items[i]->stat);
}
}
/* 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);
inv_print(fp, 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;
}
inv_t *selected = invArray_getByIndex(invArray, index);
equipArray->items[(equipArray->inUse)++] = selected;
}
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