Desculpe pelo título ruim, mas eu não tinha uma maneira melhor de expressá-lo ...
Portanto, existe um jogo incrível da Nintendo (sim!) No Wii chamado WiiPlay . Existem 9 minijogos e o meu favorito é chamado Tanks! . Trata-se de destruir tanques inimigos COM sem se destruir. Aqui está uma captura de tela de um nível:
Uma maneira de destruir tanques é disparando balas. Há um tanque inimigo verde-limão que dispara balas de alta velocidade que ricocheteiam (contra as paredes e os blocos) duas vezes. Você pode ver como o tanque do jogador pode ser destruído instantaneamente se permanecer onde está agora, pois o tanque de cal no centro pode disparar uma bala que segue o caminho verde que desenhei na imagem.
Como programador amador, tenho me perguntado como o tanque de cal pode determinar em qual direção ele deve disparar para ferir o tanque do jogador.
Eu mesmo pensei nisso, mas não criei nenhum algoritmo possível. Vou explicar minhas conclusões caso elas inspirem alguém. Por uma questão de simplicidade durante a minha explicação, presumo que uma parede seja qualquer superfície contra a qual uma bala possa ricochetear . Um retângulo isolado de blocos forma quatro paredes.
Concluí que os 2 pontos nos quais os marcadores de bala sempre se situam em um lado de um paralelogramo ou se tornam vértices opostos de um paralelogramo. O tanque inimigo de tiro e o tanque do jogador que ele visa não são necessariamente os outros 2 vértices, mas definitivamente estão nas linhas colineares dos dois lados do paralelogramo. Aqui está uma ilustração das 4 maneiras possíveis de formar um paralelogramo:
HOR-VER significa que a bala primeiro atinge uma parede horizontal, depois atinge uma parede vertical.
E então eu estou preso. Pensei em mover em torno de uma linha que conecta o tanque inimigo e o tanque do jogador ao redor do mapa para ver se ele forma um paralelogramo com dois golpes em qualquer parede, mas isso nem sempre funciona porque o tanque inimigo e o tanque do jogador não são necessariamente coincide com os vértices do paralelogramo.
Além disso, não tenho certeza do fluxo geral do algoritmo. O algoritmo usa alguma das 2 estruturas a seguir, ou talvez eu esteja errado com ambas?
- Continue descobrindo os caminhos possíveis e sempre marque um como o melhor (pode ser o mais curto, o mais obscuro, o mais inevitável ou uma avaliação combinada e ponderada com base em vários critérios) e esqueça o resto. O que resta depois de todo o cálculo é o melhor a tomar.
- Primeiro, determine todas as paredes primeiro alcançáveis com a bala (a bala não precisa ricochetear em nenhuma outra parede para alcançar cada uma dessas paredes) e, em seguida, determine todos os intervalos alcançáveis em cada uma dessas paredes (às vezes é impossível alcançar um ponto distante na parede). uma parede sem ricochete se outra parede estiver perto de você), em seguida, determine novamente todas as paredes alcançáveis com um ricochete e todos os intervalos alcançáveis nessas paredes. Esses 4 processos podem ser realizados de maneira semelhante ao traçado de raios. Durante cada processo, se o tanque do jogador for atingido por qualquer raio, descubra o caminho da bala de acordo com esse raio.
Na minha opinião, esse algoritmo é difícil de descobrir porque:
- uma bala pode ser disparada em qualquer direção; e
- existem infinitos pontos em qualquer parede, como na matemática, onde existem infinitos pontos em uma linha.
Mas o pessoal da Nintendo fez assim mesmo, então ... alguém com uma ideia?