Ir ao conteúdo
  • Cadastre-se
Felipe Hoffmeister

C Nao consigo finalizar meu programa em C

Posts recomendados

Eu tenho uma duvida de como posso finalizar meu programa quando o # do meu jogo estiver em cima do X se alguem pode me ajudar??


 

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include<windows.h>
#include<conio.h>


#define L 10
#define C 20


int main()
{

    ///ALERTA: NÃO MODIFICAR O TRECHO DE CÓDIGO, A SEGUIR.
        //INICIO: COMANDOS PARA QUE O CURSOR NÃO FIQUE PISCANDO NA TELA
        HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
        CONSOLE_CURSOR_INFO     cursorInfo;
        GetConsoleCursorInfo(out, &cursorInfo);
        cursorInfo.bVisible = false; // set the cursor visibility
        SetConsoleCursorInfo(out, &cursorInfo);
        //FIM: COMANDOS PARA QUE O CURSOR NÃO FIQUE PISCANDO NA TELA
        //INÍCIO: COMANDOS PARA REPOSICIONAR O CURSOR NO INÍCIO DA TELA
        short int CX=0, CY=0;
        COORD coord;
        coord.X = CX;
        coord.Y = CY;
        //FIM: COMANDOS PARA REPOSICIONAR O CURSOR NO INÍCIO DA TELA
    ///ALERTA: NÃO MODIFICAR O TRECHO DE CÓDIGO, ACIMA.


    //Posição inicial do personagem no console
    int x=5, y=3;
    // Posição inicial da caixa no console
    int n=2,m=2;
    // Posição inicial do final no console
    int v=8,b=18;

    //Variável para recla precionada
    char tecla;
    //Coordenadas para impressão na tela
    int i,j;

    while(1){

        ///Imprime o jogo: mapa e personagem.
        i=0;
        while (i<L) {
            j=0;
            while (j<C) {
                if (x==i && y==j){
                    printf("$");
                    }
                    else if (i==0 || i==L-1 || j==0 || j==C-1){
                    printf("°");
                }else if(n==i&& m==j){
                    printf("#");
                }
                else if(v==i&& b==j){
                    printf("X");
                }

                 else{
                     printf(" ");
                }
                j++;
            }
            printf("\n");
            i++;
        }


         if ( _kbhit() ){
            tecla = getch();
            switch(tecla)
            {
                case 'w': ///cima
                    x--;
                     if (x==n && y==m)
                    {
                      n--;

                    }

                break;
                case 's': ///baixo
                    x++;
                       if (x==n && y==m)
                    {
                        n++;
                    }

                break;
                case 'a': ///esquerda
                    y--;
                    if (x==n && y==m)
                    {
                        m--;
                    }
                break;
                case 'd': ///direita
                    y++;
                    if (x==n && y==m)
                    {
                        m++;
                    }
                break;
            }
         }


        if (n==0 && x==1)// NAO DEIXA O JOGADOR E A CAIXA SAIR PARA CIMA
        {
            n++;
            x++;
        }
             if (n==9 && x==8)// NAO DEIXA O JOGADOR E A CAIXA SAIR PARA BAIXO
        {
            n--;
            x--;
        }
              if (m==19 && y==18)// NAO DEIXA O JOGADOR E A CAIXA SAIR PARA DIREITA
        {
            m--;
            y--;
        }
        if (m==0 && y==1)// NAO DEIXA O JOGADOR E A CAIXA SAIR PARA ESQUERDA
        {
            m++;
            y++;
        }
        if(x==0) // NAO DEIXA O JOGADOR SAIR PARA CIMA
        {
            x++;
        }
         if(x==9)// NAO DEIXA O JOGADOR SAIR PARA BAIXO
        {
            x--;
        }
            if(y==0)// NAO DEIXA O JOGADOR SAIR PARA ESQUERDA
        {
            y++;
        }
        if(y==19)// NAO DEIXA O JOGADOR SAIR PARA DIREITA
        {
            y--;
        }

    printf("X %d Y %d n %d m %d", x,y,n,m);

        if (n==8 && m==18)
        {
            printf("vitoria");
            break;

            return 0;
        }

        /**
            Recoloca o mapa no inicio da tela,
            isso faz com que o jogo seja escrito sempre no mesmo lugar.
        */
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
    }

    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Felipe Hoffmeister Eu acho que você deveria usar um mapa

#include <stdlib.h>
#include <stdio.h>


/* Constantes */
#define M_X 5
#define M_Y M_X


/* Variáveis */
char mapa[M_X][M_Y]={{'#','#','#','#','#'},
                     {'#',' ',' ',' ','#'},
                     {'#','#','#',' ','#'},
                     {'#',' ',' ',' ','#'},
                     {'#','#','#','#','#'}};

int main()
{
    int a,d;
    for(a=0; a<M_X; a++)
    {
        for(d=0; d<M_Y; d++)
            printf("%c",mapa[a][d]);
        printf("\n");
    }
    getchar();
    return(0);
}

dessa maneira você simplesmente checaria o mapa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu gostaria porém a professora mandou usar o codigo da forma que veio,

·         O personagem deve ser capaz de se movimentar em todas as direções.

·         O personagem deve poder empurrar uma caixa e movimentá-la pelo cenário em todas as direções.

·         O personagem e a caixa não podem sair do mapa.

·       (  Quando a caixa for colocada no local designado no mapa o jogo deve terminar.)

·         Quando o jogo terminar, deve ser exibida uma mensagem de “Vitória” na tela.

·         Não é permitido utilizar variáveis globais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Felipe Hoffmeister Como você mesmo disse realmente você vai precisar de um mapa

21 minutos atrás, Felipe Hoffmeister disse:

O personagem e a caixa não podem sair do mapa.

O mapa não precisa ser global, você pode colocar na função main.

Eu vou anexar um exemplo mais visual.

há e uma pegunta, qual o compilador você está usando?

Visual.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi sua forma, porém eu nao posso fazer assim pois tenho que continuar o programa que a professora mandou, seria uma forma dela garantir que nao foi pego da internet .

eu recebi o programa assim dela:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include<windows.h>
#include<conio.h>

#define L 10
#define C 20


int main()
{
    ///ALERTA: NÃO MODIFICAR O TRECHO DE CÓDIGO, A SEGUIR.
        //INICIO: COMANDOS PARA QUE O CURSOR NÃO FIQUE PISCANDO NA TELA
        HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
        CONSOLE_CURSOR_INFO     cursorInfo;
        GetConsoleCursorInfo(out, &cursorInfo);
        cursorInfo.bVisible = false; // set the cursor visibility
        SetConsoleCursorInfo(out, &cursorInfo);
        //FIM: COMANDOS PARA QUE O CURSOR NÃO FIQUE PISCANDO NA TELA
        //INÍCIO: COMANDOS PARA REPOSICIONAR O CURSOR NO INÍCIO DA TELA
        short int CX=0, CY=0;
        COORD coord;
        coord.X = CX;
        coord.Y = CY;
        //FIM: COMANDOS PARA REPOSICIONAR O CURSOR NO INÍCIO DA TELA
    ///ALERTA: NÃO MODIFICAR O TRECHO DE CÓDIGO, ACIMA.


    //Posição inicial do personagem no console
    int x=3, y=3;
    //Variável para recla precionada
    char tecla;
    //Coordenadas para impressão na tela
    int i,j;

    while(1){

        ///Imprime o jogo: mapa e personagem.
        i=0;
        while (i<L) {
            j=0;
            while (j<C) {
                if (x==i && y==j){
                    printf("*");
                } else if (i==0 || i==L-1 || j==0 || j==C-1){
                    printf("°");
                } else {
                     printf(" ");
                }
                j++;
            }
            printf("\n");
            i++;
        }


         if ( _kbhit() ){
            tecla = getch();
            switch(tecla)
            {
                case 'w': ///cima
                    x--;
                break;
                case 's': ///baixo
                    x++;
                break;
                case 'a': ///esquerda
                    y--;
                break;
                case 'd': ///direita
                    y++;
                break;
            }
         }

        /**
            Recoloca o mapa no inicio da tela,
            isso faz com que o jogo seja escrito sempre no mesmo lugar.
        */
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
    }


    return 0;
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A única coisa que eu posso pensar nesse momento é, usar variáveis para a caixa como

int caixax=x+1, caixay=y;

ai no switch você faria uma verificação de limites

case 'w': ///cima
	if(x>LIMITE)		/* Verifica os limites da tela */
    {
		x--;
      	if((caixax==x)&&(caixay==y))		/* Verifica se o personagem está em cima da caixa */
          if((caixax-1)>LIMITE)			/* Se sim, então verifica se e possivel movimentar a caixa */
          	caixax--;
      	  else
          	x++;		/* Se não pode movimentar os dois então volta o personagem para o local */
    }
break;

Eu não posso ajudar mais do que isso porque aqui eu uso o gcc e nele não tem essas bibliotecas (também uso linux) tenho o tcc aqui mas ele só tem a conio.h não tem a windows.h.

esse código aqui

25 minutos atrás, Felipe Hoffmeister disse:

///ALERTA: NÃO MODIFICAR O TRECHO DE CÓDIGO, A SEGUIR.
        //INICIO: COMANDOS PARA QUE O CURSOR NÃO FIQUE PISCANDO NA TELA
        HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
        CONSOLE_CURSOR_INFO     cursorInfo;
        GetConsoleCursorInfo(out, &cursorInfo);
        cursorInfo.bVisible = false; // set the cursor visibility
        SetConsoleCursorInfo(out, &cursorInfo);
        //FIM: COMANDOS PARA QUE O CURSOR NÃO FIQUE PISCANDO NA TELA
        //INÍCIO: COMANDOS PARA REPOSICIONAR O CURSOR NO INÍCIO DA TELA
        short int CX=0, CY=0;
        COORD coord;
        coord.X = CX;
        coord.Y = CY;
        //FIM: COMANDOS PARA REPOSICIONAR O CURSOR NO INÍCIO DA TELA
    ///ALERTA: NÃO MODIFICAR O TRECHO DE CÓDIGO, ACIMA.

Eu já vi muito no stackoverflow

 

27 minutos atrás, Felipe Hoffmeister disse:

seria uma forma dela garantir que nao foi pego da internet 

Então alguém já fez algum tipo de cola mas não foi você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!