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.
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.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] = ' '; } } } } }
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
All'inizio sto tentando di vedere se riesco a fermare il pacman verso su, poi, quando ci riuscirò, lo farò anche nelle altre direzioni.codice:if (key[KEY_UP]) { if (campo[(y - 30 ) / 30 ][x / 30] != 'X' ) { dir = 1; } else { dir = 0; } } if (dir == 1) { y -= 2; }
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

Rispondi quotando