Ir ao conteúdo
  • Cadastre-se

Ajuda Trabalho Pacman


Posts recomendados

  • Preciso criar um programa que é uma versão simplificado do jogo do PacMan
  • o objetivo é fazer o pacman andar todo o labirinto que sera inserido por um txt ou ate que os fantasmas o peguem 
  • a posição inical do pac man e dos fantasmas tambem serão inseridas por um txt
  • o jogo não precisa de nenhuma inteligencia artificial 
  • os fantasmas movem 2 caras por rodada e o pacman apenas 1
  • fiz todo o meu codigo proem ao compilar ele entra em um loop infinito e eu não estou conseguindo detectar onde se localiza o problema

Aqui o meu código se alguém puder me ajudar fico muito grato

 

 

 

#include <stdio.h>

#include <stdlib.h>
#include <ctype.h>
#define TAM_L 10
#define TAM_C 10
 
/*LEMBRETES
****************************************************************************************
DIRECAO P (POSITIVA) É INDO PARA DIREITA OU CIMA
DIRECAO N (NEGATIVA) É INDO PARA ESQUERDA OU BAIXO
****************************************************************************************
NO LABIRINTO AS POSIÇOES DE NUMERO 0 SÃO ESPAÇOS QUE NÃO SE PODE ANDAR
AS POSIÇOES DE NUMERO 1 É O CAMINHO
AS POSIÇOES COM NUMERO 2 É ONDE ESTA OS FANTASMAS
A POSIÇÃO COM NUMERO 3 É ONDE ESTA O PACMAN (pacmanolo)
****************************************************************************************
NO LABIRINTO DO PACMAN AS POSIÇOES COM 1 SÃO AS QUE ELE NÃO ANDOU
AS COM 0 SAO CAMINHOS QUE NÃO SE PODEM ANDAR OU JA FOI PASSADO
ELE NÃO ANDA NO LABIRINTO DELE, ELE SERVE PARA VERIFICAR SE ELE GANHOU
****************************************************************************************
O FANTASMA MOVE 2 CASAS OU 1 APENAS NO CASO DE NAO PODER SE MOVER DUAS
CASO O FANTASMA NAO PODER MAIS MOVER PARA ESQUERDA OU DIREITA ELE VAI SUBIR OU DESCER
CASO ELE TAMBEM NAO POSSA SUBIR OU DESCER ELE VAI MUDAR DE DIREÇÃO
****************************************************************************************
O PACMAN VAI MOVER APENAS UMA CASA
TEM COMO OBJETIVO ANDAR TODO O LABIRINTO
****************************************************************************************
 
*/
 
//STRUCTS DO LABIRINTO, FANTASMAS, E PACMANOLO ;P
struct Labirinto
{
    int mat[TAM_L][TAM_C];
}labirinto,labpacman;
 
struct Monstro
{
    int x,y;
    char direcao;
}fantasma1,fantasma2,fantasma3;
 
struct ComeCome
{
    int x,y;
    char direcao;
}pacman;
 
//REMOVER ALGUNS WARNINGS DE QUE A FUNCAO CHAMADA NÃO TINHA SIDO FEITA
void MoveFantasma1P();
void MoveFantasma2P();
void MoveFantasma3P();
void MoveFantasma1N();
void MoveFantasma2N();
void MoveFantasma3N();
void MovePacmanP();
void MovePacmanN();
 
//FUNÇÕES DE LEITURA E INICIALIZAÇÃO
void IniciaMatriz()
{
    int i,j;
    for (i=0;i<TAM_L;i++)
    {
        for (j=0;j<TAM_C;j++)
        {
            labirinto.mat[j]=0;
            labpacman.mat[j]=0;
        }
    }
}
 
void TestaMatriz()
{
    int i,j;
    printf("--- Labirinto ---\n");
    for(i=0;i<TAM_L;i++)
    {
        for(j=0;j<TAM_C;j++)
            printf(" %d",labirinto.mat[j]);
        printf("\n");
    }
    printf("--- PacMan ---\n");
    for(i=0;i<TAM_L;i++)
    {
        for(j=0;j<TAM_C;j++)
            printf(" %d",labirinto.mat[j]);
        printf("\n");
    }
}
 
