feat: Initial commit
This commit is contained in:
103
Laboratorio 7/Esercizio 1/equipArray.c
Normal file
103
Laboratorio 7/Esercizio 1/equipArray.c
Normal file
@@ -0,0 +1,103 @@
|
||||
// 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
|
||||
Reference in New Issue
Block a user