Ayuda con Lenguaje C y arrays

A ver, que ando muy oxidado. Os expongo mi problema:

Tengo varios arrays:
const unsigned char pantallaA0[240]={n,....};
const unsigned char pantallaA1[240]={n,....};
const unsigned char pantallaA3[240]={n,....};

Y los almaceno dentro de un solo array:

const unsigned char pantallas[] = {pantallaA0, pantallaA1,pantallaA2,....};

Por otro lado, tengo este array:
static unsigned char level_data[240];

El problema:

Quiero meter dentro de level_data[] los datos de una pantalla, la que me de la gana, de las que tengo almacenadas en pantallas[].

¿Como lo hago?
No sé si te he entendido bien, pero lo intentaré:

Primero, no sé si quieres que "pantallas" sea un array de arrays o un array de punteros a array.

En el primer caso sería:
const unsigned char pantallas[n][240];
y luego tendrías que inicializarlo con loops para copiar en cada fila el pantallaAX correspondiente valor a valor, o también copiar cada array de una vez en cada fila con un memcpy.

En el segundo caso, simplemente inicializas el array como lo tienes, sólo te falta un * ya que es un array de punteros:
const unsigned char * pantallas[] = {pantallaA0, pantallaA1,pantallaA2,....};

Luego para pasar uno de los arrays a level_data, es lo mismo: o un loop valor a valor, o copiando el array entero con un memcpy.

Seguramente lo más sencillo es crearlo todo como un único array 2D, o matrix, con todos los datos, tal que así:

static const unsigned char level_data[m][240] =
{
{ n,...}, // pantallaA0
{ n,...}, // pantallaA1
{ n,...}, // pantallaA2
...
};

y tener luego un puntero que apunte a la pantalla que estás usando, en plan:
const unsigned char * pantalla = level_data[x];
Tal y como lo tienes podrias hacerlo asi:
memcpy(level_data,pantallas[x],sizeof(level_data))   

donde x es la pantalla que tienes que copiar.

Aunque lo que yo haria seria marcar level_data como un puntero para no tener que ir copiando los datos:

de manera que para selecionar el nivel x seria asi:
static unsigned char *level_data;

level_data = pantallas[x];


Andas haciendo un juego?
Gracias por contestar a los dos.

Si, ando con un proyecto.

Intentaré aplicar vuestras soluciones más adelante.
3 respuestas