void PrencheLabirinto()
{
    FILE *arq;
    int x=0,y=0;
    arq=fopen("caminho.txt","r");
    while (feof(arq)== 0)
    {
        fscanf(arq,"%d,%d",&x,&y);
        labirinto.mat[x-1][y-1]=1;
        labpacman.mat[x-1][y-1]=1;
    }
 
}
 
void InsereFeP ()
{
    FILE *arq;
    arq=fopen("fantasmas.txt","r");
    fscanf(arq,"%d,%d %c",&fantasma1.x,&fantasma1.y,&fantasma1.direcao);
    fantasma1.x--;
    fantasma1.y--;
    labirinto.mat[fantasma1.x][fantasma1.y]=2;
    fscanf(arq,"%d,%d %c",&fantasma2.x,&fantasma2.y,&fantasma2.direcao);
    fantasma2.x--;
    fantasma2.y--;
    labirinto.mat[fantasma2.x][fantasma2.y]=2;
    fscanf(arq,"%d,%d %c",&fantasma3.x,&fantasma3.y,&fantasma3.direcao);
    fantasma3.x--;
    fantasma3.y--;
    labirinto.mat[fantasma2.x][fantasma2.y]=2;
    arq=fopen("pacman.txt","r");
    fscanf(arq,"%d,%d %c",&pacman.x,&pacman.y,&pacman.direcao);
    pacman.x--;
    pacman.y--;
    labirinto.mat[pacman.x][pacman.y]=3;
    toupper(fantasma1.direcao);
    toupper(fantasma2.direcao);
    toupper(fantasma3.direcao);
    toupper(pacman.direcao);
}
 
// FUNÇOES DE DETERMINAR MOVIMENTO (ÇOCORR, OREMOS)
void VerificaMovimento ()
{
    if (fantasma1.direcao=='P')
        MoveFantasma1P();
    if (fantasma1.direcao=='N')
        MoveFantasma1N();
 
    if (fantasma2.direcao=='P')
        MoveFantasma2P();
    if (fantasma2.direcao=='N')
        MoveFantasma2N();
 
    if (fantasma3.direcao=='P')
        MoveFantasma3P();
    if (fantasma3.direcao=='N')
        MoveFantasma3N();
}
void VerificaMovimentoPacman()
{
    if (pacman.direcao=='P')
        MovePacmanP();
    if (pacman.direcao=='N')
        MovePacmanN();
}
void MoveFantasma1P()
{
    if(labirinto.mat[fantasma1.x][fantasma1.y+1]!=0)
        fantasma1.y++;
    if(labirinto.mat[fantasma1.x][fantasma1.y+1]==0 && labirinto.mat[fantasma1.x+1][fantasma1.y]!=0)
        fantasma1.x++;
    if(labirinto.mat[fantasma1.x][fantasma1.y+1]==0 && labirinto.mat[fantasma1.x+1][fantasma1.y]==0)
    {
        fantasma1.direcao=='N';
        MoveFantasma1N();
    }
}
void MoveFantasma1N()
{
    if(labirinto.mat[fantasma1.x][fantasma1.y-1]!=0)
        fantasma1.y--;
    if(labirinto.mat[fantasma1.x][fantasma1.y-1]==0 && labirinto.mat[fantasma1.x-1][fantasma1.y]!=0)
        fantasma1.x--;
    if(labirinto.mat[fantasma1.x][fantasma1.y-1]==0 && labirinto.mat[fantasma1.x-1][fantasma1.y]==0)
    {
        fantasma1.direcao=='P';
        MoveFantasma1P();
    }
}
 
void MoveFantasma2P()
{
    if(labirinto.mat[fantasma2.x][fantasma2.y+1]!=0)
        fantasma2.y++;
    if(labirinto.mat[fantasma2.x][fantasma2.y+1]==0 && labirinto.mat[fantasma2.x+1][fantasma2.y]!=0)
        fantasma2.x++;
    if(labirinto.mat[fantasma2.x][fantasma2.y+1]==0 && labirinto.mat[fantasma2.x+1][fantasma2.y]==0)
    {
        fantasma2.direcao=='N';
        MoveFantasma2N();
    }
}
void MoveFantasma2N()
{
    if(labirinto.mat[fantasma2.x][fantasma2.y-1]!=0)
        fantasma2.y--;
    if(labirinto.mat[fantasma2.x][fantasma2.y-1]==0 && labirinto.mat[fantasma2.x-1][fantasma2.y]!=0)
        fantasma2.x--;
    if(labirinto.mat[fantasma2.x][fantasma2.y-1]==0 && labirinto.mat[fantasma2.x-1][fantasma2.y]==0)
    {
        fantasma2.direcao=='P';
        MoveFantasma2P();
    }
}
 
