Ci scusiamo per il titolo scarso, ma non avevo un modo migliore per esprimerlo ...
Quindi c'è questo fantastico gioco di Nintendo (sì!) su Wii chiamato WiiPlay . Ci sono 9 minigiochi e il mio preferito è chiamato Serbatoi! . Si tratta di distruggere i carri armati nemici della COM senza farsi distruggere. Ecco uno screenshot di un livello:
Unmodoperdistruggereicarriarmatièsparandoproiettili.C'èquestocarroarmatonemicoverdelimechesparaproiettiliadaltavelocitàcherimbalzano(contromurieblocchi)duevolte.Puoivederecomeilcarroarmatodelgiocatorepuòesseredistruttoistantaneamenteserimanenelpuntoincuisitrovaora,poichéquelserbatoiodicalcenelcentropuòsparareunproiettilechesegueilpercorsoverdechehodisegnatosull'immagine.
Comeprogrammatoredilettantemisonochiestocomepuòilcalcedeterminareladirezioneincuidovrebbespararepercolpireilserbatoiodelgiocatore.
Cihopensatoanch'iomanonhotrovatonessunalgoritmopossibile.Spiegheròlemieconclusioninelcasoincuiispirinoqualcuno.Persemplicità,durantelamiaspiegazione,presumochewallsiaqualsiasisuperficiecontrocuiunproiettilepuòrimbalzare.Unrettangoloisolatodiblocchiformaquindiquattropareti.
Hoconclusochei2puntiincuiilproiettilerimbalzasitrovanosempresuunlatodiunparallelogrammaodiventanoverticioppostidiunparallelogramma.Iltanknemicochesparaeiltankdelgiocatorechemiranonsononecessariamenteglialtri2verticimasitrovanosicuramentesullelineechesiallineanosuunodeiquattrolatidelparallelogramma.Eccoun'illustrazionedei4possibilimodiincuiunparallelogrammapuòessereformato:
HOR-VER significa che il proiettile colpisce prima un muro orizzontale, poi colpisce un muro verticale.
E poi sono bloccato. Ho pensato di muovere attorno a una linea che collega il serbatoio nemico e il serbatoio del giocatore intorno alla mappa per vedere se forma un parallelogramma con due colpi con qualsiasi muro, ma questo non funziona sempre perché il serbatoio nemico e il serbatoio del giocatore non sono necessariamente coincidente con i vertici del parallelogramma.
Inoltre, non sono sicuro del flusso generale dell'algoritmo. L'algoritmo prende una delle seguenti 2 strutture, o forse ho torto con entrambe queste cose?
- Continua a cercare i possibili percorsi e segna sempre uno come migliore (può essere il più breve, il più oscuro, il più ineluttabile, o una valutazione combinata e ponderata basata su più criteri) e dimentica il resto. Quello che rimane dopo tutto il calcolo è il migliore da prendere.
- Determina in primo luogo tutti i muri prima raggiungibili con il proiettile (il proiettile non deve rimbalzare contro nessun altro muro per raggiungere ognuna di queste mura), quindi determinare tutti gli intervalli raggiungibili su ciascuna di queste mura (a volte è impossibile raggiungere un punto lontano su un muro senza rimbalzo se un altro muro si trova vicino a te), quindi determinare nuovamente tutte le pareti raggiungibili con un rimbalzo e tutte le distanze raggiungibili su queste pareti. Questi 4 processi possono essere eseguiti in modo simile al ray-tracing. Durante ogni processo, se il serbatoio del giocatore viene colpito da qualsiasi raggio, individua il percorso del proiettile secondo quel raggio.
Secondo me, questo algoritmo è difficile da capire perché:
- un proiettile può essere sparato in qualsiasi direzione; e
- ci sono infiniti punti su qualsiasi parete, come in matematica, dove ci sono infiniti punti su una linea.
Ma la gente Nintendo l'ha fatto comunque, quindi ... qualcuno con un'idea?