Ir ao conteúdo
  • Cadastre-se

C Menu selecionável


erique
Ir à solução Resolvido por devair1010,

Posts recomendados

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
Link para o comentário
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);

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
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];

  • Curtir 2
  • Obrigado 1
Link para o comentário
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
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
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.

 

  • Curtir 2
Link para o comentário
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
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

  • Solução

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

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