Sto cercando di creare un'IA che giochi. In realtà, sto giocando con StarCraft e MineCraft che sono completamente diversi tipi di giochi. Inoltre, utilizzo diversi linguaggi di programmazione per entrambi e uno è multi-thread (java), altri single-threaded (Node.js) guidati dagli eventi.
Nonostante tutte queste differenze, affronterò lo stesso problema: come posso creare un'intelligenza artificiale in grado di gestire le attività in ordine ragionevole, ma anche interrompere le attività in caso di necessità e tornare ad esse in seguito? Come creare una catena di compiti ragionevole (dove un'attività causa un'altra attività secondaria)?
Esempi di sopra possono essere:
- In Minecraft, stai scavando un blocco e sei attaccato da un mostro
- In stelline stai conducendo un attacco e una posizione critica nella tua base viene attaccata
- In minecraft, il compito di tagliare gli alberi è causato dall'attività di costruzione della casa - il bot deve ricordare perché sta facendo ciò che sta facendo.
- Nella stregoneria, alcuni edifici sono appena costruiti per sbloccare tipi di soldati
Stavo solo giocando con l'idea, ma ho continuato a scrivere e cancellare codice completamente stupido ...
Questo è quello che ho adesso, ma non ha senso. Posso vedere molte situazioni che non saranno risolte usando questo modello.
/***
* Task pseudo class. After finishing the task, this task notifies the parent task.
* Arguments:
* action - function callback that will execute. The callback must call the finished() method in the end. The callback will receive
* this task's object as a first argument.
**/
function Task(action, parent, name) {
this.action = action;
this.after = after;
this.name = name||"Void task";
}
Task.prototype.start = function() {
console.log("Task started...");
try {
this.action(this);
}
catch(e) {
console.log("The task action has thrown an error: "+e);
}
}
Task.prototype.finished = function() {
console.log("Task over.");
}
//Override this
Task.prototype.pause = function() {};
Temo di dover leggere molte cose al riguardo. Ma ci sono delle idee generali conosciute con cui posso iniziare?