Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
erique

C RESOLVIDO Menu selecionável

Recommended Posts

Pessoal ,Boa noite

Como podemos criar um menu que use as setas direcionais, é não pedir ao usuário para digitar um número, assim fica mais dinâmico o menu.

Desde já, agradeço!

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

void main()
{
    //menu
    int opcao,decisão;
    inicio:
    system("cls");
    system("color 0F");
    printf("1 - JOGAR \n2 - RANKINGS \n3 - CREDITOS \n4 - SAIR\n");
    scanf("%d", &opcao);
    switch (opcao) {
    case 1:
        system("cls");
        printf("GAME\n");
        break;
    case 2:
        system("cls");
        printf("Ranking\n");
        break;
    case 3:
        system("cls");
        printf("Creditos\n");
        break;
    case 4:
        system("cls");
        printf("voce pediu para sair, prencione qualquer tecla para continuar\n");
        break;
    default:
        printf("voce deve escolher uma opcao valida\n");
        printf("Precione qualquer tecla para voltar ao menu\n");
        system("pause");
        goto inicio;
    }
}

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@erique  Usando getch, dessa forma

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 main()
{
    //menu
    int opcao;
    inicio:
    system("cls");
    system("color 0F");
    printf("1 - JOGAR \n2 - RANKINGS \n3 - CREDITOS \n4 - SAIR\n");
    opcao = getch();
    switch (opcao) {
    case '1':
        system("cls");
        printf("GAME\n");
        break;
    case '2':
        system("cls");
        printf("Ranking\n");
        break;
    case '3':
        system("cls");
        printf("Creditos\n");
        break;
    case '4':
        system("cls");
        printf("voce pediu para sair, prencione qualquer tecla para continuar\n");
        break;
    default:
        printf("voce deve escolher uma opcao valida\n");
        printf("Precione qualquer tecla para voltar ao menu\n");
        system("pause");
        goto inicio;
    }
}


 E pra ficar melhor no case 4 (referente a ação sair) tira esse break e adiciona um exit(0); 
 Assim em vez de ele parar e pedir pra pressionar uma tecla ele fecha de uma vez

 

dessa forma:
 

case '4':
        system("cls");
       exit(0);


Se quiser que aparece alguma mensagem pra pessoa antes de fechar você pode fazer assim:
 

case '4':
        system("cls");
        printf("voce pediu para sair, fechando programa...\n");
        Sleep(3000); // Aqui ele dorme por 3 segundos depois continua o código
		exit(0);

 

