¿Puedo evitar que el movimiento diagonal explore más del mapa?

57

En una cuadrícula de mosaicos donde el movimiento en cualquiera de las 8 direcciones toma exactamente la misma cantidad de giros (reglas de estilo de tablero de ajedrez), ¿puedo evitar que el movimiento diagonal muestre más mosaicos nuevos que el movimiento ortogonal?

Por ejemplo: usted es el cuadro rojo en la imagen a continuación. Las celdas verdes son actualmente visibles para usted (campo de visión cuadrado). Puede mover una distancia de una ficha en cualquiera de las ocho direcciones.

Si te mueves hacia el noreste , explorarás 13 fichas nuevas (que se muestran en azul). Si en cambio te mueves hacia el sur , solo explorarás 7 fichas nuevas (que se muestran en púrpura).

rejilla con visibilidades dependientes de la posición

¿Cómo puedo hacer que viajar en cada dirección sea igualmente favorable para la exploración?

Señor Smith
fuente
27
Este es un defecto fundamental con el diseño de un juego como este. Debe no permitir el movimiento diagonal o cambiar a algo como una cuadrícula hexagonal que no tenga este problema.
Tetrad
1
@Tetrad No estás equivocado acerca de que sea un defecto, pero probablemente no te das cuenta de lo frecuente que es en juegos como este .
Sr. Smith
8
En cualquier juego donde el movimiento ortogonal y diagonal sea igualmente rápido, siempre habrá algunas cosas para las que el movimiento diagonal es mejor que el movimiento ortogonal y viceversa. Simplemente no se puede resolver: si conecta un agujero, se abre otro.
Patashu
3
No es una respuesta completa, pero ¿es posible en su juego hacer que un movimiento diagonal tome más tiempo que uno ortogonal en proporción a la longitud diagonal? En segundo lugar, ¿puede tener una solución mixta donde el movimiento usa el patrón de diamante y la distancia de visualización usa el cuadrado?
Vality
2
Otra respuesta que no es del todo: los movimientos ortogonales se comportan como lo hacen ahora, pero los movimientos diagonales hacen que la fuente de luz se vuelva "difusa": no revela los 13 cuadrados que acaban de llegar, pero solo 7 (más o menos) de ellos, determinados al azar.
Snowbody

Respuestas:

67

Dungeons and Dragons 3.5 (RPG de lápiz y papel) tiene una solución utilizada tanto para el movimiento como para los cálculos de radio basados ​​en cuadrícula: el movimiento diagonal cuesta 1.5 lo que cuesta ortogonal. Como la diagonal de una unidad cuadrada es aproximadamente 1.414, 1.5 está bastante cerca.

Debido a que D&D 3.5 solo admite el movimiento de enteros, la forma en que esto realmente se calcula es que el movimiento ortogonal cuesta "un cuadrado". Tu primer movimiento diagonal también solo cuesta "un cuadrado", pero la segunda diagonal cuesta "dos cuadrados". Alterna uno y dos cuadrados para cada movimiento diagonal. La implementación de esta regla de movimiento dentro de su juego manejará varios problemas con el movimiento diagonal.

Como muestra este diagrama, esta regla de movimiento crea una aproximación razonable de los círculos y tampoco está desactivada en más de 1 en comparación con la distancia real (cuando está dentro de las 15 unidades del inicio).

ingrese la descripción de la imagen aquí

Si su radio de visión / exploración también se calcula de esta manera, el movimiento diagonal y los descubrimientos diagonales serán tan cercanos o lejanos como los ortogonales.

danés
fuente
Exactamente lo que quería sugerir. Aunque vale la pena señalar que esta estrategia se cae en términos de restringir el movimiento si el personaje solo puede moverse un espacio por turno (¿cuál parece ser el caso del diagrama de la pregunta?). Podrías "recordar" si están en diagonales impares / pares entre turnos, aunque esto puede ser confuso / frustrante para el jugador. De todos modos, esto funciona bien para el tema de la visibilidad.
Alexis Beingessner
55
@AlexisBeingessner, cierto. Y el interrogador sí indicó que quería un movimiento parecido al rey del ajedrez, pero me imagino que, dado que este es un sitio de desarrollo de juegos de computadora, señalaría una buena solución de juego. Si esto es más un acertijo o una pregunta matemática pura, lo esperaría en otro sitio. Si esto es para un juego parecido a un pícaro, algunos de ellos ya admiten velocidades de movimiento variables.
Dane
La mayoría de los juegos de Roguelike parecen estar basados ​​en turnos, pero en realidad tienen un componente de tiempo, por lo que si te mueves en diagonal, otros objetos tendrán más tiempo para reaccionar antes de que puedas hacer otro movimiento.
Kos
67

