Quando eu explodo a bomba (tecla b), o jogo acaba.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "pacman.h"
#include "mapa.h"
MAPA m; POSICAO heroi; int tempirula = 0;
int direcaofantasma(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(validacao(&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 = direcaofantasma(i, j, &xdestino, &ydestino);
if(encontrou) {
andandonomapa(&m, i, j, xdestino, ydestino);
}
}
}
}
liberamapa(&copia);
}
int ehdirecao(char direcao) { return direcao == 'a' || direcao == 'w' || direcao == 's' || direcao == 'd';
}
int acabou() { POSICAO pp; int pacmannomapa = encontramapa(&m, &pp, PACMAN); return !pacmannomapa; }
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(!validacao(&m, PACMAN, proximox, proximoy)) return;
if(ehpersonagem(&m, PIRULA, proximox, proximoy)) {
tempirula = 1;
}
andandonomapa(&m, heroi.x, heroi.y, proximox, proximoy);
heroi.x = proximox;
heroi.y = proximoy;
}
void explodepirula() {
for(int i = 0; i < 3; i++) {
if(ehvalida(&m, heroi.x, heroi.y+i) && !ehparede(&m, heroi.x, heroi.y+i)) {
m.matriz[heroi.x][heroi.y+i] = VAZIO;
}
}
}
// EXECUÇÃO DO JOGO... int main() {
lemapa(&m);
encontramapa(&m, &heroi, PACMAN);
do {
printf("Tem pílula?: %s\n", (tempirula ? "SIM" : "NÃO"));
imprimemapa(&m);
char comando;
scanf(" %c", &comando);
move(comando);
if(comando == BOMBA) explodepirula();
fantasmas();
} while (!acabou());
liberamapa(&m);
}