Salve. Volevo creare un programmino con allegro.h: pacman. Dopo due settimane di ricontrolli non sono riuscito a trovare l'errore nel mio codice. Praticamente: ho creato una matrice con dentro delle X, delle o e degli spazi vuoti. Poi con un doppio ciclo for ho disegnato dove ci sono le X dei muretti, dove ci sono le o delle palline e dove ci sono spazi vuoti degli spazi vuoti. Le coordinate dei muretti sono uguali ai contatori * 30.
codice:
char campo[21][31] =
{
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
" XXXX XX",
"XXXXXXXOXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXOXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXOXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXOXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXOXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXOXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXOXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXOXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXOXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
};
void crea()
{
for (r = 0; r < 21 ; r++)
{
for ( c = 0; c < 31; c++)
{
if (campo [r][c] == 'X')
{
draw_sprite (buf, sprite, c * 30, r * 30);
}
if (campo [r][c] == 'O')
{
draw_sprite (buf, monete, c * 30, r * 30);
if ((x / 30 == c) && (y / 30 == r)) // x/30 perchè la x è stata dichiarata x = c * 30,
// uguale per la y
{
campo [r][c] = ' ';
}
}
}
}
}
Ecco qui la matrice e il doppio ciclo for (le dichiarazioni delle variabili e la creazione del pacman li ho messi all'inizio del codice). Inoltre in questo doppio ciclo dico che, se il pacman è nella stessa posizione delle palline, le palline scompaiono.
Infine, per far fermare il pacman ho scritto:
se (schiaccio su)
{
se ( la casella in cui andrà il pacman non è una X)
{
direzione = 1
}
}
se (direzione == 1)
{
sposta in su il pacman di 2 in 2
}
ovvero
codice:
if (key[KEY_UP])
{
if (campo[(y - 30 ) / 30 ][x / 30] != 'X' )
{
dir = 1;
}
else
{
dir = 0;
}
}
if (dir == 1)
{
y -= 2;
}
All'inizio sto tentando di vedere se riesco a fermare il pacman verso su, poi, quando ci riuscirò, lo farò anche nelle altre direzioni.
Il codice sembra giusto, ma il pacman nn si ferma, tuttavia, se sposto il pacman un po' più a sinistra il pacman si blocca:
QUALE E' IL PROBLEMA?? Sto impazzendo da un mese!!!
Potete anche nn scrivere il codice, mi basta sapere dove ho sbagliato