Necesita cambiar la forma del campo de visión.

De modo que cuando te mueves en cualquier dirección, se hace visible el mismo número de cuadrados nuevos.

Aquí hay una posibilidad:

ejemplo de cuadrícula

ChargingPun
fuente
55
Interesante; Nunca he considerado un campo de visión de diamantes. Sin embargo, también hay un problema con esta vista; ahora es una idea terrible viajar en diagonal, porque si ves a un enemigo mientras viaja en diagonal, estará significativamente más cerca de ti que si hubieras estado viajando ortogonalmente.
Sr. Smith
43
@ Sr. Smith, sí, es un problema nuevo, pero he resuelto el anterior ...
ChargingPun
De hecho lo hiciste; Parece que no fui lo suficientemente específico con la pregunta.
Sr. Smith
8
¿Una forma circular ayudaría aquí?
amitp
3
@amitp Esta es una forma circular, siempre que su función de distancia sea la distancia de Manhattan.
Daniel Wagner
27

Para que el movimiento diagonal y ortogonal revele aproximadamente la misma área, necesita dos cosas (cada una de las cuales, solo, ya se ha sugerido en otra respuesta o comentario):

  1. Rango de visión aproximadamente circular :

    Imagen del rango de vista pseudo-circular

    Por sí solo, esto no dará exactamente la misma área revelada para ambos tipos de movimiento. Por ejemplo, en la imagen de arriba, el movimiento ortogonal revela 9 cuadrados, mientras que el movimiento diagonal revela 13. Sin embargo, aún es mejor que la relación 13/7 para el área de vista cuadrada en su ejemplo.

    De hecho, a medida que crece el radio de vista, la proporción de áreas reveladas por paso diagonal / ortogonal tiende a √2 ≈ 1.414 para un área circular, mientras que la misma proporción para un área de vista cuadrada tiende a 2.

  2. Movimiento diagonal más lento :

    En la vida real, caminar en diagonal a través de un campo cuadrado lleva más tiempo que caminar por uno de los lados. De hecho, se tarda aproximadamente √2 ≈ 1.414 veces más. Si quieres que el movimiento en tu juego se sienta realista, también deberías hacer que eso suceda en tu juego.

    En la práctica, 3/2 = 1.5 es una muy buena aproximación de √2. Por lo tanto, puede hacer que cada paso ortogonal tome dos unidades de tiempo, y hacer que cada paso diagonal tome tres. Con el área de vista de ejemplo anterior, esto produce 9/2 = 4.5 cuadrados revelados por unidad de tiempo para el movimiento ortogonal, y 13/3 = 4.33 cuadrados revelados por unidad de tiempo para el movimiento diagonal. Bastante cerca, ¿eh?

    Alternativamente, si desea apegarse a "1 paso = 1 unidad de tiempo" para el movimiento ortogonal, puede usar algo como el sistema D&D sugerido por Dane y hacer que cada segundo paso diagonal consuma un turno adicional. (Sin embargo, si hace eso, debe dar a cada unidad un contador explícito de cuántos pasos diagonales han tomado; de lo contrario, puede terminar con exploits como, por ejemplo, E, NE, E, NE, ... . secuencia de movimiento que permite a un jugador para explorar más rápido de lo previsto.)

Ilmari Karonen
fuente
Una manera fácil de evitar tales hazañas sería decir que un movimiento en diagonal cuesta dos tics, excepto cuando está precedido por un movimiento en la misma dirección que tomó dos ticks.
supercat
1
@supercat: Cierto, pero eso dejaría la secuencia E, NE, E, NE, ... notablemente menos eficiente para explorar que el movimiento recto ortogonal / diagonal, lo que podría no ser deseable tampoco.
Ilmari Karonen
Dejaría esa secuencia menos eficiente, pero ¿y qué? No todos los métodos de exploración deberían ser igualmente eficientes. En realidad, puede que no sea malo tener una penalización de tiempo por cambios de orientación, con una exención para los casos en que el movimiento anterior o posterior fuera una diagonal de doble carga.
supercat
2
Hice algo similar hace un tiempo, y lo resolví haciendo que el movimiento ortogonal costara dos "tics" por cuadrado, y el movimiento diagonal costaba tres.
Mason Wheeler
11

Dado que está utilizando una cuadrícula y sabe en qué dirección está avanzando el usuario, no hay nada que lo limite a adaptar la respuesta anterior y a utilizar diferentes campos de visión según la dirección.

