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

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

@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

@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

@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

×