Editado por Xaws
  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 33 minutos atrás, Xaws disse:

    @erique  Usando getch, dessa forma

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     main()
    {
        //menu
        int opcao;
        inicio:
        system("cls");
        system("color 0F");
        printf("1 - JOGAR \n2 - RANKINGS \n3 - CREDITOS \n4 - SAIR\n");
        opcao = getch();
        switch (opcao) {
        case '1':
            system("cls");
            printf("GAME\n");
            break;
        case '2':
            system("cls");
            printf("Ranking\n");
            break;
        case '3':
            system("cls");
            printf("Creditos\n");
            break;
        case '4':
            system("cls");
            printf("voce pediu para sair, prencione qualquer tecla para continuar\n");
            break;
        default:
            printf("voce deve escolher uma opcao valida\n");
            printf("Precione qualquer tecla para voltar ao menu\n");
            system("pause");
            goto inicio;
        }
    }


     E pra ficar melhor no case 4 (referente a ação sair) tira esse break e adiciona um exit(0); 
     Assim em vez de ele parar e pedir pra pressionar uma tecla ele fecha de uma vez

     

    dessa forma:
     

    
    case '4':
            system("cls");
           exit(0);


    Se quiser que aparece alguma mensagem pra pessoa antes de fechar você pode fazer assim:
     

    
    case '4':
            system("cls");
            printf("voce pediu para sair, fechando programa...\n");
            Sleep(3000); // Aqui ele dorme por 3 segundos depois continua o código
    		exit(0);

     

     

    Gostei das modificações, agora como faço para adicionar uma seleção do menu mesmo, usando as setas direcionais do teclado?

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <locale.h> // Biblioteca de acentuação
    #include <windows.h> // Biblioteca dos códigos
    
    void main()
    {
        //menu
        int decisão;
        char opcao;
        setlocale(LC_ALL, "Portuguese"); // Definindo português brasileiro como linguagem dentro de printf
        inicio:
        system("cls"); // Limpar tela
        system("color 0F"); // Cor de fundo e letra do cmd
    
        printf("1 - JOGAR \n2 - RANKINGS \n3 - CRÉDITOS \n4 - SAIR\n");
        opcao = getch();
        switch (opcao) {
        case '1':
            system("cls");
            printf("GAME\n");
            break;
        case '2':
            system("cls");
            printf("Ranking\n");
            break;
        case '3':
            system("cls");
            printf("Creditos\n");
            break;
        case '4':
            system("cls");
            printf("voce pediu para sair, fechando programa...\n");
            Sleep(3000); // Aqui ele dorme por 3 segundos depois continua o código
    		exit(0);
        default:
            printf("Você deve escolher uma opção válida\n");
            printf("Precione qualquer tecla para voltar ao menu\n");
            system("pause");
            goto inicio;
        }
    }

     

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @erique  Você ta falando tipo 
    OP 1 •
    OP 2

    OP 3

     

     Ai aperta a seta pra baixo

    OP 1 
    OP 2 • (dessa forma muda a seleção pra OP 2)

    OP 3

     

     Se for isso eu não sei kk , só sei a forma tradicional mesmo:atirador:

    Editado por Xaws
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Xaws Quase la, no caso ele quer usar setas direcionais, até usando o getch poderia ser feito, é só identificar no momento que o usuário apertar as setas...

     

    Enfim, fiquei tentando fazer esse código e acabei criando uma solução, pelo menos funcionou no meu pc, como eu usei o bash do ubuntu troquei getch por getchar, segue:

    #include <stdio.h>
    
    int main(){
            char txt[2],x;
    
            printf("Digite uma direcao: \n");
            x = getchar();    //Obtem a tecla
            scanf("\r%s",txt);//Obtem a linha
            x = txt[1];
    
            switch(x){
                    case 'A':
                            printf("CIMA!!\n");
                            break;
                    case 'D':
                            printf("ESQUERDA!!\n");
                            break;
                    case 'B':
                            printf("BAIXO!!\n");
                            break;
                    case 'C':
                            printf("DIREITA!!\n");
                            break;
                    default:
                            printf("Direcao nao identificada!\n");
                            break;
            }
            return 0;
    }

    Como funciona???
    O usuário "digita" a seta em x = getchar();
    tal qual dá um valor na tela como ^[[A
    então o scanf("\r%s",txt) pega essa informação na linha e

    x = txt[1] pega apenas A.

    ----------------------------------------------------------------------------------------------------------------------------------

    P.S, o código esta funcionando apenas para pegar a informação certa sempre quando
    o usuário for digitar no começo da linha, caso você use uma linha como:

     

    1)Digite a seguir a seta: <aqui é a seta> (sem dar \n o usuário digita aqui e aparece ^[[A)

     

     

    Se for usar em loop, troque:  x = txt[1];      por      x = txt[2];

    Editado por TYSQUARE89
    • Curtir 2
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @erique       experimente esse código e veja se é isso que quer,   com ele você pode selecionar a opção usando as seta para cima ou para baixo e depois de selecionar a opção pressione Enter, então de qualquer forma você terá que pressionar a tecla enter.

       segue o código :

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <windows.h>
    int a,b,L,L2;
    void gotoxy(int x,int y){
        COORD c;
        c.X = x;
        c.Y = y;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
    }
    int main(){
        /*//menu*/
        int opcao;
        do{
            inicio:
            opcao=0;
            L=2;L2=2;b=2;
            system("cls");
            system("color 0f");
            printf("\n\n      1 - JOGAR \n      2 - RANKINGS \n      3 - CREDITOS \n      4 - SAIR\n");
            do{
                gotoxy(1,L);
                printf("-->");
                gotoxy(10,6);
                if(kbhit){a=getch();}
                if(a == 80 && b < 5){L2=L;L++;b++;}/*seta p/baixo*/
                if(a == 72 && b > 2){L2=L;L--;b--;}/*seta p/cima */
                if(L!=L2){gotoxy(1,L2);printf("   ");L2=L;}
                if(a == 13){opcao=b-1;}
            }while(opcao == 0);
            switch (opcao){
                case 1:
                    system("cls");
                    printf("\n    GAME\n");
                    Sleep(2000);
                    break;
                case 2:
                    system("cls");
                    printf("\n    Ranking\n");
                    Sleep(2000);
                    break;
                case 3:
                    system("cls");
                    printf("\n    Creditos\n");
                    Sleep(2000);
                    break;
                case 4:
                    system("cls");
                    printf("voce pediu para sair, prencione qualquer tecla para continuar\n");
                    break;
                default:
                    printf("voce deve escolher uma opcao valida\n");
                    printf("Precione qualquer tecla para voltar ao menu\n");
                    system("pause");
                    goto inicio;
            }
        }while(opcao!=4);
        return 0;
    }

     

    • Curtir 2
    • Amei 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Eu uso um esquema parecido só que usando a função GetAsyncKeyState

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    #include <windows.h>
    
    void gotoxy(int x, int y);
    
    int main()
    {
        int opcao = 1, x = 7;
        bool sair = true;
    
        system("cls");
        system("color 0F");
        gotoxy(18,5); printf("Menu Principal");
        gotoxy(18,7); printf("->");
    
        while(sair){
            gotoxy(20,7);  printf("1 - JOGAR");
            gotoxy(20,8);  printf("2 - RANKINGS");
            gotoxy(20,9);  printf("3 - CREDITOS");
            gotoxy(20,10); printf("4 - SAIR");
    
            system("pause>nul");
    
    		if(GetAsyncKeyState(VK_DOWN) && x != 10) {
                gotoxy(18,x); printf("  ");
                x++;
                gotoxy(18,x); printf("->");
                opcao++;
                continue;
            }
    
    		if(GetAsyncKeyState(VK_UP) && x != 7){
                gotoxy(18,x); printf("  ");
                x--;
                gotoxy(18,x); printf("->");
                opcao--;
                continue;
            }
    
    		if(GetAsyncKeyState(VK_RETURN)){
                switch (opcao) {
                case 1:
                    gotoxy(20,16);
                    printf("GAME\n");
                    break;
                case 2:
                    gotoxy(20,16);
                    printf("Ranking\n");
                    break;
                case 3:
                    gotoxy(20,16);
                    printf("Creditos\n");
                    break;
                case 4:
                    gotoxy(20,16);
                    printf("voce pediu para sair\n");
                    sair = false;
                }
            }
        }
        gotoxy(20,21);
    	return 0;
    }
    
    void gotoxy(int x, int y)
    {
        HANDLE hCon;
        COORD dwPos;
    
        dwPos.X = x;
        dwPos.Y = y;
        hCon = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleCursorPosition(hCon,dwPos);
    }

     

    • Curtir 1
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @devair1010 exatamente isso que precisava, 

     

    Com o código abaixo, como posso fazer para que apertando ESQ em qualquer parte, dentro das opções, ele retorne para o menu principal?

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <locale.h> // Biblioteca de acentuação
    #include <windows.h> // Biblioteca dos códigos do cmd
    
    
    int a,b,L,L2;
    void gotoxy(int x,int y){
        COORD c;
        c.X = x;
        c.Y = y;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
    }
    
    void main() {
        //menu
        int opcao;
        int ranking,ranking1,ranking2,ranking3,ranking4,ranking5,ranking6,ranking7,ranking8,ranking9,ranking10; // Sistema de Ranking
        setlocale(LC_ALL, "Portuguese"); // Definindo português brasileiro como linguagem dentro de printf
        do{
            inicio:
            opcao=0;
            L=2;L2=2;b=2;
            system("cls"); // Limpar a tela dos comandos anteriores
            system("color 0F"); // Definindo a cor do fundo e a letra no cmd
            printf("\n\n      1 - JOGAR \n      2 - RANKINGS \n      3 - CREDITOS \n      4 - SAIR\n");
            do{
                gotoxy(1,L);
                printf("-->");
                gotoxy(10,6);
                if(kbhit){a=getch();}
                if(a == 80 && b < 5){L2=L;L++;b++;}/*seta p/baixo*/
                if(a == 72 && b > 2){L2=L;L--;b--;}/*seta p/cima */
                if(L!=L2){gotoxy(1,L2);printf("   ");L2=L;}
                if(a == 13){opcao=b-1;}
            }while(opcao == 0);
        switch (opcao) {
        case 1:
            system("cls");
            printf("GAME\n");
            Sleep(3000);
            break;
        case 2:
            system("cls");
            printf("Ranking\n");
        // Começo do código de ranking
        ranking1 = 5000;
        ranking2 = 4500;
        ranking3 = 4000;
        ranking4 = 3800;
        ranking5 = 3600;
        ranking6 = 3000;
        ranking7 = 2500;
        ranking8 = 2300;
        ranking9 = 1900;
        ranking10 = 1600;
    
            if (ranking > ranking10) {
            ranking10 = ranking;
        }
            if (ranking > ranking9) {
                ranking10 = ranking9;
                ranking9 = ranking;
            }
                if (ranking > ranking8) {
                    ranking9 = ranking8;
                    ranking8 = ranking;
            }
                    if (ranking > ranking7) {
                        ranking8 = ranking7;
                        ranking7 = ranking;
            }
                        if (ranking > ranking6) {
                            ranking7 = ranking6;
                            ranking6 = ranking;
            }
                            if (ranking > ranking5) {
                                ranking6 = ranking5;
                                ranking5 = ranking;
            }
                                if (ranking > ranking4) {
                                    ranking5 = ranking4;
                                    ranking4 = ranking;
            }
                                    if (ranking > ranking3) {
                                        ranking4 = ranking3;
                                        ranking3 = ranking;
            }
                                        if (ranking > ranking2) {
                                            ranking3 = ranking2;
                                            ranking2 = ranking;
            }
                                            if (ranking > ranking1) {
                                                ranking2 = ranking1;
                                                 ranking1 = ranking;
            }
    
    
            printf("RANKING1 = %d\nRANKING2 = %d\nRANKING3 = %d\nRANKING4 = %d\nRANKING5 = %d\nRANKING6 = %d\nRANKING7 = %d\nRANKING8 = %d\nRANKING9 = %d\nRANKING10 = %d\n", ranking1,ranking2,ranking3,ranking4,ranking5,ranking6,ranking7,ranking8,ranking9,ranking10);
            // Fim do Código do Ranking
            Sleep(10000);
            break;
        case 3:
            system("cls");
            printf("Creditos\n");
            Sleep(3000);
            break;
        case 4:
            system("cls");
            printf("voce pediu para sair, fechando programa...\n");
            Sleep(3000); // Aqui ele dorme por 3 segundos depois continua o código
    		exit(0);
        default:
            printf("Você deve escolher uma opção válida\n");
            printf("Precione qualquer tecla para voltar ao menu\n");
            system("pause");
            goto inicio;
            }
        }while(opcao!=4);
    }

    @Benjamin Breeg Gostei de como você fez, mas no meu caso vou usar o código que o outro amigo postou antes, porque preciso limpar a tela, antes.

     

    Mas achei interessante a parte que o seu menu se encontra um pouco mais a baixo, quasse que direcionando para o meio, como posso personalizar isso para que fique quasse no final da página e centralizado?

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Ai você tem que entender como as coordenadas de tela trabalham no modo texto, existe um limite de 80 para x e 25 para y ou seja 80 colunas por 25 linhas. No PC as coordenadas começam em 1,1 no canto superior esquerdo da tela, o meio da tela seria em x=40, y=12

     

    gotoxy.bmp

     

     

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 18 minutos atrás, Benjamin Breeg disse:

    Ai você tem que entender como as coordenadas de tela trabalham no modo texto, existe um limite de 80 para x e 25 para y ou seja 80 colunas por 25 linhas. No PC as coordenadas começam em 1,1 no canto superior esquerdo da tela, o meio da tela seria em x=40, y=12

     

    gotoxy.bmp

     

     

     

    Certo, como posso representar isso usando o printf?

    Seria algo como printf("texto")X,Y; 

    ?

     

    Porque com o código atual, está usando uma unica linha, mas não seria problema em dividir em mais para organizar, caso necessite

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    no printf diretamente não da, é justamente o que a função gotoxy faz, ela desloca o cursor para as posições que você define e ai o printf imprime na posição correspondente.

     

    A implementação do devair1010 é mais inteligente, ele desloca cursor para uma coordenada e então tudo é impresso nessa posição.

     

    Editado por Benjamin Breeg
    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Citação

    Com o código abaixo, como posso fazer para que apertando ESQ em qualquer parte, dentro das opções, ele retorne para o menu principal?

    Acredito que usando thread ou signal... Mas isso depende, você quer fazer em qualquer parte e qualquer momento da execução do programa? Se sim, thread ou signal resolvem... caso contrário é só identificar o valor de esc e dar um continue no loop...

    • Curtir 3

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @erique    com algumas modificações no seu código ele entra nas opções  e espera até que pressione ESC , aí então ele volta para o menu ,  aqui seu código com modificações :

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <locale.h> /*// Biblioteca de acentuação*/
    #include <windows.h> /*// Biblioteca dos códigos do cmd*/
    
    int a,b,L,L2;
    void gotoxy(int x,int y){
        COORD c;
        c.X = x;
        c.Y = y;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
    }
    
    int main() {
        /*//menu*/
        int opcao;
        int ranking,ranking1,ranking2,ranking3,ranking4,ranking5,ranking6,ranking7,ranking8,ranking9,ranking10; /*// Sistema de Ranking*/
        setlocale(LC_ALL, "Portuguese"); /*// Definindo português brasileiro como linguagem dentro de printf*/
        do{
            inicio:
            opcao=0;
            L=2;L2=2;b=2;
            system("cls"); /*// Limpar a tela dos comandos anteriores*/
            system("color 0F"); /*// Definindo a cor do fundo e a letra no cmd*/
            printf("\n\n      1 - JOGAR \n      2 - RANKINGS \n      3 - CREDITOS \n      4 - SAIR\n");
            do{
                gotoxy(1,L);
                printf("  -%c",16);
                gotoxy(10,6);
                if(kbhit){a=getch();}
                if(a == 80){      /*seta p/baixo*/
                    L2=L;L++;b++;
                    if(b>5){b=2;L=2;}
                }
                if(a == 72){      /*seta p/cima */
                    L2=L;L--;b--;
                    if(b<2){b=5;L+=4;}
                }
                if(L!=L2){gotoxy(1,L2);printf("    ");L2=L;}
                if(a == 13){opcao=b-1;}
            }while(opcao == 0);
        switch (opcao) {
        case 1:
            system("cls");
            printf("GAME\n");
            /*Sleep(3000);*/
            printf("\nPressione ESC Para Voltar Ao Menu Principal");
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 2:
            system("cls");
            printf("Ranking\n\n");
            /*// Começo do código de ranking*/
            ranking1  = 5000;
            ranking2  = 4500;
            ranking3  = 4000;
            ranking4  = 3800;
            ranking5  = 3600;
            ranking6  = 3000;
            ranking7  = 2500;
            ranking8  = 2300;
            ranking9  = 1900;
            ranking10 = 1600;
    
            if(ranking > ranking10){
                ranking10 = ranking;
            }
            if(ranking > ranking9){
                ranking10 = ranking9;
                ranking9 = ranking;
            }
            if(ranking > ranking8){
                ranking9 = ranking8;
                ranking8 = ranking;
            }
            if(ranking > ranking7){
                ranking8 = ranking7;
                ranking7 = ranking;
            }
            if(ranking > ranking6){
                ranking7 = ranking6;
                ranking6 = ranking;
            }
            if(ranking > ranking5){
                ranking6 = ranking5;
                ranking5 = ranking;
            }
            if(ranking > ranking4){
                ranking5 = ranking4;
                ranking4 = ranking;
            }
            if(ranking > ranking3){
                ranking4 = ranking3;
                ranking3 = ranking;
            }
            if(ranking > ranking2){
                ranking3 = ranking2;
                ranking2 = ranking;
            }
            if(ranking > ranking1){
                ranking2 = ranking1;
                ranking1 = ranking;
            }
    
            printf  ("RANKING  1 = %d\nRANKING  2 = %d\nRANKING  3 = %d",ranking1,ranking2,ranking3);
            printf("\nRANKING  4 = %d\nRANKING  5 = %d\nRANKING  6 = %d",ranking4,ranking5,ranking6);
            printf("\nRANKING  7 = %d\nRANKING  8 = %d\nRANKING  9 = %d",ranking7,ranking8,ranking9);
            printf("\nRANKING 10 = %d\n",ranking10);
            /*// Fim do Código do Ranking*/
            /*Sleep(10000);*/
            printf("\nPressione ESC Para Voltar Ao Menu Principal");
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 3:
            system("cls");
            printf("Creditos\n");
            /*Sleep(3000);*/
            printf("\nPressione ESC Para Voltar Ao Menu Principal");
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 4:
            system("cls");
            printf("voce pediu para sair, fechando programa...");
            for(a=0;a<10;a++){
                printf(".");
                Sleep(300);/*// Aqui ele dorme por 3 centesimos de segundos depois continua o código*/
            }
            printf("!\n\n");
    		exit(0);
        default:
            printf("Você deve escolher uma opção válida\n");
            printf("Precione qualquer tecla para voltar ao menu\n");
            system("pause");
            goto inicio;
            }
        }while(opcao != 4);
        return 0;
    }

     

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 19 horas atrás, Benjamin Breeg disse:

    no printf diretamente não da, é justamente o que a função gotoxy faz, ela desloca o cursor para as posições que você define e ai o printf imprime na posição correspondente.

     

    A implementação do devair1010 é mais inteligente, ele desloca cursor para uma coordenada e então tudo é impresso nessa posição.

     

     

    Certo mestre, obrigado pelo help :)
     

    @TYSQUARE89 valeu pelo help :)

     

    @devair1010 Mestre, funcionou perfeitamente, agora tenho outra dúvida.

    Como funciona exatamente o seu código, nessa parte abaixo.

     

    Poderia me explicar com comentários, para poder entender e possivelmente modificar futuramente.

     

    Outra coisita, friend, gostaria de mudar o menu de onde ele está atualmente, para a parte de baixo, tentei mudando as linhas e colunas, mas não consegui, poderia modificar-lo e me informar como funciona?

                gotoxy(1,L);
                printf("~~>");
                gotoxy(10,6); // Inicio do cursor
                if(kbhit){a=getch();}
                if(a == 80 && b < 5){L2=L;L++;b++;} // Aqui ele indentifica a seta pra baixo
                if(a == 72 && b > 2){L2=L;L--;b--;} // Aqui ele indentifica a seta pra cima
                if(L!=L2){gotoxy(1,L2);printf("   ");L2=L;}
                if(a == 13){opcao=b-1;}
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <locale.h> // Biblioteca de acentuação
    #include <windows.h> // Biblioteca dos códigos do cmd
    
    int a,b,L,L2; // Declaração das váriaveis das setas
    
    void gotoxy(int x,int y){
        COORD c;
        c.X = x;
        c.Y = y;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
    }
    
    void main() {
        //menu
        int opcao;
        int ranking,ranking1,ranking2,ranking3,ranking4,ranking5,ranking6,ranking7,ranking8,ranking9,ranking10; // Sistema de Ranking
        setlocale(LC_ALL, "Portuguese"); // Definindo português brasileiro como linguagem dentro de printf
        do{
            inicio:
            opcao=0;
            L=2;L2=2;b=2;
            system("cls"); // Limpar a tela dos comandos anteriores
            system("color 1F"); // Definindo a cor do fundo e a letra no cmd
            printf("\n\n      JOGAR \n      RANKING \n      CRÉDITOS \n      SAIR\n");
    
            printf("\nDica: Precione a tecla ESQ a qualquer momento para voltar para o menu principal!\n");
    
        gotoxy(30,8); printf("                                  __ _____\n");
        gotoxy(30,9); printf("    /\\        /\\          /\\           /   |     \n");
        gotoxy(30,10); printf("   /  \\      /  \\        /  \\         /    |     \n");
        gotoxy(30,11); printf("  /    \\    /    \\      /_\\       /     |__\n");
        gotoxy(30,12); printf(" /      \\  /      \\    /      \\     /      |     \n");
        gotoxy(30,13); printf("/        \\/        \\  /        \\   /__  |__\n");
        gotoxy(30,14); printf(" __    ___   ___                 __   __\n");
        gotoxy(30,15); printf("|         |         |              /\\       |     | |     \n");
        gotoxy(30,16); printf("|         |         |             /  \\      |     | |     \n");
        gotoxy(30,17); printf("|__    |__   |            /_\\     |__| |__\n");
        gotoxy(30,18); printf("|               |   |           /      \\    |       |     \n");
        gotoxy(30,19); printf("|__    __|   |__   /        \\   |       |___\n");
    
    
    
            gotoxy(20,25);  printf("JOGAR");
            gotoxy(40,25);  printf("RANKING");
            gotoxy(60,25);  printf("CRÉDITOS");
            gotoxy(80,25);  printf("SAIR");
    
    
            do{
                gotoxy(1,L);
                printf("~~>");
                gotoxy(10,6); // Inicio do cursor
                if(kbhit){a=getch();}
                if(a == 80 && b < 5){L2=L;L++;b++;} // Aqui ele indentifica a seta pra baixo
                if(a == 72 && b > 2){L2=L;L--;b--;} // Aqui ele indentifica a seta pra cima
                if(L!=L2){gotoxy(1,L2);printf("   ");L2=L;}
                if(a == 13){opcao=b-1;}
            }while(opcao == 0);
        switch (opcao) {
        case 1:
            system("cls");
            printf("GAME\n");
            // Sleep(3000);
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 2:
            system("cls");
            printf("Ranking\n");
        // Começo do código de ranking
        ranking1 = 5000;
        ranking2 = 4500;
        ranking3 = 4000;
        ranking4 = 3800;
        ranking5 = 3600;
        ranking6 = 3000;
        ranking7 = 2500;
        ranking8 = 2300;
        ranking9 = 1900;
        ranking10 = 1600;
    
            if (ranking > ranking10) {
            ranking10 = ranking;
        }
            if (ranking > ranking9) {
                ranking10 = ranking9;
                ranking9 = ranking;
            }
                if (ranking > ranking8) {
                    ranking9 = ranking8;
                    ranking8 = ranking;
            }
                    if (ranking > ranking7) {
                        ranking8 = ranking7;
                        ranking7 = ranking;
            }
                        if (ranking > ranking6) {
                            ranking7 = ranking6;
                            ranking6 = ranking;
            }
                            if (ranking > ranking5) {
                                ranking6 = ranking5;
                                ranking5 = ranking;
            }
                                if (ranking > ranking4) {
                                    ranking5 = ranking4;
                                    ranking4 = ranking;
            }
                                    if (ranking > ranking3) {
                                        ranking4 = ranking3;
                                        ranking3 = ranking;
            }
                                        if (ranking > ranking2) {
                                            ranking3 = ranking2;
                                            ranking2 = ranking;
            }
                                            if (ranking > ranking1) {
                                                ranking2 = ranking1;
                                                 ranking1 = ranking;
            }
    
    
            printf  ("RANKING  1 = %d\nRANKING  2 = %d\nRANKING  3 = %d",ranking1,ranking2,ranking3);
            printf("\nRANKING  4 = %d\nRANKING  5 = %d\nRANKING  6 = %d",ranking4,ranking5,ranking6);
            printf("\nRANKING  7 = %d\nRANKING  8 = %d\nRANKING  9 = %d",ranking7,ranking8,ranking9);
            printf("\nRANKING 10 = %d\n",ranking10);
            // Fim do Código do Ranking
            // Sleep(10000);
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 3:
            system("cls");
            printf("Creditos\n");
            // Sleep(3000);
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 4:
            system("cls");
            printf("voce pediu para sair, fechando programa...");
            for(a=0;a<10;a++){
                printf(".");
                Sleep(300);/*// Aqui ele dorme por 3 centesimos de segundos depois continua o código*/
            }
            printf("!\n\n");
    		exit(0);
        default:
            system("cls");
            printf("Você deve escolher uma opção válida\n");
            printf("Precione qualquer tecla para voltar ao menu\n");
            system("pause");
            goto inicio;
            }
        }while(opcao!=4);
    }

    Código completo atual, a cima, para fins de consulta.
     

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @erique    essa parte do menu seria assim;

    int main() {
        int opcao;
        int ranking,ranking1,ranking2,ranking3,ranking4,ranking5,ranking6,ranking7,ranking8,ranking9,ranking10; /*// Sistema de Ranking*/
        setlocale(LC_ALL, "Portuguese"); /*// Definindo português brasileiro como linguagem dentro de printf*/
    do{
            inicio:
            system("cls"); /*// Limpar a tela dos comandos anteriores*/
            printf("\nDica: Precione a tecla ESQ a qualquer momento para voltar para o menu principal!\n");
    
            gotoxy(30, 8); printf("                                  __ _____\n");
            gotoxy(30, 9); printf("    /\\        /\\          /\\           /   |     \n");
            gotoxy(30,10); printf("   /  \\      /  \\        /  \\         /    |     \n");
            gotoxy(30,11); printf("  /    \\    /    \\      /_\\       /     |__\n");
            gotoxy(30,12); printf(" /      \\  /      \\    /      \\     /      |     \n");
            gotoxy(30,13); printf("/        \\/        \\  /        \\   /__  |__\n");
            gotoxy(30,14); printf(" __    ___   ___                 __   __\n");
            gotoxy(30,15); printf("|         |         |              /\\       |     | |     \n");
            gotoxy(30,16); printf("|         |         |             /  \\      |     | |     \n");
            gotoxy(30,17); printf("|__    |__   |            /_\\     |__| |__\n");
            gotoxy(30,18); printf("|               |   |           /      \\    |       |     \n");
            gotoxy(30,19); printf("|__    __|   |__   /        \\   |       |___\n");
    
    
    
            gotoxy(10,24);  printf("JOGAR");
            gotoxy(30,24);  printf("RANKING");
            gotoxy(50,24);  printf("CRÉDITOS");
            gotoxy(70,24);  printf("SAIR");
    
            /*modificando o valor de co muda a coluna de inicio do menu que pose ser de zero ate 63*/
            /*modificando o valor de L muda a linha de inicio do menu que pode ser de zero ate 20*/
            opcao=0;co=0;/*co é a coluna onde colocar a seta*/
            L=3;/*L é a linha onde fica as opções, mudando as opções p/baixo mude o valor de L igual*/
            L2=L;    /*L2 é onde estava a seta */
            L3=L+3;  /*L3 é a linha final do menu*/
            L4=L;    /*L4 é a linha de inicio do menu*/
            system("color 0F"); /*// Definindo a cor do fundo e a letra no cmd*/
            gotoxy(co+5,L);     /*co é a coluna de inicio do menu e L é a linha de inico do menu*/
            printf("1 - JOGAR");
            gotoxy(co+5,L+1);
            printf("2 - RANKINGS");
            gotoxy(co+5,L+2);
            printf("3 - CREDITOS");
            gotoxy(co+5,L+3);
            printf("4 - SAIR\n");
            do{   /*loop para movimentar a seta*/
                gotoxy(co,L);/*gotoxy posiciona o cursor, o co é a coluna e L é a linha onde imprimir a seta*/
                printf("  -%c",16);   /*imprime a seta*/
                gotoxy(0,24);         /*posiciona o cursor fora da tela para ele não ficar piscando*/
                if(kbhit){a=getch();} /*se alguma tecla foi pressionada a igual a tecla*/
                if(a == 80){          /*80 é valor do cactere seta p/baixo do teclado*/
                    L2=L;             /*L2 é posição onde estava a seta para apagar senao fica duas setas*/
                    L++;              /*L aponta para a nova posição da seta*/
                    if(L>L3){L=L4;}     /*L vai de 2 ate 5 pois é onde estão as 4 opções, mudando mude tambem os valores*/
                }                     /*a seta estando no 4 e for movida p/baixo ela vai para a primeira opção*/
                if(a == 72){          /*72 é valor do cactere seta p/cima do teclado*/
                    L2=L;             /*L2 é onde estava a seta para apagar*/
                    L--;              /*L aponta para a nova posição da seta*/
                    if(L<L4){L=L3;}     /*a seta estando no 1 e for movida p/cima ela vai para a ultima opção*/
                }
                if(L!=L2){            /*se a seta for movida */
                    gotoxy(co,L2);     /*posicione o cursor onde estava a seta*/
                    printf("    ");   /*imprime espaços em branco(que sao pretos) em cima da seta para apaga-la*/
                    L2=L;             /*L2 igual a nova posição da seta*/
                }
                if(a == 13){          /*se a tecla enter for pressionada*/
                    opcao=L-(L4-1);        /*opcao igual a linha onde esta a opção menos um, pois a primeira opção */
                                      /*esta na linha 2*/
                }
            }while(opcao == 0);       /*repete enquanto opcao igual a zero*/

    para mudar a posição do menu na tela você pode mudar o valor de L e co sendo que L pode ir de zero até 20 e co pode ir de zero até 63, ali dentro do primeiro do .

     

    vi que você está desenhando uma tela de abertura, então veja esse código aqui que tem uma tela de abertura feita com caracteres aumentados :

    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>
    void gotoxy(int x, int y){
      COORD c;
      c.X = x;
      c.Y = y;
      SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
    }
    int letras[11][7]={{126, 32, 32, 32, 33, 18, 12}, /* letra J*/
                       { 28, 34, 65, 65, 65, 34, 28}, /* letra O*/
                       { 60, 66,  1,  1,113, 98, 92}, /* letra G*/
                       { 28, 34, 65, 65, 65, 34, 28}, /* letra O*/
                       { 31, 33, 65, 65, 65, 33, 31}, /* letra D*/
                       { 28, 34, 65, 65,127, 65, 65}, /* letra A*/
                       { 65, 65, 65, 34, 34, 20,  8}, /* letra V*/
                       { 63,  1,  1, 31,  1,  1, 63}, /* letra E*/
                       {  1,  1,  1,  1,  1,  1,127}, /* letra L*/
                       { 65, 65, 65,127, 65, 65, 65}, /* letra H*/
                       { 28, 34, 65, 65,127, 65, 65}};/* letra A*/
    
    int tela_de_abertura(){
        int y1=3,x1=23,y2=y1,i,j,b,a;           /*y1=linha inicial  y2 para recuperar a linha inicial*/
        system("cls");
        for(i=0;i<11;i++){              /*  sao 10 letras  */
            if(i==4){y1=11;x1=10;y2=y1;}/*muda as letras para baixo*/
            if(i==6){y1=11;x1=30;y2=y1;}/*move a posição para frente*/
            for(j=0;j<7;j++){           /*o caractere é de 7 linhas */
                gotoxy(x1,y1);          /*posiciona o cursor na posição*/
                a=letras[i][j];             /*pega o numero da 1 linha do caractere */
                for(b=0;b<7;b++){       /*aqui é um numero de apenas 7 bits*/
                    if(a % 2 != 0){printf("%c",219);}else{printf(" ");}/*se bit=1 coloca espaço invertido senão coloca espaço normal*/
                    a=a/2;              /*dividindo numero por 2 desloca os bits para direita*/
                }
                y1++;                   /*muda para proxima linha*/
            }
            x1=x1+8;                    /*avança 8 colunas*/
            y1=y2;                      /*volta para linha inicial*/
        }
        printf(" %c",169);              /*imprime um caractere ®*/
        gotoxy(5,1);printf("%c",201);   /*╔*/
        for(i=2;i<23;i++){              /*para imprimir as bordas laterais*/
            gotoxy(5,i) ;printf("%c",186);/*║*/
            gotoxy(72,i);printf("%c",186);
        }
        for(i=6;i<72;i++){              /*para imprimir as bordas superiores e inferiores*/
            gotoxy(i,1) ;printf("%c",205);/*═*/
            gotoxy(i,23);printf("%c",205);
            gotoxy(i,19);printf("%c",205);
        }
        gotoxy(72,1) ;printf("%c",187); /*╗*/
        gotoxy(72,23);printf("%c",188); /*╝*/
        gotoxy(5,23) ;printf("%c",200); /*╚*/
        gotoxy(5,19) ;printf("%c",204); /*╠*/
        gotoxy(72,19);printf("%c",185); /*╣*/
        gotoxy(66,3) ;printf("%c%c%c",92,92,92);
        gotoxy(66,4) ;printf("(. .)" );
        gotoxy(66,5) ;printf("  -"   );
        return 0;
    }
    int main(){
        tela_de_abertura();
        getch();
        return 0;
    }

     para fazer a letra J precisa de sete números sendo que cada número tem oito bits, mas aqui coloquei os bits ao contrário, pois o certo seria os bits começarem da direta para a esquerda, então comecei da esquerda para a direita, e então pega-se o primeiro bit e ver se ele é zero ou um se for um imprime o caractere 219 e se for zero imprime um espaço vazio, e divide o número por dois e repete isso oito vezes pois são oito bits.

    aqui o desenho de um caractere a letra J:

    caractere4.thumb.jpg.9114907b7f94c7e29a361c2eea0f6944.jpg

       você pega o bit 1 e o valor começando de zero e se o bit estiver aceso soma 1 depois pega o bit 2 se estiver aceso soma 2,depois quatro e vai assim de acordo com os números que estão lá em cima na figura do caractere, então no final você terá o valor do primeiro dos sete números que formam o caractere J, então depois faz o mesmo para pegar os outros seis números.  então as letras que você quiser criar será desse modo, você desenha a letra nessa matriz com esses quadradinhos e depois faz a soma de cada linha para pegar o valor do número.
     

    • Curtir 1
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @devair1010 Certo, obrigado pelas dicas, eu fiz algumas modificações de acordo com o indicado, mas não encontrei alguma tabela que mostre qual tecla é correspondente a cada tecla, exemplo 27 = ESQ, 80 = Seta pra baixo... assim por diante, você possui algum link com essas informações?

     

    Preciso para mudar de setas de cima e baixo, para direita e esquerda.

     

    Segue o código atualizado, para ver se estou no caminho certo

     

    #include <stdio.h> // Biblioteca de entrada e saída de dados
    #include <stdlib.h> // Biblioteca de conversão das strings
    #include <conio.h> // Biblioteca de manipulação de caracteres
    #include <locale.h> // Biblioteca de acentuação de caracteres
    #include <windows.h> // Biblioteca dos códigos do cmd
    
    int a,b,L,L2; // Declaração das váriaveis das setas
    int co,L3,L4; // Novas declarações do menu
    
    void gotoxy(int x,int y){
        COORD c;
        c.X = x;
        c.Y = y;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
    }
    
    void main() {
        /* MENU */
        int opcao;
        setlocale(LC_ALL, "Portuguese"); // Definindo português como linguagem padrão
        SetConsoleTitle("Maze Escape"); // Título do programa
        do{
            inicio:
            opcao=0;
            L=2;L2=2;b=2;
            system("cls"); // Limpar a tela dos comandos anteriores
            system("color 1F"); // Definindo a cor do fundo e a letra no cmd
    //        printf("\n\n      JOGAR \n      RANKING - PONTOS \n      RANKING - TEMPO \n      CRÉDITOS \n      SAIR\n");
            printf("Dica: Precione a tecla ESQ a qualquer momento para voltar para o menu principal!");
    
    
        gotoxy(30,11); printf("    /\\        /\\          /\\      =======    =======");
        gotoxy(30,12); printf("   /  \\      /  \\        /  \\         //     ||     ");
        gotoxy(30,13); printf("  /    \\    /    \\      /====\\       //      =======");
        gotoxy(30,14); printf(" /      \\  /      \\    /      \\     //       ||     ");
        gotoxy(30,15); printf("/        \\/        \\  /        \\   =======   =======");
    
        gotoxy(27,17); printf("=======  =======   =======      /\\      =======   ======= ");
        gotoxy(27,18); printf("||       ||        ||          /  \\     ||        ||   || ");
        gotoxy(27,19); printf("=======  =======   ||         /====\\    =======   ======= ");
        gotoxy(27,20); printf("||            ||   ||        /      \\   ||        ||      ");
        gotoxy(27,21); printf("=======  ======    =======  /        \\  =======   ||      ");
    
            gotoxy(17,24);  printf("JOGAR");
            gotoxy(30,24);  printf("RANKING - PONTOS");
            gotoxy(55,24);  printf("RANKING - TEMPO");
            gotoxy(78,24);  printf("CRÉDITOS");
            gotoxy(92,24);  printf("SAIR");
    
    /*
            do{
                gotoxy(1,L);
                printf("~~>");
                gotoxy(10,7); // Inicio do cursor
                if(kbhit){a=getch();}
                if(a == 80 && b < 5){L2=L;L++;b++;} // Aqui ele indentifica a seta pra baixo
                if(a == 72 && b > 2){L2=L;L--;b--;} // Aqui ele indentifica a seta pra cima
                if(L!=L2){gotoxy(1,L2);printf("   ");L2=L;}
                if(a == 13){opcao=b-1;}
            }while(opcao == 0);
    */
    
            /*modificando o valor de co muda a coluna de inicio do menu que pose ser de zero ate 63*/
            /*modificando o valor de L muda a linha de inicio do menu que pode ser de zero ate 20*/
            opcao=0;co=0;/*co é a coluna onde colocar a seta*/
            L=3;/*L é a linha onde fica as opções, mudando as opções p/baixo mude o valor de L igual*/
            L2=L;    /*L2 é onde estava a seta */
            L3=L+3;  /*L3 é a linha final do menu*/
            L4=L;    /*L4 é a linha de inicio do menu*/
            system("color 1F"); /*// Definindo a cor do fundo e a letra no cmd*/
    /*
            gotoxy(co+5,L);     // co é a coluna de inicio do menu e L é a linha de inico do menu
            printf("1 - JOGAR");
            gotoxy(co+5,L+1);
            printf("2 - RANKINGS");
            gotoxy(co+5,L+2);
            printf("3 - CREDITOS");
            gotoxy(co+5,L+3);
            printf("4 - SAIR\n");
    */
            do{   /*loop para movimentar a seta*/
                gotoxy(co,L);/*gotoxy posiciona o cursor, o co é a coluna e L é a linha onde imprimir a seta*/
                printf("~~>",16);   /*imprime a seta*/
                gotoxy(0,25);         /*posiciona o cursor fora da tela para ele não ficar piscando*/
                if(kbhit){a=getch();} /*se alguma tecla foi pressionada a igual a tecla*/
                if(a == 80){          /*80 é valor do cactere seta p/baixo do teclado*/
                    L2=L;             /*L2 é posição onde estava a seta para apagar senao fica duas setas*/
                    L++;              /*L aponta para a nova posição da seta*/
                    if(L>L3){L=L4;}     /*L vai de 2 ate 5 pois é onde estão as 4 opções, mudando mude tambem os valores*/
                }                     /*a seta estando no 4 e for movida p/baixo ela vai para a primeira opção*/
                if(a == 72){          /*72 é valor do cactere seta p/cima do teclado*/
                    L2=L;             /*L2 é onde estava a seta para apagar*/
                    L--;              /*L aponta para a nova posição da seta*/
                    if(L<L4){L=L3;}     /*a seta estando no 1 e for movida p/cima ela vai para a ultima opção*/
                }
                if(L!=L2){            /*se a seta for movida */
                    gotoxy(co,L2);     /*posicione o cursor onde estava a seta*/
                    printf("    ");   /*imprime espaços em branco(que sao pretos) em cima da seta para apaga-la*/
                    L2=L;             /*L2 igual a nova posição da seta*/
                }
                if(a == 13){          /*se a tecla enter for pressionada*/
                    opcao=L-(L4-1);        /*opcao igual a linha onde esta a opção menos um, pois a primeira opção */
                                      /*esta na linha 2*/
                }
            }while(opcao == 0);       /*repete enquanto opcao igual a zero*/
    
    
    
    
    
        switch (opcao) {
        case 1:
            system("cls");
            printf("GAME\n");
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 2:
            system("cls");
            printf("Ranking por pontos\n");
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 3:
            system("cls");
            printf("Ranking por tempo\n");
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 4:
            system("cls");
            printf("Créditos\n");
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 5:
            system("cls");
            printf("Você pediu para sair, fechando programa...");
            for(a=0;a<10;a++){
                printf(".");
                Sleep(300);
            }
            printf("!\n\n");
    		exit(0);
        default:
            system("cls");
            printf("Você deve escolher uma opção válida\n");
            printf("Precione qualquer tecla para voltar ao menu\n");
            system("pause");
            goto inicio;
            }
        }while(opcao!=4);
    }

     

    --

    Sobre a sua última dica, do título, por hora não vou mexer nele, mas vale a dica para futura modificações, obg.

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @erique    esse seu código está bom,   apenas  ajeitei algumas  linhas ,  veja como ficou :

    #include <stdio.h> // Biblioteca de entrada e saída de dados
    #include <stdlib.h> // Biblioteca de conversão das strings
    #include <conio.h> // Biblioteca de manipulação de caracteres
    #include <locale.h> // Biblioteca de acentuação de caracteres
    #include <windows.h> // Biblioteca dos códigos do cmd
    
    int a,b,L,L2; // Declaração das váriaveis das setas
    int co,L3,L4; // Novas declarações do menu
    
    void gotoxy(int x,int y){
        COORD c;
        c.X = x;
        c.Y = y;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
    }
    
    int main() {
        /* MENU */
        int opcao;
        setlocale(LC_ALL, "Portuguese"); // Definindo português como linguagem padrão
        SetConsoleTitle("Maze Escape"); // Título do programa
        do{
            inicio:
            opcao=0;
            L=2;L2=2;b=2;
            system("cls"); // Limpar a tela dos comandos anteriores
            system("color 1F"); // Definindo a cor do fundo e a letra no cmd
            printf("Dica: Precione a tecla ESQ a qualquer momento para voltar para o menu principal!");
    
    
            gotoxy(15,11); printf("    /\\        /\\          /\\      =======    =======");
            gotoxy(15,12); printf("   /  \\      /  \\        /  \\         //     ||     ");
            gotoxy(15,13); printf("  /    \\    /    \\      /====\\       //      =======");
            gotoxy(15,14); printf(" /      \\  /      \\    /      \\     //       ||     ");
            gotoxy(15,15); printf("/        \\/        \\  /        \\   =======   =======");
    
            gotoxy(12,17); printf("=======  =======   =======      /\\      =======   ======= ");
            gotoxy(12,18); printf("||       ||        ||          /  \\     ||        ||   || ");
            gotoxy(12,19); printf("=======  =======   ||         /====\\    =======   ======= ");
            gotoxy(12,20); printf("||            ||   ||        /      \\   ||        ||      ");
            gotoxy(12,21); printf("=======  ======    =======  /        \\  =======   ||      ");
    
            gotoxy(2,24);  printf("JOGAR");
            gotoxy(12,24);  printf("RANKING - PONTOS");
            gotoxy(35,24);  printf("RANKING - TEMPO");
            gotoxy(58,24);  printf("CRÉDITOS");
            gotoxy(72,24);  printf("SAIR");
    
            /*modificando o valor de co muda a coluna de inicio do menu que pose ser de zero ate 63*/
            /*modificando o valor de L muda a linha de inicio do menu que pode ser de zero ate 20*/
            opcao=0;co=0;/*co é a coluna onde colocar a seta*/
            L=3;/*L é a linha onde fica as opções, mudando as opções p/baixo mude o valor de L igual*/
            L2=L;    /*L2 é onde estava a seta */
            L3=L+4;  /*L3 é a linha final do menu*/
            L4=L;    /*L4 é a linha de inicio do menu*/
            system("color 1F"); /*// Definindo a cor do fundo e a letra no cmd*/
    
            gotoxy(co+5,L);     // co é a coluna de inicio do menu e L é a linha de inico do menu
            printf("1 - JOGAR");
            gotoxy(co+5,L+1);
            printf("2 - RANKINGS POR PONTOS");
            gotoxy(co+5,L+2);
            printf("3 - RANKING POR TEMPO");
            gotoxy(co+5,L+3);
            printf("4 - CREDITOS");
            gotoxy(co+5,L+4);
            printf("5 - SAIR\n");
    
            do{                       /*loop para movimentar a seta*/
                gotoxy(co+2,L);       /*gotoxy posiciona o cursor, o co é a coluna e L é a linha onde imprimir a seta*/
                printf("-%c",16);     /*imprime a seta*/
                gotoxy(0,23);         /*posiciona o cursor fora da tela para ele não ficar piscando*/
                if(kbhit){a=getch();} /*se alguma tecla foi pressionada a igual a tecla*/
                if(a == 80){          /*80 é valor do cactere seta p/baixo do teclado*/
                    L2=L;             /*L2 é posição onde estava a seta para apagar senao fica duas setas*/
                    L++;              /*L aponta para a nova posição da seta*/
                    if(L>L3){L=L4;}   /*L vai de 2 ate 5 pois é onde estão as 4 opções, mudando mude tambem os valores*/
                }                     /*a seta estando no 4 e for movida p/baixo ela vai para a primeira opção*/
                if(a == 72){          /*72 é valor do cactere seta p/cima do teclado*/
                    L2=L;             /*L2 é onde estava a seta para apagar*/
                    L--;              /*L aponta para a nova posição da seta*/
                    if(L<L4){L=L3;}   /*a seta estando no 1 e for movida p/cima ela vai para a ultima opção*/
                }
                if(L!=L2){            /*se a seta for movida */
                    gotoxy(co+2,L2);  /*posicione o cursor onde estava a seta*/
                    printf("  ");     /*imprime espaços em branco(que sao pretos) em cima da seta para apaga-la*/
                    L2=L;             /*L2 igual a nova posição da seta*/
                }
                if(a == 13){          /*se a tecla enter for pressionada*/
                    opcao=L-(L4-1);        /*opcao igual a linha onde esta a opção menos um, pois a primeira opção */
                                      /*esta na linha 2*/
                }
            }while(opcao == 0);       /*repete enquanto opcao igual a zero*/
    
        switch (opcao) {
        case 1:
            system("cls");
            printf("AQUI É O GAME\n");
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 2:
            system("cls");
            printf("Ranking por pontos\n");
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 3:
            system("cls");
            printf("Ranking por tempo\n");
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 4:
            system("cls");
            printf("Aqui é Os Créditos\n");
            do{
                if(kbhit){a=getch();}
            }while(a != 27);
            break;
        case 5:
            system("cls");
            printf("Você pediu para sair, fechando programa...");
            for(a=0;a<10;a++){
                printf(".");
                Sleep(300);
            }
            printf("!\n\n");
    		exit(0);
        default:
            system("cls");
            printf("Você deve escolher uma opção válida\n");
            printf("Precione qualquer tecla para voltar ao menu\n");
            system("pause");
            goto inicio;
            }
        }while(opcao!=5);
    }

    para ver qual o valor de cada tecla você pode usar esse código aqui :

    #include <stdio.h>
    #include <conio.h>
    int a,b;
    int main(){
        do{
            if(b!=224)printf("Digite Um Tecla Ou Tecle ESC Para Parar\n\n");
            b=getch();
            if(b!=224)printf("O Valor Da Tecla é = %d\n\n",b);
            if(b==27){a=1;}
        }while(a==0);
        return 0;
    }

     

     

    • Curtir 2
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @devair1010 Ok, mas acho que você não me entendeu na questão de onde os menus precisam ficar.

     

    Você sempre volta o código pra ele mostrar as opções iniciais.

     

    Meu objetivo, e que os menus fiquem localizados nessa parte aqui destacada

    Screenshot_1.png?1505066683

     

    é as setas movem para a esquerda e direita nessas opções de baixo do título, essa parte de cima e só temporário, pra não ficar sem nada por hora, mas é totalmente removível quando o de baixo tiver pronto.

     

    Pode me ajudar nisso?

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @erique      sim agora entendi,  com esse menu  em baixo fica difícil colocar setinha, então coloquei um barra e eu uso a tela no tamanho 1280 x 720, parece que sua tela é maior então talvez você precise modificar os valores na hora que muda a posição da barra ,você pode ir testando para ver qual o valor certo ,  então veja essa parte que controla o menu, ficaria assim :

    int main() {
        /* MENU */
        int opcao;
        setlocale(LC_ALL, "Portuguese"); // Definindo português como linguagem padrão
        SetConsoleTitle("Maze Escape"); // Título do programa
        co=3;       /*co é a coluna onde colocar a barra*/
        L=23;b=1;   /*L é a linha onde fica as opções*/
        co2=co;     /*co2 é onde estava a barra */
        co_f=co+69;  /*co_f é a coluna final do menu  precisa ver o valor certo aqui é 69  já no seu não sei*/
        co_i=co;     /*co_i é a coluna de inicio do menu*/
        do{
            inicio:
            opcao=0;
            system("cls"); // Limpar a tela dos comandos anteriores
            system("color 1F"); // Definindo a cor do fundo e a letra no cmd
            printf("Dica: Precione a tecla ESQ a qualquer momento para voltar para o menu principal!");
    
    
            gotoxy(15,11); printf("    /\\        /\\          /\\      =======    =======");
            gotoxy(15,12); printf("   /  \\      /  \\        /  \\         //     ||     ");
            gotoxy(15,13); printf("  /    \\    /    \\      /====\\       //      =======");
            gotoxy(15,14); printf(" /      \\  /      \\    /      \\     //       ||     ");
            gotoxy(15,15); printf("/        \\/        \\  /        \\   =======   =======");
    
            gotoxy(12,17); printf("=======  =======   =======      /\\      =======   ======= ");
            gotoxy(12,18); printf("||       ||        ||          /  \\     ||        ||   || ");
            gotoxy(12,19); printf("=======  =======   ||         /====\\    =======   ======= ");
            gotoxy(12,20); printf("||            ||   ||        /      \\   ||        ||      ");
            gotoxy(12,21); printf("=======  ======    =======  /        \\  =======   ||      ");
    
            gotoxy(2,24);  printf("JOGAR");
            gotoxy(12,24);  printf("RANKING - PONTOS");
            gotoxy(35,24);  printf("RANKING - TEMPO");
            gotoxy(58,24);  printf("CRÉDITOS");
            gotoxy(72,24);  printf("SAIR");
    
            opcao=0;
            system("color 1F");         /*// Definindo a cor do fundo e a letra no cmd*/
    
            do{                         /*loop para movimentar a seta*/
                gotoxy(co,L);           /*gotoxy posiciona o cursor, o co é a coluna e L é a linha onde imprimir a seta*/
                printf("====");         /*imprime a seta*/
                gotoxy(0,0);            /*posiciona o cursor fora da tela para ele não ficar piscando*/
                if(kbhit){a=getch();}   /*se alguma tecla foi pressionada a igual a tecla*/
                if(a == 77){            /*80 é valor do cactere seta p/direita do teclado*/
                    co2=co;             /*co2 é posição onde estava a barra para apagar senao fica duas setas*/
                    if(b==1){co+=14;}   /*precisa ver se os espaços sao esses mesmos aqui é 14, tem que testar*/
                    if(b==2){co+=20;}   /*precisa ver se os espaços sao esses mesmos aqui é 20, tem que testar*/
                    if(b==3){co+=23;}   /*precisa ver se os espaços sao esses mesmos aqui é 23, tem que testar*/
                    if(b==4){co+=12;}   /*precisa ver se os espaços sao esses mesmos aqui é 12, tem que testar*/
                    b++;
                    if(b>5){b=1;co=co_i;}/*a barra estando no sair e for movida p/direita ela vai para a primeira opção*/
                }
                if(a == 75){             /*75 é valor do cactere seta p/esquerda do teclado*/
                    co2=co;              /*co2 é onde estava a barra, para apagar*/
                    if(b==2){co-=14;}
                    if(b==3){co-=20;}
                    if(b==4){co-=23;}
                    if(b==5){co-=12;}
                    b--;
                    if(b<1){b=5;co=co_f;}/*a seta estando no 1 e for movida p/esquerda ela vai para a ultima opção*/
                }
                if(co!=co2){             /*se a barra for movida */
                    gotoxy(co2,L);       /*posicione o cursor onde estava a barra*/
                    printf("    ");      /*imprime espaços em branco(que sao pretos) em cima da barra para apaga-la*/
                    co2=co;              /*co2 igual a nova posição da barra*/
                }
                if(a == 13){             /*se a tecla enter for pressionada*/
                    opcao=b;             /*opcao igual a b */
                }
            }while(opcao == 0);          /*repete enquanto opcao igual a zero*/
    
        switch (opcao) {
        case 1:

     

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @devair1010  
    - ALT+24 = ↑ (essa é show só não sei se tem como colocar ela em C)
    - ALT+7 = •
    - /\
    - |

     

    Editado por Xaws
    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @devair1010 @Xaws beleza, como vai dar mais trabalho, e fica meio estranho ao meu ver.

     

    Vamos manter nas setas mesmo, que já está excelente.

     

    Muito obrigado pelo help, bye

    • Curtir 2

    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






    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

    ×