Estou criando um jogo de estratégia bidimensional baseado em turnos usando c ++ e SFML-2.0. O movimento é baseado na distância, e não na grade, com várias peças diferentes em forma de triângulo que, em um determinado turno, cada uma pode girar no lugar ou avançar.
O movimento funcionará de tal maneira que o jogador selecione um local para a peça mover, o que gera um caminho potencial para a peça seguir. Uma vez que o jogador confirme sua decisão, a peça se moverá ao longo desse caminho até o local desejado. Os caminhos são limitados por dois fatores: distância, a distância que uma peça pode percorrer, levando em consideração todas as curvas (portanto, se houver uma curva, será o comprimento ao longo da curva e não diretamente de um ponto a outro); e ângulo de direção, até que ponto a peça pode girar em qualquer ponto (e até todos) enquanto se move (por exemplo, de -30 a 30 graus).
Minha pergunta é: como devo determinar a variedade de locais em potencial que o jogador pode selecionar para mover a peça?
Não tenho muita certeza de quais equações e / ou algoritmos usar aqui. Meu plano original era extremamente complicado, a ponto de ser quase impossível de implementar, sem falar em explicar, e neste momento estou totalmente perdido com o projeto paralisado.
Como posso determinar o alcance que uma unidade pode mover, levando em consideração o raio de viragem?
Por exemplo, na imagem abaixo. As linhas vermelha, azul e verde teriam o mesmo comprimento. O círculo roxo indica a amplitude de movimento que a unidade pode mover. (O formato é provavelmente imprecisa e as linhas provavelmente não são realmente o mesmo comprimento, mas você começa a idéia)