bem , o pac man desse curso é feito de 7 arquivos, mas vou mandar somente as funçoes q se referem a movimento:
int praondefantasmavai(int xatual, int yatual, int* xdestino, int* ydestino) {
int opcoes[4][2] = {
{ xatual, yatual + 1},
{ xatual + 1, yatual},
{ xatual, yatual -1},
{ xatual - 1, yatual}
};
srand(time(0));
for (int i = 0; i < 10; i++) {
int posicao = rand() % 4;
if (podeandar(&m, FANTASMA, opcoes[posicao][0], opcoes[posicao][1])) {
*xdestino = opcoes[posicao][0];
*ydestino = opcoes[posicao][1];
return 1;
}
}
return 0;
}
void fantasmas() {
MAPA copia;
copiamapa(&copia, &m);
for (int i = 0; i < m.linhas; i++) {
for (int j = 0; j < m.colunas; j++) {
if (copia.matriz[i][j] == FANTASMA) {
int xdestino;
int ydestino;
int encontrou = praondefantasmavai(i, j, &xdestino, &ydestino);
if(encontrou) {
andanomapa(&m, i, j, xdestino, ydestino);
}
}
}
}
liberamapa(&copia);
}
int ehdirecao(char direcao) {
return
direcao == ESQUERDA ||
direcao == CIMA ||
direcao == BAIXO ||
direcao == DIREITA;
}
void move(char direcao) {
if (!ehdirecao(direcao))
return;
int proximox = heroi.x;
int proximoy = heroi.y;
switch(direcao) {
case ESQUERDA:
proximoy--;
break;
case CIMA:
proximox--;
break;
case BAIXO:
proximox++;
break;
case DIREITA:
proximoy++;
break;
}
if (!podeandar(&m, HEROI, proximox, proximoy))
return;
if (ehpersonagem(&m, PILULA, proximox, proximoy)) {
tempilula = 1;
}
andanomapa(&m, heroi.x, heroi.y, proximox, proximoy);
heroi.x = proximox;
heroi.y = proximoy;
}
int ehparede(MAPA *m, int x, int y) {
return m->matriz[x][y] == PAREDE_VERTICAL ||
m->matriz[x][y] == PAREDE_HORIZONTAL;
}
int ehpersonagem(MAPA *m, char personagem, int x, int y) {
return m->matriz[x][y] == personagem;
}
int podeandar(MAPA* m, char personagem, int x, int y) {
return
ehvalida(m, x, y) &&
!ehparede(m, x, y) &&
!ehpersonagem(m, personagem, x, y);
}
void andanomapa(MAPA* m, int xorigem, int yorigem, int xdestino, int ydestino) {
char personagem = m->matriz[xorigem][yorigem];
m->matriz[xdestino][ydestino] = personagem;
m->matriz[xorigem][yorigem] = VAZIO;
}
int ehvalida(MAPA* m, int x, int y) {
if (x >= m->linhas)
return 0;
if (y >= m->colunas)
return 0;
return 1;
}
int ehvazia(MAPA* m, int x, int y) {
return m->matriz[x][y] == VAZIO;
}