Em uma grade de peças em que o movimento em qualquer uma das 8 direções leva exatamente a mesma quantidade de voltas (regras do estilo do tabuleiro de xadrez), posso impedir que o movimento diagonal mostre mais peças novas do que o movimento ortogonal?
Por exemplo: Você é a caixa vermelha na imagem abaixo. Atualmente, as células verdes estão visíveis para você (campo de visão quadrado). Você pode mover uma distância de um bloco em qualquer uma das oito direções.
Se você se mudar para nordeste , explorará 13 novos blocos (mostrados em azul). Se você se mudar para o sul , explorará apenas 7 novas peças (mostradas em roxo).
Como posso tornar a viagem em cada direção igualmente favorável à exploração?
movement
grid
line-of-sight
Senhor Smith
fonte
fonte
Respostas:
Dungeons and Dragons 3.5 (RPG em papel e caneta) tem uma solução usada para cálculos de movimento e raio baseado em grade: o movimento diagonal custa 1,5 o que custa ortogonal. Como a diagonal de um quadrado de unidade é de aproximadamente 1.414, 1,5 está bem próximo.
Como o D&D 3.5 suporta apenas movimentos inteiros, a maneira como isso é calculado é que o movimento ortogonal custa "um quadrado". Seu primeiro movimento diagonal também custa apenas "um quadrado", mas a segunda diagonal custa "dois quadrados". Você alterna um e dois quadrados para cada movimento diagonal. A implementação desta regra de movimento no seu jogo resolverá vários problemas com o movimento diagonal.
Como este diagrama mostra, essa regra de movimento cria uma aproximação razoável dos círculos e também não é desativada em mais de 1 quando comparada à distância real (quando estiver a 15 unidades da partida).
Se o seu raio de visão / exploração também for calculado dessa maneira, o movimento diagonal e as descobertas na diagonal serão tão próximos ou distantes quanto os ortogonais.
fonte
Você precisa alterar a forma do campo de visão.
Assim, quando você se move em qualquer direção, o mesmo número de novos quadrados se torna visível.
Aqui está uma possibilidade:
fonte
Para que o movimento diagonal e ortogonal revele aproximadamente a mesma área, você precisa de duas coisas (cada uma das quais, sozinha, já foi sugerida em outra resposta ou comentário):
Intervalo de visão aproximado circular :
Por si só, isso não dará exatamente a mesma área revelada para os dois tipos de movimento. Por exemplo, na imagem acima, o movimento ortogonal revela 9 quadrados, enquanto o movimento diagonal revela 13. Ainda é melhor que a proporção 13/7 para a área de vista quadrada no seu exemplo.
De fato, à medida que o raio da vista aumenta, a proporção de áreas reveladas por etapa diagonal / ortogonal tende a √2 ≈ 1,414 para uma área circular, enquanto a mesma proporção para uma área de vista quadrada tende a 2.
Movimento diagonal mais lento :
Na vida real, caminhar na diagonal por um campo quadrado leva mais tempo do que caminhar por um dos lados. De fato, leva cerca de √2 ≈ 1,414 vezes mais. Se você deseja que o movimento no seu jogo pareça realista, você deve fazer isso acontecer também.
Na prática, 3/2 = 1,5 é uma boa aproximação de √2. Assim, você pode fazer cada etapa ortogonal levar duas unidades de tempo e fazer cada etapa diagonal levar três. Com a área de visualização de exemplo acima, isso produz 9/2 = 4,5 quadrados revelados por unidade de tempo para movimento ortogonal e 13/3 = 4,33 quadrados revelados por unidade de tempo para movimento diagonal. Bem perto, não é?
Como alternativa, se você preferir "1 passo = 1 unidade de tempo" para movimento ortogonal, poderá usar algo como o sistema de D&D sugerido por Dane e fazer com que cada segundo passo diagonal consuma uma volta extra. (Se você fizer isso, no entanto, precisará fornecer a cada unidade um contador explícito de quantas etapas diagonais foram executadas; caso contrário, poderá acabar com explorações como, por exemplo, E, NE, E, NE, .. . sequcia de movimento que permite a um jogador para explorar mais rápido do que o pretendido.)
fonte
Como você está usando uma grade e sabe em qual direção o usuário está seguindo, não há nada que o impeça de adaptar a resposta anterior e usar campos de visão diferentes, dependendo da direção.
Por exemplo, você pode estender o campo para incluir os cantos quando você viaja nas direções cardeais e reduzi-lo em dois quadrados em cada extremidade em suas caixas diagonais para que cada um descubra 9 quadrados.
Outra alternativa, dependendo de como sua iluminação funciona, seria usar uma melhor aproximação de círculo com antialiasing, para revelar parcialmente alguns quadrados.
fonte
Que tal, em vez de ter um alcance fixo de visualização, fazer com que a área de visibilidade do jogador dependa da direção que o jogador estava seguindo, bem como talvez da direção que o jogador enfrentou nos últimos turnos (um jogador que estava se movendo para o norte pode ser capaz de imediatamente dê um passo para o sul, mas pode dar algumas voltas para obter a distância máxima de visualização nessa direção). Um jogador que segue para o norte, saindo de um corredor estreito, para uma sala grande e continua viajando para o norte, tem visibilidade limitada a leste e oeste, e provavelmente deveria. Quando o jogador para de se mover, é possível que o sistema "explore" automaticamente as áreas invisíveis que estão dentro do raio de visão atual do jogador, mas enquanto o jogador está se movendo ativamente, o campo de visão deve ficar mais confinado.
fonte
Como uma alternativa a um campo de visão mais complexo (que, como discutido acima, adiciona seus próprios problemas devido às restrições de um layout baseado em grade), você pode tentar emular o efeito do movimento em um jogo que não seja baseado em uma descrição discreta. grade. Onde o movimento livre é possível, um movimento diagonal de uma unidade seria exatamente isso, não as ~ 1,41 unidades de movimento vistas com uma grade quadrada.
Embora você não possa forçar o movimento de uma unidade sem perder a grade decrescente (o que alteraria o design do seu jogo de forma bastante significativa), talvez você possa acompanhar o movimento extra realizado e soltar os movimentos mais tarde: acompanhe os 0,41s extras e uma vez que totalizem mais do que isso. 1.00 fazem com que a unidade pule uma jogada. Ou o contrário: considere a diagonal como normal, adicione 0,41s para cada movimento horizontal ou vertical e dê crédito extra ao movimento uma vez que seja maior que 1 (ou 1,41 para um movimento diagonal).
Você precisaria ter cuidado ao apresentar isso aos seus jogadores de uma maneira que pareça suave e justa. Em um cenário multi-jogador humano, essas mudanças podem se tornar algo que os jogadores aproveitam estrategicamente - isso pode ser um problema ou pode haver uma maneira natural de misturar isso com a mecânica do jogo (talvez permita que os jogadores armazenem um pequeno quantidade de "créditos de movimentação não utilizados" que eles podem usar para reagir rapidamente mais tarde e receber 0,41s de movimentação adicional para alimentar (ou retirar) esse pool.
Isso funcionaria melhor se as entidades de controle do jogador se movimentassem se movessem mais de uma unidade a cada turno. Por exemplo, três pontos de movimento podem ser usados como três movimentos horzontais ou dois diagonais com 0,16 restantes na piscina para mais tarde. Quando atingir 1,00, o jogador recebe um movimento hor / muito "livre" e, a 1,41, um movimento diagonal livre. Você pode limitar o extra a 1,5 para forçá-lo a ser usado ou perdido nesse ponto para impedir o jogador de manter essa energia armazenada por séculos ou deixá-la acumular.
Obviamente, isso é uma complicação das regras do jogo que pode ser completamente indesejável e seria impraticável para um jogo não computadorizado, mas se você pudesse fazê-lo funcionar dentro das regras existentes do jogo, limitaria a diferença de exploração entre as direções do movimento sem a necessidade de abandonar o formato da grade.
fonte
Você pode fazer o jogador mover dois espaços se mover para cima, baixo, esquerda ou direita e apenas um na diagonal. Não seria exatamente igual, mas estaria muito mais perto.
fonte