Ciao oregon. Il problema che ho adesso è il seguente. quando il pacman si trova in una strettoia della mappa, dove per esempio si puo andare o sopra o sotto, tenendo premuto il tasto freccia destra, voglio che quando arriva al primo svincolo, giri a destra. Il funzionamento del gioco c'è, però il problema è che non gira mai al primo svincolo ma al secondo, o al terzo... ripeto, la meccanica funziona, ma c'è un errore credo relativo al kbhit. oregon ora ti allego il nuovo codice completo così potrai giocarci e capire l'errore.
#include <iostream>
#include <windows.h>
#include <conio.h>
#define M '\xDB'
#define C '.'
#define V ' '
using namespace std;
//VARIABILI GLOBALI
char mappa[29][28]=
{
{M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M},
{M,C,C,C,C,C,C,C,C,C,C,C,C,M,M,C,C,C,C,C,C,C,C,C,C,C,C,M},
{M,C,M,M,M,M,C,M,M,M,M,M,C,M,M,C,M,M,M,M,M,C,M,M,M,M,C,M},
{M,C,M,V,V,M,C,M,V,V,V,M,C,M,M,C,M,V,V,V,M,C,M,V,V,M,C,M},
{M,C,M,V,V,M,C,M,V,V,V,M,C,M,M,C,M,V,V,V,M,C,M,V,V,M,C,M},
{M,C,M,M,M,M,C,M,M,M,M,M,C,M,M,C,M,M,M,M,M,C,M,M,M,M,C,M},
{M,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,M},
{M,C,M,M,M,M,C,M,M,C,M,M,M,M,M,M,M,M,C,M,M,C,M,M,M,M,C,M},
{M,C,M,M,M,M,C,M,M,C,M,M,M,M,M,M,M,M,C,M,M,C,M,M,M,M,C,M},
{M,C,C,C,C,C,C,M,M,C,C,C,C,M,M,C,C,C,C,M,M,C,C,C,C,C,C,M},
{M,M,M,M,M,M,C,M,M,M,M,M,C,M,M,C,M,M,M,M,M,C,M,M,M,M,M,M},
{V,V,V,V,V,M,C,M,M,M,M,M,C,M,M,C,M,M,M,M,M,C,M,V,V,V,V,V},
{V,V,V,V,V,M,C,M,M,V,V,V,V,V,V,V,V,V,V,M,M,C,M,V,V,V,V,V},
{V,V,V,V,V,M,C,M,M,V,M,M,M,V,V,M,M,M,V,M,M,C,M,V,V,V,V,V},
{M,M,M,M,M,M,C,M,M,V,M,V,V,V,V,V,V,M,V,M,M,C,M,M,M,M,M,M},
{M,M,M,M,M,M,C,V,V,V,M,V,V,V,V,V,V,M,V,V,V,C,M,M,M,M,M,M},
{M,M,M,M,M,M,C,M,M,V,M,M,M,M,M,M,M,M,V,M,M,C,M,M,M,M,M,M},
{V,V,V,V,V,M,C,M,M,V,V,V,V,V,V,V,V,V,V,M,M,C,M,V,V,V,V,V},
{M,M,M,M,M,M,C,M,M,V,M,M,M,M,M,M,M,M,V,M,M,C,M,M,M,M,M,M},
{M,C,C,C,C,C,C,C,C,C,C,C,C,M,M,C,C,C,C,C,C,C,C,C,C,C,C,M},
{M,C,M,M,M,M,C,M,M,M,M,M,C,M,M,C,M,M,M,M,M,C,M,M,M,M,C,M},
{M,C,M,M,M,M,C,M,M,M,M,M,C,M,M,C,M,M,M,M,M,C,M,M,M,M,C,M},
{M,C,C,C,M,M,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,M,M,C,C,C,M},
{M,M,M,C,M,M,C,M,M,C,M,M,M,M,M,M,M,M,C,M,M,C,M,M,C,M,M,M},
{M,M,M,C,M,M,C,M,M,C,M,M,M,M,M,M,M,M,C,M,M,C,M,M,C,M,M,M},
{M,C,C,C,C,C,C,M,M,C,C,C,C,M,M,C,C,C,C,M,M,C,C,C,C,C,C,M},
{M,C,M,M,M,M,M,M,M,M,M,M,C,M,M,C,M,M,M,M,M,M,M,M,M,M,C,M},
{M,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,M},
{M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M}
};
int x=13, y=22;
int direzione=77;
int cammina=77;
char testa='O';
bool continua=true;
void stampa_mappa()
{
for(int i=0;i<=28;i++)
{
for(int t=0;t<=27;t++)
{
cout<<mappa[i][t];
}
cout<<endl;
}
}
void gotoxy(short x, short y) //FUNZIONE PER COORDINATE
{
COORD pos={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void cambia_direzione()
{
if(kbhit())
{
do{direzione=_getch();}while(direzione!=72 && direzione!=77 && direzione!=80 && direzione!=75 && direzione!=27);
if(x==1) //SE SI TROVA ALLA COLONNA 1
{
if(y==1 || y==19 || y==25)
{
if(direzione==77 || direzione==80 || direzione==27)cammina=direzione;
}
else if(y==6)
{
if(direzione==72 || direzione==77 || direzione==80 || direzione==27)cammina=direzione;
}
else if(y==9 || y==22 || y==27)
{
if(direzione==72 || direzione==77 || direzione==27)cammina=direzione;
}
else
{
if(direzione==72 || direzione==80 || direzione==27)cammina=direzione;
}
}
else if(x==3) //SE SI TROVA ALLA COLONNA 3
{
if(y==22)
{
if(direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==23 || y==24)
{
if(direzione==72 || direzione==80 || direzione==27)cammina=direzione;
}
else if(y==25)
{
if(direzione==72 || direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
else
{
if(direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
}
else if(x==6) //SE SI TROVA ALLA COLONNA 6
{
if(y==1)
{
if(direzione==77 || direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==6 || y==19)
{
if(direzione==72 || direzione==77 || direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==9)
{
if(direzione==72 || direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==15 || y==22)
{
if(direzione==72 || direzione==77 || direzione==80 || direzione==27)cammina=direzione;
}
else if(y==25)
{
if(direzione==72 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==27)
{
if(direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
else
{
if(direzione==72 || direzione==80 || direzione==27)cammina=direzione;
}
}
else if(x==9) //SE SI TROVA ALLA COLONNA 9
{
if(y==6 || y==22)
{
if(direzione==77 || direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==9 || y==25)
{
if(direzione==72 || direzione==77 || direzione==27)cammina=direzione;
}
else if(y==12)
{
if(direzione==77 || direzione==80 || direzione==27)cammina=direzione;
}
else if(y==15)
{
if(direzione==72 || direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==17)
{
if(direzione==72 || direzione==77 || direzione==80 || direzione==27)cammina=direzione;
}
else if(y==19)
{
if(direzione==72 || direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==1 || y==27)
{
if(direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
else
{
if(direzione==72 || direzione==80 || direzione==27)cammina=direzione;
}
}
else if(x==12) //SE SI TROVA ALLA COLONNA 12
{
if(y==1 || y==9 || y==19 || y==25)
{
if(direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==6 || y==12 || y==22 || y==27)
{
if(direzione==72 || direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==17)
{
if(direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
else
{
if(direzione==72 || direzione==80 || direzione==27)cammina=direzione;
}
}
else if(x==15) //SE SI TROVA ALLA COLONNA 15
{
if(y==1 || y==9 || y==19 || y==25)
{
if(direzione==77 || direzione==80 || direzione==27)cammina=direzione;
}
else if(y==6 || y==12 || y==22 || y==27)
{
if(direzione==72 || direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==17)
{
if(direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
else
{
if(direzione==72 || direzione==80 || direzione==27)cammina=direzione;
}
}
else if(x==18) //SE SI TROVA ALLA COLONNA 18
{
if(y==6 || y==22)
{
if(direzione==77 || direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==9 || y==25)
{
if(direzione==72 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==12)
{
if(direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==15)
{
if(direzione==72 || direzione==77 || direzione==80 || direzione==27)cammina=direzione;
}
else if(y==17)
{
if(direzione==72 || direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==19)
{
if(direzione==72 || direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==1 || y==27)
{
if(direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
else
{
if(direzione==72 || direzione==80 || direzione==27)cammina=direzione;
}
}
else if(x==21) //SE SI TROVA ALLA COLONNA 21
{
if(y==1)
{
if(direzione==77 || direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==6 || y==19)
{
if(direzione==72 || direzione==77 || direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==9)
{
if(direzione==72 || direzione==77 || direzione==80 || direzione==27)cammina=direzione;
}
else if(y==15 || y==22)
{
if(direzione==72 || direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==25)
{
if(direzione==72 || direzione==77 || direzione==27)cammina=direzione;
}
else if(y==27)
{
if(direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
else
{
if(direzione==72 || direzione==80 || direzione==27)cammina=direzione;
}
}
else if(x==24) //SE SI TROVA ALLA COLONNA 24
{
if(y==22)
{
if(direzione==77 || direzione==80 || direzione==27)cammina=direzione;
}
else if(y==23 || y==24)
{
if(direzione==72 || direzione==80 || direzione==27)cammina=direzione;
}
else if(y==25)
{
if(direzione==72 || direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
else
{
if(direzione==77 || direzione==75 || direzione==27)cammina=direzione;
}
}
else if(x==26) //SE SI TROVA ALLA COLONNA 26
{
if(y==1 || y==19 || y==25)
{
if(direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==6)
{
if(direzione==72 || direzione==80 || direzione==75 || direzione==27)cammina=direzione;
}
else if(y==9 || y==22 || y==27)
{
if(direzione==72 || direzione==75 || direzione==27)cammina=direzione;
}
else
{
if(direzione==72 || direzione==80 || direzione==27)cammina=direzione;
}
}
else //SE SI TROVA NELLE COLONNE RIMANENTI
{
if(direzione==77 || direzione==75)cammina=direzione; //MUOVI DESTRA-SINISTRA
}
}
}
main()
{
stampa_mappa();
gotoxy(x,y);cout<<testa;
do
{
cambia_direzione();
if(cammina==72 && mappa[y-1][x]!=M)y--;
if(cammina==80 && mappa[y+1][x]!=M)y++;
if(cammina==75 && mappa[y][x-1]!=M)x--;
if(cammina==77 && mappa[y][x+1]!=M)x++;
if(cammina==27)continua=false;
if(continua)gotoxy(x,y);cout<<testa;
_sleep(50);
}while(continua);
}