2010-06-28 8 views
15

Sto implementando una piccola strategia basata sulla griglia basata sulle virate di Final Fantasy.AI per un gioco di finte tattiche fantasy

Avete qualche idea su come posso affrontare il processo di selezione, movimento e selezione degli obiettivi?

Sto considerando di avere le decisioni disconnesse, ma tutte queste 3 decisioni sono in gran parte accoppiate. (ad esempio non riesco a decidere dove muovermi a meno che non sappia chi sto per attaccare, e quale gamma l'abilità userò ha, e viceversa, non posso decidere chi attaccare a meno che non conosca quanti turni mi ci vorrà per raggiungere ogni obiettivo)

Voglio spostarmi verso un sistema unificato, ma provare le cose dalla ricerca sul campo Potenziale usato in un modo come l'IA di Killzone 1 mi ha bloccato sui massimi locali.

Aggiornamento === 1

Attualmente sto cercando di utilizzare i potenziali campi/influenza mappe per generare i dati prendo decisioni su.

Non ho idea di come gestire molte abilità e abilità che non danneggiano ma piuttosto buff/debuff o alterano il mondo.

Qualcuno altrove ha suggerito di utilizzare la ricerca dell'albero Monte Carlo, attualmente utilizzata nei giochi Go.

Credo che lo spazio che i miei attori useranno non è buono per questo, poiché molte mosse nel gioco non risultano in una posizione da cui si può attaccare e influenzare il mondo (io sono in un mondo più grande di Final Fantasy Tactics)

in Final Fantasy Tactics potrebbe essere applicato con successo, anche se il fattore di ramificazione è molto più grande di quella del 9x9 Go (da quanto ho capito)

===

Grazie in anticipo , Xtapodi.

ps.1 - Un problema è che per sapere con esattezza quanto lontano un nemico è necessario per trovare il percorso da lui, perché anche se il nemico è vicino, una scogliera invalicabile potrebbe separarci e impiega 4 turni per aggirare. O peggio, un'unità sta bloccando la strada per dire un ponte quindi non c'è davvero modo di raggiungerlo.

risposta

12

Un approccio che ho usato è quello di fare un sistema a due passaggi.

Per prima cosa, scopri dove può andare la tua unità. Usa A * o qualsiasi altra cosa per contrassegnare il terreno per vedere quanto lontano può muoversi l'unità in questo turno.

Una volta che lo sai, passa attraverso le tue tattiche disponibili (attacco in mischia, cura unità amiche, qualunque cosa) e assegna una funzione di fitness per tutti gli usi disponibili della tattica. Se passi sul terreno segnalato, puoi determinare molto rapidamente qual è il tuo spazio di possibili tattiche.

Questo ti dà un elenco di tattiche disponibili e le loro funzioni di fitness per ogni mossa. Seleziona il migliore o randomizza dall'alto. Se non ci sono tattiche disponibili, ripeti il ​​processo contrassegnando il terreno per due mosse, e così via.

Quello che intendo per funzione di fitness è decidere il "valore" di eseguire la tattica su una certa unità o posizione. Ad esempio, la tua fase di decisione tattica di "guarire una unità amica" potrebbe passare attraverso tutte le unità amiche. Se un'unità amica si trova nel raggio d'azione (cioè è raggiungibile da una posizione raggiungibile dall'unità), aggiungila all'elenco di possibili tattiche e assegnagli un punteggio di idoneità pari, ad esempio, a 100 * (1,0 unità di salute), dove la salute delle unità varia da 0 a 1. Quindi, la cura di un personaggio fino al 10% di salute rimanente sarebbe di 90 punti, mentre un'unità solo del 5% ne valeva solo 5, e l'unità non considererebbe nemmeno la guarigione come non danneggiata unità. Le unità speciali (ad esempio, le unità dello scenario "Proteggi il boss" necessarie per mantenere le condizioni di vittoria) potrebbero avere un numero di base più alto, in modo che ricevano più attenzione da unità amiche.

Analogamente, la fase di decisione "attacco corpo a corpo" passerebbe attraverso tutte le unità nemiche raggiungibili, calcolerebbe il danno probabile e la confronterebbe con la salute dell'unità.Dare ad ogni unità una "desiderabilità" per attaccare e moltiplicarla per la percentuale di salute rimanente che probabilmente faresti, e hai una funzione di fitness piuttosto dettagliata che favorisce l'eliminazione di unità quando puoi, ma continua a valere dopo un valore elevato obiettivi.

Utilizzando un processo come questo, si otterrà un elenco di opzioni come "Passare alla posizione A e guarire unità amiche B: 50 punti", "Passare alla posizione C e attaccare unità nemica D: 15 punti", ecc All'improvviso, è davvero facile scegliere una tattica.

Ulteriori dettagli possono essere aggiunti moltiplicando l'idoneità della tattica per l'idoneità per il percorso che dovresti intraprendere per implementarla. Per esempio, se il luogo in cui dovresti muoverti per curare un'unità amica ti mette in grave pericolo (cioè, in piedi su uno spazio di lava o qualcosa del genere), potresti farlo moltiplicando l'idoneità di quella tattica per .2 o giù di lì, in modo che l'unità possa ancora considerarlo, ma solo se è davvero importante. Tutto ciò che serve è scrivere un algoritmo per valutare l'idoneità di un dato luogo, e potrebbe essere semplice come un numero di "terreno desiderabile" pre-calcolato o complesso come mantenere "mappe delle minacce" di unità nemiche.

La parte difficile, naturalmente, è trovare le giuste misure per rendere il motore intelligente. Ma questa è la parte divertente del tuo sistema da modificare.

+0

Grazie mille cc per la risposta dettagliata. Mi sono spesso avvicinato a ciò che descrivi, ciò che è un grande intuito è che tu espandi il tuo spazio di ricerca se non trovi nulla di interessante. Come prenderesti in considerazione le posizioni senza azioni che offrono un vantaggio tattico. Ad esempio hai un cavaliere e 2 arcieri, il cavaliere si caricerebbe molto al di fuori della portata e gli arcieri possono essere d'aiuto nel tuo modello. Viceversa se si aggiunge la capacità di stare in piedi da qualche parte, allora come si decide di espandere il proprio spazio di ricerca. – Xtapodi

+0

Gestirlo dando idoneità al terreno che favorisce il comportamento desiderato. Per i combattenti corpo a corpo, le posizioni vicine al nemico che hanno una forma fisica più elevata avvicinano il combattente, ma aggiungendo "unità vicine a unità amiche" mantiene le unità unite. Livelli le considerazioni sulla forma fisica e le tue unità diventano intelligenti, anche se non guardi al futuro. È anche facile cadere in tattiche specifiche con questo sistema. Se hai un livello con un ponte levatoio sollevato, aggiungi una funzione fitness per il percorso del meccanismo di abbassamento. –

1

Una buona domanda le risposte possono essere dappertutto. Personalmente, non ho molta esperienza con questo, ma stabilirò una strategia sul concetto non sulla distanza.

Si sta per creare una macchina a stati per ciascun NPC. Prevede un personaggio da attaccare tramite alcune impostazioni.

Ad esempio, un PNG viene contrassegnato come Attacco più debole o Attacco più forte o Attacco più ferito. Quindi proverei a posizionarli in modo tale da poter danneggiare il bersaglio desiderato.

Se hai anche guaritori puoi fare la stessa cosa in senso inverso per il bersaglio del guaritore.

Il cambio di destinazione sarà una parte importante di questo sistema. Quindi vorrai pensarci. Una versione semplice è quella di rivalutare il cambiamento di destinazione una determinata percentuale dei turni.

Infine, aggiungerei possibilità casuali nel sistema.Ad esempio, un personaggio potrebbe essere impostato come segue

Attacco debole .25 Attacco più forte .50 attacco più feriti .25

Cambio di destinazione 0,1

Quando è il momento di attaccare. Si genera un numero casuale da 0-1. Se è sotto di te, cambia bersaglio, cambia bersaglio generando un altro numero casuale di quale bersaglio attaccare.

È possibile iniziare a calcolare la distanza nel sistema aumentando le percentuali della modalità di attacco. Ad esempio se ci vorrebbero 3 turni per attaccare il più ferito. Diminuisci la percentuale di essere bersagliato dividendo quel valore per 3 e distribuendo la differenza alle altre due possibilità.

+0

Grazie per l'ottimo input di madmik3. Mi piacciono molte delle idee che proponi, la mia mentalità attuale si basa su un algoritmo avido che sceglie sempre la migliore azione in questo turno, che potrebbe essere ampiamente viziata se vista da un giocatore. Sul tuo ultimo paragrafo, il fatto è che potrei essere vicino a un avversario ma in realtà separato da un fiume che impiega 3 turni per attraversare, suggeriresti di trovare il percorso per ogni possibile bersaglio (costoso) alla selezione del bersaglio, ma tieni il bersaglio selezione da accadere in ogni turno per bilanciare il carico di esecuzione? – Xtapodi

+0

@Xtapodi: i giochi di strategia in tempo reale implementano routine di individuazione dei path per tutte le loro unità senza molti problemi. Il costo di implementare le routine di identificazione dei percorsi per il numero molto più piccolo di unità in un gioco in stile FFT a turni, dove il tempo di calcolo è molto meno di un problema, mi sembra abbastanza trascurabile, anche se stai controllando i percorsi a tutti i possibili bersagli. In effetti, suggerirei di farlo in questo modo, perché puoi calcolare, in base ad altri fattori come la salute dell'unità del giocatore, ecc., Se le unità nemiche dovrebbero spostarsi altrove piuttosto che concentrarsi sull'unità PC più vicina. – JAB

+0

@JAB: Grazie per il tuo commento. Quello che dici di RTS potrebbe essere vero (dipende dal gioco), ma ci sono voluti alcuni mesi di lavoro da persone che avevano già molta esperienza. Sì, essere basato su turni mi dà molto più tempo per elaborare. Consiglieresti di eseguire un Dijkstra da ogni unità giocatore (attualmente 4 - 5) e poi lasciare che l'IA lavori su quei dati? – Xtapodi

3

Se il terreno in cui si svolge la battaglia è predeterminato o non troppo largo, there è un articolo sul ragionamento del terreno in FPS che può essere utilizzato come base per un gioco a turni.

In breve, si calcola per ciascuna cella della mappa un insieme di valori, ad esempio l'idoneità allo scatto in una determinata direzione, la protezione, la visibilità ... e così via. l'intelligenza artificiale può quindi utilizzare questi valori per scegliere un'azione corretta. Ad esempio, il combattente camminerà il più rapidamente possibile verso il nemico, usando la protezione se disponibile, mentre il ladro intraprenderà un percorso in cui la visibilità dalla direzione nemica sarà più bassa possibile, con l'obiettivo di attaccare dal fianco o dal retro.

se il terreno è casuale e/o troppo largo, il pre-calcolo può essere troppo lungo per essere utile, comunque.

riguarda Guillaume

+0

Grazie, Guillaume, per la risposta, sto ancora leggendo il giornale e sto pensando a come e se posso applicarlo. Ho la sensazione che per alcune cose avere dati approssimati possa sembrare davvero brutto in questo tipo di gioco, ad esempio la linea di vista. – Xtapodi

+0

sì e no. non hai linea di vista, solo il fatto che la cella su cui si trova il nemico ha una bassa visibilità a sinistra. Quindi puoi usarlo per frenare la ricerca del tuo percorso verso questo lato del nemico. Un altro esempio: sapere che il nemico dovrà passare da un'area e sapere che si tratta di una posizione di tiro molto buona per quest'area (ad esempio, buona visibilità per quest'area, molti piccoli ostacoli in questa direzione, basso accesso o visibilità in altre direzioni) può essere utile per un cecchino AI :) Ma è effettivamente necessario verificare la reale linea di vista –

Problemi correlati