Por ejemplo, podría extender el campo para incluir las esquinas cuando viaja en direcciones cardinales y reducirlo dos cuadrados en cada extremo en sus cajas diagonales para que cada uno descubra 9 cuadrados.

Otra alternativa, dependiendo de cómo funcione su iluminación, sería utilizar una mejor aproximación circular con antialiasing, para revelar parcialmente algunos de los cuadrados.

user43497
fuente
Ese es un compromiso interesante; si viaja en diagonal, no todas las celdas que normalmente habrían sido visibles serán visibles. Puedes esperar un turno (para que esas celdas sean exploradas) o continuar moviéndote.
Sr. Smith
8
¿Qué respuesta es "la respuesta previa"?
Mooing Duck
7

¿Qué tal, en lugar de tener un rango de visión fijo, hacer que el área de visibilidad del jugador dependa de la dirección que estaba mirando el jugador, así como quizás la dirección que el jugador enfrentó en los últimos turnos (un jugador que se movía hacia el norte podría ser capaz de Inmediatamente dé un paso hacia el sur, pero podría tomar algunas vueltas para obtener la máxima distancia de visualización en esa dirección). Un jugador que se dirige hacia el norte desde un pasillo estrecho hacia una habitación grande y continúa viajando hacia el norte tendría una visibilidad limitada al este y al oeste, y probablemente debería hacerlo. Cuando el jugador deja de moverse, uno podría hacer que el sistema automáticamente "explore" áreas invisibles que están dentro del radio de visión actual del jugador, pero mientras el jugador se mueve activamente, el campo de visión debería estar más limitado.

Super gato
fuente
3

Como alternativa a un campo de visión más complejo (que como se discutió anteriormente agrega sus propios problemas debido a las restricciones de un diseño basado en la cuadrícula), podría intentar emular el efecto del movimiento en un juego que no se basa en una discreción cuadrícula. Donde es posible el movimiento libre, un movimiento diagonal de una unidad sería exactamente eso, no las ~ 1.41 unidades de movimiento vistas con una cuadrícula cuadrada.

Si bien no puede forzar el movimiento de una sola unidad sin perder su cuadrícula discreta (lo que cambiaría el diseño de su juego de manera bastante significativa), tal vez podría realizar un seguimiento del movimiento adicional tomado y soltar movimientos más tarde: rastree los 0.41s adicionales y una vez que sumen más 1.00 hacen que esa unidad se salte un movimiento. O al revés: considere que la diagonal es normal, sume los 0.41s para cada movimiento horizontal o vertical, y otorgue crédito de movimiento adicional una vez que sea mayor que 1 (o 1.41 para un movimiento diagonal).

Tendría que tener cuidado de cómo presentar esto a sus jugadores de manera que parezca suave y justo. En un escenario de jugadores múltiples, tales cambios podrían convertirse en algo de lo que los jugadores se aprovechan estratégicamente; esto puede ser un problema o puede haber una forma natural de mezclar esto con la mecánica del juego (tal vez permita a los jugadores almacenar un pequeño cantidad de "crédito de movimiento no utilizado" que pueden usar para reaccionar rápidamente en un momento posterior y que los 0.41s adicionales de movimiento se alimenten (o saquen) de ese grupo.

Esto funcionaría mejor si las entidades de control del jugador se movieran en movimiento de una unidad cada turno. Por ejemplo, tres puntos de movimiento podrían usarse como tres movimientos horizontales, o dos diagonales con 0.16 restantes en el grupo para más adelante. Una vez que llega a 1.00, el jugador obtiene un movimiento / movimiento "libre" y en 1.41 uno diagonal libre. Podrías limitar el extra a 1.5 para forzarlo a usarse o perderse en ese punto para evitar que el jugador conserve esta energía almacenada durante años o permita que se acumule.

Obviamente, esto es una complicación para las reglas de su juego que puede ser completamente indeseable, y no sería práctico para un juego no computarizado, pero si pudiera hacer que funcione dentro de las reglas existentes de su juego, limitaría la diferencia de exploración entre las direcciones de movimiento sin necesidad para abandonar el formato de cuadrícula.

David Spillett
fuente
2

Puede hacer que el jugador se mueva dos espacios si se mueven hacia arriba, hacia abajo, hacia la izquierda o hacia la derecha, y solo uno en diagonal. No lo equilibraría por completo, pero estaría mucho más cerca.

drdavehere
fuente
Esta es una buena idea, pero creo que es equivalente a simplemente prohibir el movimiento diagonal (ya que una diagonal es solo dos movimientos ortogonales)
Vality