2
respostas

Problemas com a bomba

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);

}

2 respostas

Já resolvi! na função do explode bomba, eu coloquei o loop para começar com int i = 0, ao invés de int i = 1.

Olá, Danilo! Tudo bem?

Que bom que conseguiu solucionar o problema.

Ainda tem alguma dúvida? Qualquer coisa estou à disposição.

Abraços e ótimos estudos.