generando / creando rejilla hexagonal en C

Así que estoy tratando de hacer una cuadrícula hexagonal en C para un juego. Soy realmente tonto fundado sobre por dónde empezar. Alguien tiene alguna idea.

EDITAR: Necesito alrededor de 15-20 hexágonos en forma de agarre todos unidos, algo así como un tablero de juego. para un juego en el que estoy trabajando. Perdón por no ser claro

Absolutamente. A pesar de su forma extraña, los hexágonos todavía pueden estar contenidos en su matriz multidimensional habitual, para uso futuro (supongo que querrá poner cosas en sus hexágonos). En cuanto a dibujarlos, es simple. Suma de angularjs = (6 – 2) * 180 = 4 * 180 = 720. Un ángulo es 720/6 = 120 grados. Calcule primero la posición Y del ángulo más a la izquierda, que es igual a √(hexagonSide - hexagonWidth * hexagonWidth) . Estoy seguro de que puedes averiguar hexagonWidth , ¿verdad? Bien, ahora la posición X con respecto al último será 0. Necesitarás desplazar la posición Y con la mitad de la altura del hexágono anterior, hacia arriba o hacia abajo dependiendo de si row * col es par o impar. Como sabes el ancho del hexágono, tienes las coordenadas del ángulo opuesto. Girar 120 ° y repetir.

Antes de continuar, ¿se supone que esto está en la consola? ¿O es de gráficos reales?

Entonces, aclaremos esto, ¿el juego se jugará en la consola? Bien, ahora necesitará configurar sus estructuras de datos, lo más obvio es con los nodos.

Los nodos

Cada hexágono es un nodo con seis aristas.

 typedef struct Node { void *object; /* Pointer to object */ Node *node_array; /* Pointer to node_array with 'node_count' nodes */ int node_count; /* size of node_array */ } Node; 

Cómo inicializar y conectar la estructura del nodo.

Imagina el siguiente hexágono:

  /\ | | \/ 

Tiene los siguientes bordes, NORESTE, ESTE, SURESTE, SUROESTE, OESTE y NOROESTE. A continuación, observe cómo se organizarán (10, 11 y 12 se representaron en Hex para que puedan caber en un espacio):

 // 0 1 2 3 // 4 5 6 7 8 // 9 ABC 

Entonces, 0 se vinculará a 5 través de su enlace SOUTHEAST y 4 través de su enlace SOUTHWEST . Observe también cómo las filas alternan entre números impares y pares de elementos. Llamemos a {0, 1, 2, 3} fila [0] y {4, 5, 6, 7, 8} fila [1] . Y llamemos a esto un hexmap 5×3 . La forma más fácil de crear esta matriz es con malloc(sizeof(Node) * width * height) .

Conectando los nodos

En primer lugar, permítanme señalar que cada fila par (0, 2, 4, …) tendrá elementos de width-1 . Pero hay más, cada elemento (x, y) en esta fila se vinculará con el siguiente elemento en su matriz:

  • (x + 1, y-1) – NORESTE
  • (x + 1, y) – ESTE
  • (x + 1, y + 1) – SURESTE
  • (x, y + 1) – SUROESTE
  • (x-1, y) – OESTE
  • (x, y-1) – NOROESTE

Los elementos en las otras filas, como { 4, 5, 6, 7, 8 } tendrán elementos de width , donde el elemento (x, y) se vincula con lo siguiente:

  • (x, y-1) – NORESTE
  • (x + 1, y) – ESTE
  • (x, y + 1) – SURESTE
  • (x-1, y + 1) – SUROESTE
  • (x-1, y) – OESTE
  • (x-1, y-1) – NOROESTE

Cuando intente vincular (x1, y1) con (x2, y2), asegúrese de que 0 <= x < width y 0 <= y < height .

Recuerda ...

Su matriz contiene un elemento no utilizado al final de cada dos filas (fila [0], fila [2], etc.). También es posible que desee proporcionarles a todos algún tipo de etiqueta o índice para que pueda recomendarles el reproductor. Puede etiquetarlos como (x, y) pares, o numéricamente por su índice, todo depende de usted. El par (x, y) es muy fácil para usted, ya que se asignará directamente a la matriz en la que están almacenados.