void MoveFantasma3P()
{
    if(labirinto.mat[fantasma3.x][fantasma3.y+1]!=0)
        fantasma3.y++;
    if(labirinto.mat[fantasma3.x][fantasma3.y+1]==0 && labirinto.mat[fantasma3.x+1][fantasma3.y]!=0)
        fantasma3.x++;
    if(labirinto.mat[fantasma3.x][fantasma3.y+1]==0 && labirinto.mat[fantasma3.x+1][fantasma3.y]==0)
    {
        fantasma3.direcao=='N';
        MoveFantasma3N();
    }
}
void MoveFantasma3N()
{
    if(labirinto.mat[fantasma3.x][fantasma3.y-1]!=0)
        fantasma3.y--;
    if(labirinto.mat[fantasma3.x][fantasma3.y-1]==0 && labirinto.mat[fantasma3.x-1][fantasma3.y]!=0)
        fantasma3.x--;
    if(labirinto.mat[fantasma3.x][fantasma3.y-1]==0 && labirinto.mat[fantasma3.x-1][fantasma3.y]==0)
    {
        fantasma3.direcao=='P';
        MoveFantasma3P();
    }
}
 
void MovePacmanP()
{
    if(labirinto.mat[pacman.x][pacman.y+1]!=0)
    {
        pacman.y++;
        labpacman.mat[pacman.x][pacman.y]==0;
    }
 
    if(labirinto.mat[pacman.x][pacman.y+1]==0 && labirinto.mat[pacman.x+1][pacman.y]!=0)
    {
        pacman.x++;
        labpacman.mat[pacman.x][pacman.y]==0;
    }
 
    if(labirinto.mat[pacman.x][pacman.y+1]==0 && labirinto.mat[pacman.x+1][pacman.y]==0)
    {
        pacman.direcao=='N';
        MovePacmanN();
    }
}
void MovePacmanN()
{
    if(labirinto.mat[pacman.x][pacman.y-1]!=0)
    {
        pacman.y--;
        labpacman.mat[pacman.x][pacman.y]==0;
    }
 
    if(labirinto.mat[pacman.x][pacman.y-1]==0 && labirinto.mat[pacman.x-1][pacman.y]!=0)
    {
        pacman.x--;
        labpacman.mat[pacman.x][pacman.y]==0;
    }
 
    if(labirinto.mat[pacman.x][pacman.y-1]==0 && labirinto.mat[pacman.x-1][pacman.y]==0)
    {
        pacman.direcao=='P';
        MovePacmanP();
    }
}
 
//FUNÇÕES DE DETERMINAR SE O PACMAN FOI PEGO PELO FANTASMA OU SE ELE TEVE SUCESSO
int GameOver()
{
    if (fantasma1.x==pacman.x && fantasma1.y==pacman.y)
        return 1;
    if (fantasma2.x==pacman.x && fantasma2.y==pacman.y)
        return 1;
    if (fantasma3.x==pacman.x && fantasma3.y==pacman.y)
        return 1;
    return 0;
}
int PacmanWin()
{
    int i,j;
    for (i=0;i<TAM_L;i++)
    {
        for (j=0; j<TAM_C;j++)
        {
            if (labpacman.mat[j]==1)
                return 0;
        }
    }
    return 1;
}
 
int main ()
{
    int aux=0;
    IniciaMatriz();
    PrencheLabirinto();
    InsereFeP();
    while (1)
    {
        VerificaMovimento();
        VerificaMovimentoPacman();
        aux=GameOver();
        if(aux==1)
        {
            printf("O FANTASMA TE PEGOU\nGAME OVER");
            break;
        }
        aux=PacmanWin();
        if(aux==1)
        {
            printf("O PACMAN ANDOU TODO O LAB E NAO FOI PEGO\nPACMAN WINS");
            break;
        }
        VerificaMovimento();
        aux=GameOver();
        if(aux==1)
        {
            printf("O FANTASMA TE PEGOU\nGAME OVER");
            break;
        }
    }
    return 0;
}
 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...