Ir ao conteúdo

Posts recomendados

Postado

Boa noite pessoal!

 

Estou com dificuldades em um projeto que meu professor da faculdade passou

É o seguinte, ele precisa de um jogo de labirinto, que o jogador tem que chegar no tesouro antes do tempo acabar, o jogo deve ter 5 mapas,

 

Alguem consegue me ajudar?

 

int main()
{   char seta;
    int i;
    int posx=0, posy=1;

    printf("\nINSTRUCOES:\n");
    printf("\nPara movimentar o personagem, use as teclas: \n\n\tw: para cima \n\td: para direita \n\ta:para esquerda \n\ts:para baixo");

    _sleep(5000); //Aguarda 5 segundos
    system("cls"); //limpa a tela


    while(seta!=27)
    {
        for (i=0;i<=posy;i++)
        {
           printf ("\n");
        }
        for (i=0;i<=posx;i++)
        {
           printf (" ");
        }
        printf ("%c",1);

        seta=getch();

        switch (seta)
        {
            case 'd':
                posx++;
                break;
            case 'a':
                posx--;
                break;
            case 'w':
                 posy--;
                break;
            case's':
                posy++;
                break;
            default:
                printf("voce digitou uma tecla invalida");
        }
        _sleep(100);
        system("cls");
    }
    
    return 0;
}

 

  • Obrigado 1
Postado

@Augusto Megres     seu código está bom ,  e para controlar o tempo você pode usar o comando

_strtime( timeStr );

então seu código com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <time.h>
#include <string.h>

#define lin 13
#define col 100

#include <windows.h>                                                       /* para ser usado no windows */

/*             0     1    2     3   4      5      6      7         8      */
typedef enum{BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,   /* nome das cores            */
LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE} COLORS;
/*  9         10         11        12        13         14    15           */

static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor BACKGROUND é o fundo da tela  */
static int __FOREGROUND = LIGHTGRAY;                            /* é a frente da tela ou ascletras      */

void textcolor (int letras, int fundo){                 /*para mudar a cor de fundo mude o background   */
    __FOREGROUND = letras;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    letras + (__BACKGROUND << 4));                    /* especifica a cor das letras e do fundo da tela  */
}

void gotoxy(int x, int y){                                  /* posiciona o cursor em uma posição da tela */
    COORD c;                                                /* coordenadas da API do windows             */
    c.X = x;                                                /* posição X da coordenada                   */
    c.Y = y;                                                /* posição Y da coordenada                   */
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);/* especifica a posição do cursor no console */
}
void som(int f){                                            /* f é a frequencia do som                    */
    Beep(f,150);                                /* primeiro a frequencia depois o tempo de duração do som */
}
int tempo=50,tm;
char dateStr[9],timeStr[9];                                 /* pega a data em inglês   11/25/18           */
char dia[3],mes[3],ano[3];                                  /* para colocar em portugues                  */

