Ho un gruppo di metodi che sarà molto grande. Devo essere in grado di chiamare sistematicamente i metodi da un grande gruppo, in due modi diversi. I metodi creano un nuovo oggetto oggetto con variabili specifiche per il tipo di oggetto creato, ad esempio gomma (); il metodo crea un oggetto con
itemId = 12, weight = 1, name = "Rubber", ...
per oltre 20 variabili. Attualmente sono in grado di chiamarli per nome
object.rubber();
Voglio poterle chiamare per itemId
object.getById(12);
Devo essere in grado di elaborarli per itemId per situazioni come questa:
/* itemId:
1: ruined copper
2: weak copper
3: refined copper
4: ruined iron
5: weak iron
6: refined iron
7: ruined brass
-(More metals in this pattern)-
36: sturdy aluminum
*/
//within furnace class
public void smelt(item input, inventory furnace){
//input is the item to smelt, furnace is the furnace's crucible.
if(input.getId() < 36 && input.getId()%3 = 1){
//if the imput's ID is less than 36, it's a metal, and if ID % 3 = 1, it's a ruined metal, meaning it is smeltable.
furnace.addItem(handler.list.addById(input.getId() + 1))
//add an item to the furnace with an ID one higher than that of the input, which will be a 'weak' metal of the same type
furnace.removeItem(input);
//delete the input item
}
}
I metalli sono tutti ordinati regolarmente, quindi se posso chiamarli per ID sarà possibile manipolarli con un codice molto piccolo, mentre altrimenti il forno avrà bisogno di un'istruzione if per ogni singolo metallo per determinare in che cosa si fonde. Molti altri processi dovranno essere in grado di funzionare in modo simile.
Ho trovato finora due soluzioni possibili:
uno sarebbe usare reflect per chiamare i metodi, ma sono stato avvertito che è notoriamente instabile e difficile da capire.
l'altro sarebbe quello di revisionare il mio attuale sistema e memorizzare le proprietà dell'oggetto su un file di testo, qualcosa del tipo
Ruined_Copper false 4 256 ...
Weak_Copper false 4 128 ...
etc.
e quindi fare in modo che una persona che ha aperto il file apra il file e contenga le linee finché il numero di riga non ha eguagliato il valore itemId di destinazione. Dividerebbe quindi la linea per spazio e assegnerebbe i valori alle variabili, cioè:
newItem.setName(lineOutput(1));
newItem.setIsContainer(lineOutput(2));
...
Ciò produrrebbe un elemento con
name=Ruined_Copper, isContainer = false, etc.
Preferirei scoprirlo all'inizio dello sviluppo, quindi non dovrò modificare migliaia di elementi in un nuovo formato in futuro. Quale di questi andrà più veloce? Quale sarà più stabile? C'è un modo migliore tutto insieme?
EDIT: Per chiarire, mi rendo conto che sarebbe una cattiva idea avere metalli 0-36, legni 37-56, ecc. Il mio obiettivo è permettere che gli oggetti sistematici o creati dai giocatori vengano aggiunti dalle azioni del giocatore in gioco , quindi il prodotto finito avrà spazio tra le categorie, cioè 0-60 sono metalli, 61-999 sono vuoti, 1000-1085 sono tipi di legno, 1086-1999 sono vuoti, ecc.