vorrei programmare snake per andare su una matrice di led 8x8
per farlo contavo di avere una matrice byte a due dimensioni, nella quale ad ogni avanzamento del serpente tolgo 1 ai valori in essa contenuta, incremento le variabili della posizione del serpente e nelle cordinate delle variabili scrivo la lunghezza del serpente.
spero di essermi spiegato
il problema quale è?
è che io ho un altra matrice byte ad una dimensione nella quale scrivo quale pixel devono essere illuminati.
non riesco a fare si che se il valore contenuto nell array in 2D sia diverso da 0 i pixel si accendano.
cerca di usare le matrici secondo la forma yx e non xy.
in teoria ti basta il vettore a bit che contenga la mappa del gioco, 6variabili per XY snake/coda/testa e XY cibo.
Quindi setti sulla mappa lo snake a due punti con le coordinate in testa e coda, metti il punto con le relative coordinate nella variabile.
ora mettiamo che vai a destra azzeri il bit della coda cerchi nei contorni di Moore la nuova posizione della coda, controlli se il bit sucessivo alla testa sia valido o mebo, setti il bit a destra della testa infine incrementi la posizione della testa.
Secondo me non hai bisogno di un array bidimensionale ma solo di un arrai monodimensionale a 8 elementi.
La posizione del serpente lo decodifichi con un bit nel Byte di ogni elemento, come viene usato anche per pilotare un MAX7219 in modalitá matrice.
nel loop principale ho impostato array[4][4] = 3, ma sul dot matrix rimane tutto spento.
riguardo al procedimento da te suggerito, non mi pare possa funzionare, poiche nel caso in cui il serpente faccia una u non saprei quale bit andare ad azzerare
io ho due array, uno byte monodimensionale che uso come buffer per i due 74hc595 (niente MAX7219), e un altro in cui pensavo di salvare il numero di "spostamenti" da fare prima che il pixel diventi 0.
void convert()
{
for(byte y = 0; y < 8; ++y)
{
for( byte x = 0; x < 8; ++x)
{
if ( array[y][x] )
buff[y] |= 1 << x;
else
buff[y] &= ~(1 << x);
}
}
}
Il principale problema è che non hai inizializzato le variabili x e y a 0.
Pertanto ti consiglio di abilitare i warning del compilatore e di usare la dichiaazione delle variabili in stile C
void convert()
{
byte y;
for( y = 0; y < 8; ++y)
{
byte x;
for( x = 0; x < 8; ++x)
{
if ( array[y][x] )
buff[y] |= 1 << x;
else
buff[y] &= ~(1 << x);
}
}
}