char mapa[lin][col];                                        /* matriz guarda o desenho do mapa            */
int x=10, y=1,xt=40,yt=1,xt2,i,j;
int ant_xm,ant_ym,xm=10,ym=1,xti;
void imprimir_mapa(int x, int y){                           /* imprime o desenho do labirinto             */
    if( xm<1  )xm = ant_xm;      /* se jogador chegou na primira posição da matriz , volta p/ onde estava */
    if( xm>98 )xm = ant_xm;      /* se jogador chegou na ultima posição da matriz , volta p/ onde estava  */
    if( ym<1  )ym = ant_ym;      /* se jogador chegou na primeira linha da matriz , volta p/ onde estava  */
    if( ym>12 )ym = ant_ym;      /* se jogador chegou na ultima posição da matriz , volta p/ onde estava  */
    if(mapa[ym][xm]!=' ' && mapa[ym][xm]!='O'){   /* se estiver posicionado emcima da parede              */
        xm=ant_xm;                                /* volta p/ onde estava                                 */
        ym=ant_ym;
    }
    else{                                         /* se estiver no caminho                                */
        mapa[ant_ym][ant_xm]=' ';                /* remove o jogador da posição onde ele estava na matriz */
        mapa[ym][xm]='O';                         /* coloca o jogador na nova posição na matriz           */
    }
    if( xm < 20 ){                                /* se se aproximar da lateral esquerda da tela          */
        if( xm >= 10 )xti=xm-10;                  /* xti é posiзгo da coluna inicial da tela              */
                                     /* move a visualização na matriz como se fosse a camera que se moveu */
                                       /* tipo a matriz fica parada mas o local visualizado é que se move */
    }
    if( xti < 0 )xti = 0;         /* se moveu a visualização até a lateral esquerda , permanece ali mesmo */
    if( xm > 80 ){                                  /* se se aproximou das colunas finais da matriz       */
        if( xm < 99 )xti = xm - 70;     /* move a visualização para a direita conforme o jogador se move  */
    }
    if( xti > 19 )xti = 19;/* pelo tamnho dessa matriz , aqui é o limite para a visualização para a direita */
    if(xm>=20 && xm<=80)xti=10;/* se etiver no meio da matriz , a visualição mostra o que está no meio da matriz */
	gotoxy(0,0);/* posiciona o cursor no inicio da tela , para imprimir o desenho do labirinto             */
	               /* pois se usar cls , a tela fica piscando                                              */
	for(i=0;i<13;i++){                            /* são 12 Linhas                                         */
        for(j=xti;j<xti+80;j++){                  /* são 80 colunas da tela , mas a matriz tem 99 colunas  */
                                  /* então a visualização só mostra as 80 linhas onde esta focado na matriz*/
            if(mapa[i][j]=='|')                   /* esse caractere representa a parede                    */
                printf("%c",219);                 /* e na tela imprime um espaço invertido ( em branco )   */
            else{
                if(mapa[i][j]=='O')textcolor(11,0 );/* se for o jogador colorir ele de azul celeste        */
                if(mapa[i][j]=='$')textcolor(12,14);/* se for o tesouro colorir ele de vermelho com fundo amarelo */
                printf("%c", mapa[i][j]);           /* imprime o caractere que está na matriz              */
                textcolor(7,0);             /* volta para a cor normal do console ( cinza com fundo preto )*/
            }
        }
    }
}
int ler_movimento(){
	char p='u';
	if(kbhit()    )p = getch();    /* se precionou alguma tecla do teclado                 */
	if((int)p==224)p = getch();    /* se deu erro na leitura do teclado                    */
	ant_xm = xm;                   /* pega a posição atual do jogador                      */
	ant_ym = ym;                   /* pega a posição atual do jogador                      */
	//armazena posicao atual em variaveis temporarias (xm, ym)
	if(     toupper(p)  =='D')xm++;/* se precionou a tecla D move o jogador para a direita */
	else if(toupper(p)=='S')ym++;/* se precionou a tecla S move o jogador para a baixo     */
	else if(toupper(p)=='W')ym--;/* se precionou a tecla W move o jogador para a cima      */
	else if(toupper(p)=='A')xm--;/* se precionou a tecla A move o jogador para a esquerda  */

	if (xm > 99 )xm = 99;/* se chegou na ultima coluna da matriz fica nessa posição mesmo  */
	else if(xm<1)xm=1;/* se chegou na primeira coluna da matriz , fica nessa posição mesmo */
	if (ym<1)ym=1;/* se chegou na primeira linha da matriz , fica nessa posição mesmo      */
	else if(ym>13)ym=13;/* se chegou na ultima linha da matriz , fica nesa posição mesmo   */
	if(mapa[ym][xm] == '$'){      /* se encontrou o sinal de tesouro                       */
	    mapa[ym][xm]=' ';         /* remove o sinal de tesouro da matriz                   */
	    imprimir_mapa(xm,ym);     /* imprime o desenho da matriz                           */
	    textcolor(12,15);         /* muda a cor para vermelho com fundo branco             */
	    printf("\n\n                                           \n");
		printf("   Muito bem voc%c chegou no tesouro        \n",136);
		printf("           Tecle   ESC Para Sair           \n");
		printf("                                           \n");
		for(j=1;j<4;j++)/* são quatro notas musicais */
		    som(800*j);/* emite o som */
		textcolor(7,0);/* volta a cor para ninza com fundo preto */
    }
    return p;/* retorna qual tecla pressionou para se quiser sair tiver teclado ESC */
}
int temp(){
    char tp[3];
    int sg;
	_strtime( timeStr );    /* pega o harário atual                  */
	tp[0]=timeStr[6];       /* pega as dezenas  dos segundos da hora */
	tp[1]=timeStr[7];       /* pega as unodades dos segundos da hora */
	sg=atoi(tp);            /* converte uma string para inteiro      */
	return sg;              /* retorna os segundos atuais            */
}

