Progettare Snake AI


9

Sono nuovo di questo stackechange di Gamedev ma ho già usato i siti di matematica e CS.

Quindi, sono in competizione per creare l'IA per un serpente che competerà con altri quattro serpenti in round di 5 minuti in cui le regole sono molto simili al tradizionale gioco del serpente Nokia, tranne per il fatto che ci sono cinque serpenti, il tabellone è 30x30 e ci sono una serie di piccoli ostacoli sul campo.

Come il gioco Nokia, il tuo serpente cresce quando arrivi alla frutta e se ti sbatti contro te stesso, un altro serpente o il muro muori. Il gioco viene eseguito con un ritardo di 30 ms tra le mosse e il server invia il nuovo stato di gioco ogni 50 ms che il codice deve analizzare e cosa no e genera la mossa successiva.

Il vincitore è il serpente che ha avuto la lunghezza più lunga in qualsiasi punto del gioco. I demolitori sono decisi dalle uccisioni.

Finora quello che ho fatto è stato implementare una ricerca del grafico A * da ciascun serpente per determinare se il mio serpente è il più vicino alla mela e se lo è, vale per la mela. Altrimenti, ho creato un piccolo algoritmo pulito per determinare l'area più vuota della tavola, che il mio serpente preferisce, per anticipare la prossima mela.

Oltre a questo, ho alcuni piccoli controlli di sopravvivenza per assicurarmi che il mio serpente non stia camminando in una trappola che non può uscire e se si blocca, ho qualcosa per dargli una migliore possibilità di uscire.

...

Ad ogni modo, ho testato il mio serpente su un server di prova e funziona abbastanza bene. In generale, la mia strategia di andare per la mela solo quando è una cosa certa e trovare spazio quando non la fa crescere più velocemente di qualsiasi altro serpente (alcuni serpenti fanno una cosa simile ma spesso vanno solo nel mezzo o in un angolo) a volte vince questi giochi di prova, ma il più delle volte è battuto dallo stesso serpente che sembra avere un vantaggio in termini di sopravvivenza (il mio serpente cresce più velocemente ma poi muore in qualche modo e quest'altro serpente avanza lentamente e vince sulla coerenza.

Quindi mi chiedevo quali idee qualcuno dovesse provare a migliorare il mio serpente. O forse idee su un nuovo approccio da adottare. Le mie funzioni e classi sono buone, quindi i cambiamenti che potrebbero sembrare drastici non dovrebbero essere così male. Incoraggio tutte le idee.

qualche idea?

Risposte:


5

Una buona strategia difensiva potrebbe essere quella di fare una forma perfetta (quindi la tua testa e il retro sono sempre a 1 spazio di distanza l'uno dall'altro, e fai un quadrato pieno o qualsiasi cosa sia possibile formare alla tua lunghezza), questo ti renderebbe praticamente immortale poiché nessun serpente potrebbe mai entrare nella tua area chiusa e non ti imbatterai mai in te stesso (a meno che una mela non sia in qualche modo generata in bocca, ma immagino che sia impossibile se non c'è spazio).

Questo lo farebbe in modo che se la mela appaia effettivamente nella tua area chiusa potresti essere programmato per non farlo e gli altri serpenti probabilmente moriranno nel tentativo di ottenerlo, quindi dopo un po 'di tempo potresti farlo in un modo tale da passare tornare nella tua forma il meglio possibile (potrebbe essere un po 'un algoritmo complicato ma sembra fattibile)

Quando andare per le mele dipenderebbe solo da quanto sono lontane, forse se sei il più vicino con un buon margine potresti andare per esso, ma altrimenti rimani conservatore, difficile da dire che probabilmente dovresti modificarlo in base a tentativi ed errori , ma penso che sarebbe una buona strategia.


1
Quindi, in sostanza, il suo "serpente" dovrebbe "tartaruga". xD +1 buona idea.
Cypher

Buona Ma ci sono ostacoli sul tabellone. Quindi, altri programmatori di serpenti devono aver fatto i loro serpenti per verificare se c'è un'ostruzione (che si tratti di muro o altro serpente che racchiude la mela). Potrebbero non venire e morire. Una cosa che si può fare per evitare questo problema è avere una notevole spaziatura tra testa e coda.
Shashwat,

hmm idea interessante, penso che potrei implementare qualcosa del genere per quando il mio serpente è solo in giro in attesa che la prossima mela si riproduca .. ahah, sono leggermente preoccupato per la generazione di mele nella mia bocca, che si tradurrebbe in certo la morte e questi giochi sono spesso decisi da una morte prematura
Rawb,

@Ronald In realtà, se rilevi una deposizione di mele in bocca, potresti semplicemente girarti verso l'interno e all'indietro verso l'esterno e continuare, poiché l'IA ha un riflesso perfetto, in realtà dovrebbe essere facile porre rimedio (e potrebbe persino aggiustarsi) in base al modo in cui lo implementi.
Kevin DiTraglia,

0

Il serpente dovrebbe adattare la sua strategia alla sua lunghezza attuale.

Un serpente molto lungo può usare il suo corpo per recintare gli avversari. Ciò significa che dovrebbe fare un sigillo con un muro.

Se il serpente sta viaggiando verso est, con una mela a nord-est di esso, dovrebbe viaggiare fino al muro prima di girare a nord, quindi le possibili rotte per altri serpenti sono fortemente limitate.

  0123456789
a ··········
b ··········
c ········A·
d ··········
e ooooooC···
f o·········
g o·········
h oooooooo··
i ··········
j ··········

Questo serpente con la testa C, dovrebbe girare a nord a e9, non a e8, in modo che qualsiasi avversario al di sotto di esso, sarà intrappolato e incapace di mangiare le mele che si generano sopra la linea 'e'.

Più grande è l'area che puoi tagliare e più a lungo puoi tenerla, meglio è.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.