Un sistema 'compito' che ha un finale, per essere pronto per il prossimo compito

3

Voglio creare un sistema, in modo che ci siano determinati compiti. Ad esempio, parliamo di un gioco. Voglio farlo in modo che ci siano più di 100 attività che fanno cose diverse, ma quando il livello magico del giocatore è 5, farà il compito magico, se l'abilità di combattimento del giocatore è di livello 5, combatterà. Ce l'ho già, tuttavia qui è il trucco. Voglio farlo in modo che una volta eseguito, il task abbia un 'finale'. Quindi, farà qualcosa prima che alla fine venga ucciso.

Il mio codice finora:

for (GameTask a : s.gameTasks) {
    if (a != null) {
        if (a.validate()) {
            a.execute();
        }
    }
}

Circonderà tutte le attività ed eseguirle, tuttavia come posso implementare un 'finale' ad esso, in modo che sia pronto per il prossimo compito? Spero di averlo scritto chiaramente in quanto l'inglese non è la mia prima lingua.

tl; dr, voglio aggiungere un 'fine' a ogni attività in modo che possa essere ucciso e possa essere pronto per il prossimo compito.

    
posta user131733 18.05.2014 - 18:34
fonte

2 risposte

1

Non sono sicuro di cosa intendi con la fine di un compito ed essere pronto per il prossimo, ma mi sembra che tu voglia solo fermare ogni attività in modo che possa continuare con quella successiva del ciclo.

Se questo è il caso, probabilmente non dovrai fare in modo che la classe GameTask esegua Runnable in modo che tu possa eseguirli usando la classe Executors, qualcosa del genere:

    ExecutorService executor = Executors.newFixedThreadPool(5);
    for (GameTask task : s.gameTasks) {
        executor.execute(task);
    }

Quindi, a seconda di cosa fa ciascuna attività, potrebbe essere più o meno complicato implementare il metodo dell'attività finale, ma in linea di massima il modo più semplice è che ogni attività abbia un ciclo con un booleano che determina se deve continuare ad essere eseguito . Potresti quindi implementare un metodo "endTask" nel GameTask che imposterà su quella variabile.

Puoi vedere un esempio in questa altra domanda: link

    
risposta data 01.09.2014 - 21:17
fonte
1

Ogni GameTask è meno simile a un "compito" e più simile a un "processo"? Di solito penso a un compito come fare una cosa e poi fermarsi. È solo un passo in un processo più ampio. Se vuoi aggiungere più di un passaggio ai tuoi GameTasks, allora diventano come piccoli processi.

Ci sono molti modi diversi per affrontarlo, ma un'idea è quella di trasformare ogni GameTask in una macchina a stati finiti - cioè, il "compito" è in qualche stato, e fa un passo ogni round, e (forse ) transizioni verso un nuovo stato. Quando finalmente arriva allo stato terminale, può semplicemente cadere fuori dalla lista.

(È un modo molto comune per gestire indipendentemente gli oggetti in esecuzione nella programmazione del gioco, ma ci sono altri modi per farlo - come quando l'attività viene eseguita, si spinge o una nuova attività nella lista per il prossimo round.)

    
risposta data 31.12.2014 - 02:34
fonte

Leggi altre domande sui tag