int main(){
    _strdate( dateStr);                                         /* pega a data atual */
    dia[0]=dateStr[3];dia[1]=dateStr[4];dia[2]='\0';            /* pega o dia atual*/
    mes[0]=dateStr[0];mes[1]=dateStr[1];mes[2]='\0';            /* pega o mesa atual*/
    ano[0]=dateStr[6];ano[1]=dateStr[7];ano[2]='\0';            /* pega o dano atual*/
	char p;
    int op;
    som(1100);
	strcpy(mapa[ 0], "|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||");
	strcpy(mapa[ 1], "| ||               ||||||||||||||||||||||||||||||||||||||||||||                                   |");
	strcpy(mapa[ 2], "| || ||||||||||||| |||||||||||                                        |||||||||||||||||||| ||||||||");
	strcpy(mapa[ 3], "|         |||||||| ||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||| |||||||||| ||||||||");
	strcpy(mapa[ 4], "|||| |||| |||||||| ||||||||||| |||||                 ||||||||                   ||||||||||        |");
	strcpy(mapa[ 5], "|||| |||| |||||||| ||||||||||| |||||||||| |||||||||| ||||||||||||| |||||||||||| |||||||||| ||||||||");
	strcpy(mapa[ 6], "||||      |||||||| ||||||||||| |||||||||| |||||||||| ||||||||||||| ||||||||||||                   |");
	strcpy(mapa[ 7], "|||||||||||||||||| ||||||                      ||||| ||||||||||||| ||||||||||||||||||||||||||||||||");
	strcpy(mapa[ 8], "|||||||            ||||||||||||||||||||||||||||||||| |||||||||                                |||||");
	strcpy(mapa[ 9], "||||||| ||||||||||||||||                 ||||||||||| ||||||||||||||||||||||||||||||||||| ||||||||||");
	strcpy(mapa[10], "||||||| |||||||||||||||| ||||||||||||||| ||||||||||| |||||||||||||                       ||||||||||");
	strcpy(mapa[11], "|||||                       |||||||||                |||||||||||||||||$||||||||||||||||| ||||||||||");
	strcpy(mapa[12], "|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||");

    tm=temp();                                            /* os segundo do tempo                          */
    int ant_tm=tm;                                        /* segundo anterior                             */
    som(1200);                                            /* emite um som                                 */
    gotoxy(50,18);                                        /* posiciona o cursor nessa posição             */
    printf("hoje %d/%d/%d",atoi(dia),atoi(mes),atoi(ano));/* imprime no idioma portugues dd/mm/aa         */
	while( 1 ){
        ant_tm = tm;                                      /* segundo anterior igual segundo atual         */
        tm=temp();                                        /* pega o segundo atual                         */

        if(tm!= ant_tm){                                  /* se mudou os segundos                         */
            tempo--;                                      /* decrementa o tempo                           */
            gotoxy(50,20);                                /* posiciona o cursor nessa posição             */
            printf(" Tempo %d  ",tempo);                  /* iprime o tempo                               */
        }
        if(tempo < 0){                                    /* se o tempo chegou a zero                     */
            textcolor(12,15);                             /* muda a cor do texto                          */
            gotoxy(50,21);                                /* posiciona o cursor nessa posição             */
            printf("  Tempo esgotado !  ");
            Sleep(2000);                                  /* espera 2 segundos                            */
            exit(0);                                      /* sai do programa                              */
        }

		imprimir_mapa(xm, ym);                            /* xm é coluna na matriz   ym é linha na matriz */
		op = ler_movimento();                             /* pega uma tecla e move o jogador              */
		gotoxy(78,24);
        if(op == 27 )exit(0);                             /* se teclou ESC sai do programa                */
		Sleep(5);                                         /* um delay de 5 milésimos de segundo           */
	}
	return 0;                                             /* não está sendo usado no programa pode deletar */
}

 

  • Amei 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!