"Quanto sono intelligenti i videogiochi di strategia?" by Alessio Falsetti.
Analisi e sviluppo dell'AI per i videogichi di strategia. Confronto tra i modelli per Real Time e Turn Based. Techiche, trucchi e segreti che si nascondono dietro l'intelligenza di un esercito virtuale, la gestione delle risorse, le costruzioni e l'evoluzione di un impero. Come l'AI gestisce e pianifica una strategia e come mette in campo le proprie tattiche. E in più, attraverso una case history di giochi più o meno noti, l'analisi di come si è evoluto nel tempo con tutte le sperimentazioni, i successi e i flop che da sempre hanno caratterizzato il genere.
27. // Di cosa ho bisogno? Di esploratori.
// Per ogni turno effettua questo controllo
if (EsploratoriDisponibili() > 0) {
PortaciFuoriMrSulu();
} else {
if (EsploratoriInProduzione() == 0) {
AggiungiAllaCodaDiProduzione();
}
}
// Ripeti per ogni turno, fino a che non raggiungo
// un numero massimo di esploratori
28. // Per incrementare potere ed influenza devo colonizzare
// nuove aree e far crescere le mie forze.
// Di cosa ho bisogno? Unità di colonizzazione
if (ColonizzatoriDisponibili() > 0) &&
(TerreniDisponibili() > 0) {
RaggiungiTerrenoDaColonizzare();
Colonizza();
} else {
if (ColonizzatoriInProduzione() == 0) {
AggiungiAllaCodaDiProduzione();
}
}
// Ripeti per ogni turno, fino a che non raggiungo
// un numero massimo di nuove colonie
29. // Sfruttamento e raccolta risorse
// Di cosa ho bisogno? Edifici o unità esterne
foreach Villaggio v {
if (v.NecessariEstrattoriRisorse() == true) &&
(v.SpaziDisponibili() > 0) {
v.CostruisciEstrattore();
} else {
e = v.NuovoEdificioPrioritario();
if (v.NumeroEdifici(e) == 0) {
v.Costruisci(e);
}
}
}
// In base alla civiltà e all’obiettivo
r = NuovaRicercaPrioritaria();
AvviaRicerca(r);
// Ripeti per ogni turno, fino a che non raggiungo il
// un numero massimo di edifici che posso costruire
30. // Come posso difendere i miei territori?
// A chi devo menare?
if (NuovoSoldatoPronto() == true) {
s = NuovoSoldato();
Armata.Aggiungi(s);
Armata.DefinisciRuolo(s);
Armata.DefinisciFormazione();
Armata.DefinisciComportamento(s);
} else {
if (SoldatiInProduzione() == 0) {
s = ScegliNuovoSoldato();
AggiungiAllaCodaDiProduzione(s);
}
}
31. a. In base allo stato della AI, viene selezionata quale unità costruire.
b. La costruzione dell'unità viene inserita nel cantiere libero che
permette una maggiore velocità di realizzazione.
c. Il primo elemento della coda è selezionato e valutato. Viene
costruito se:
c1. Ci sono meno di X villaggi (o pianeti, o città) per ogni
oggetto? (es. ci sono 13 villaggi e noi abbiamo già 4
unità di questo tipo, il valore di VillaggiPerItem = 3,
quindi vogliamo costruirne un altro.
Se il VPI < (NumVillaggi / NumUnità di quel tipo), allora
costruisci.)
d. Se il valore di DeviAverneAlmeno è > di 0, controlliamo se la
condizione del VPI è ancora vera. Se si, allora costruiscine un altro,
se no, va al prossimo elemento da costruire. Il loop continua fino a che
la condizione è falsa, o quando è stato raggiunto il valore di
DeviAverneAlmeno.
e. Quando l'ultimo elemento è stato raggiunto, ricomincia da capo.
32. a. La tecnologia necessaria alla costruzione è disponibile?
a1. Si, vai avanti
a2. No, non costruire
b. L'AI si trova in uno stato compatibile?
b1. Si, vai avanti
b2. No, non costruire
c. C'è spazio nel villaggio per costruire il nuovo edificio?
c1. Si, vai avanti
c2. No, cerca un altro villaggio in cui costruirlo
d. Se l'edificio ha una abilità a livello di Regione, ce ne sono altri?
d1. Si, non è necessario costruirlo
d2. No, vai avanti
e. Tutti i criteri di valutazione sono validati, procedi con la
costruzione.
33. a. Valuta le mie forze e assegna un punteggio A
b. Valuta le forze nemiche, assegnando un punteggio B
if A > B then Spacca!
if A = B then
if Civ-Aggressiva o AttaccoNecessario then attacca
else Aspetta e cerca rinforzi
if A < B then Ritirati
34. a. disporsi in formazione
b. attuare un movimento primario
c. attuare un eventuale movimento secondario
d. processare una lista di controlli sull'obiettivo primario
d1. è armato?
d2. è più danneggiato?
d3. è più forte?
d4. è il più vicino?
e. determinare la priorità d'attacco
e1. una unità nemica
e2. le mura di difesa
e3. le trappole
e4. i trasporti
e5. i villaggi
...
f. bersaglio trovato?
f1. Si e il bersaglio è a tiro?
f11. spara
f2. No, muoviti verso il bersaglio, fino a che non è verificata la
condizione di movimento primaria
g. valuta i danni subiti. Sono troppo danneggiata per continuare?
g1. Si, tenta la fuga se puoi muoverti
g2. No, continua