Ir para conteúdo
Fórum Script Brasil
  • 0

Função fechar janela do comandos!


duarte_valente

Pergunta

Colegas,preciso de uma função no qual e coloco-o no programa (jogo Sudoku) e que depois de executar o programa carrego numa tecla e fecha a janela desse programa.

Soponhamos que uso a tecla 'p'.

eu chego a esta parte e depois não sei a funçao que uso para fechar a janela que esta aberta(janela da linha de comandos!!!)

Ajudem-me

# include <stdio.h>
void botao(int sair)
{
    int p;
    p=sair;
}
int atalhos
{
    int p;
    printf("p=sair\n");
    scanf("%d",&p)
    
    ....??

Link para o comentário
Compartilhar em outros sites

24 respostass a esta questão

Posts Recomendados

  • 0

cara tu quer que digite o P para sair

mas tu ta armazenando ele como inteiro

a sintaxe do exit ta errada e sem sentido ali

por que logo em baixo você já encerra o programa.

mas a sintaxe do exit é

exit(0); //se o programa terminou sem erros.

exit(1); // se terminou com erros.

té mas.

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui está o meu código, ajude me a fechar a linha de comandos com a tecla p.não consigo...

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

int main ()
{
    char t;
    do
        {
        t='0';
        //t=getchar;
        scanf("%c", &t);
        if ((t=='p') || (t=='P'))
            {
            
            system("clear");//executa bem, o system("sair") já não, nem exit(1)..
            
            //system("sair"); // não dá?porque??
            }

        }
    while(1);
}

Link para o comentário
Compartilhar em outros sites

  • 0

Tu deve estar usando o linux pelo

system("clera");
né? Então a função system ela usa funções do sistema eu não uso o linux mas suponho que não tenha nenhuma funçao do tipo sair =P provavelmente deve ser exit como no windows então tente
system("exit");
ou use
exit(0);

em vez do system para dizer que seu programa encerrou corretamente

até mais cara!

Editado por wendell93
Link para o comentário
Compartilhar em outros sites

  • 0

Desse jeito, há dá para fechar a janela, seja com exit() ou system("exit").

O bash está executando o programa C, logo o programa só pode fechar ele mesmo.

Se quiser fechar o bash, descubra o PID (ID do processo) referente a ele e use kill:

system("kill -9 id_do_processo");

Link para o comentário
Compartilhar em outros sites

  • 0

Já tentei essas ipoteses e não deu..está certo que eu pensei assim também no system("exit"), pois na linha de comandos do linux se ponho exit ela fecha, eu axo que no linux esta função do system("exit") não dá.

A que resulta mas não faz o que desejo é o system("clear") , mas este apaga tudo o que tava no ecra, mas não fecha a janela.Quanto ao exit(0) tb não fecha a janela..

obrigado pela a ajuda á mesma

Link para o comentário
Compartilhar em outros sites

  • 0

a diferença de você digitar diretamente exit no bash e executar sysem("exit") ou exit(1) é quem está executando o programa. Você abriu o bash, logo você pode fechá-lo. Mas o programa C não abriu o bash, logo não pode fechá-lo com exit.

Para saber o número do processo, dá para usar o comando ps do bash. Creio que o C não tenha nada nativo para fazer isso. VocÊ tem que usar popen() e depois tratar o resultado.

http://forum.imasters.uol.com.br/index.php...t&p=1152714

Acabei fazendo aqui para testar e ver se eu não estava falando besteira.

E deu certo. Veja:

int main ()
{
    char retorno[20], comando[30];
    
    FILE *p = popen("ps | grep 'bash' | awk '{print $1}'", "r");
    fgets(retorno, 18, p);
    pclose(p);
    
    sprintf(comando, "kill -9 %s", retorno);
    
    system(comando);
    
    return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

O que fiz não pega tecla do teclado. É apenas uma função para fechar a janela do bash.

Se quiser fazer uma espécie de menu, você deve verificar a tecla digitada. Se for "p", então chame a função que postei.

Qual parte da função você não entendeu? Leu sobre a função popen()?

Link para o comentário
Compartilhar em outros sites

  • 0

Ah então é assim, eu não percebi esta parte:

FILE *p = popen("ps | grep 'bash' | awk '{print $1}'", "r"); //na internet aparece de maneira diferente e não consigo!

fgets(retorno, 18, p); // 18?? e o p??o p não foi declarado, porque esta aqui?para que serve?

e também esta parte porque pos estes valores entre as [ ]:char retorno[20], comando[30];

não podia por outros?

então axa que fica assim,com a tecla p:

# include <stdio.h>
int main ()
{
       char p;
    char retorno[20], comando[30];
    
    FILE *p = popen("ps | grep 'bash' | awk '{print $1}'", "r");
        printf("p=sair\n");
    fgets(retorno, 18, p);
    pclose(p);
    
    sprintf(comando, "kill -9 %s", retorno);
    
    system(comando);
    
    return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

a letra "p" digitada não tem nada a ver com popen.

void fechar ()
{
    char retorno[20], comando[30];
    
    FILE *p = popen("ps | grep 'bash' | awk '{print $1}'", "r");
    fgets(retorno, 18, p);
    pclose(p);
    
    sprintf(comando, "kill -9 %s", retorno);
    
    system(comando);
}

int main()
{
    char c;

    c = getchar();

    if (c == 'p')
        fechar();

    return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

o " p" é apenas uma tecla. Não tem a ver com nenhuma função do C. Isso depende do seu programa. Para sair, você pdoe usar a letra que quiser: p, s, q, x, z, y.. o que quiser.

A string dentro do popen() é um comando do bash, não do C. "ps" lista os processos; grep filltra a saída e mostra somente a linha em que há a palavra bash; awk foi usado para mostrar somente a primira coluna da string.

Veja as manpages

$ man ps

$ man grep

$ man awk

Link para o comentário
Compartilhar em outros sites

  • 0

Cara tu queria somente fechar a janela do DOS? é isso?

Se for isso abaixo um ex:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
    char var;
    var = getche();
    if (var=='p')
    {
                 exit(0); 
    }
    else 
         printf (" lalala ");
    system ("pause>null");
}

Abraço!!

Link para o comentário
Compartilhar em outros sites

  • 0

tentei juntar o meu código do "menu do Sudoku"ao seu que me deu quando utilizo o "p=sair" .Mas esta a ver um problema, existe dois main e se tiro o primeiro o outro na funciona, o que me pode dizer . existe o int main() da linha 28 e o int main na linha 37 que esta no case('p') .O que faço para correr os dois?

Aqui esta o código, em principio é só os int main().

# include <stdio.h>
# include <stdlib.h>
#define RESET        0
#define BRIGHT         1
#define DIM        2
#define UNDERLINE     3
#define BLINK        4
#define REVERSE        7
#define HIDDEN        8

#define BLACK         0
#define RED        1
#define GREEN        2
#define YELLOW        3
#define BLUE        4
#define MAGENTA        5
#define CYAN        6
#define    WHITE        7


void textcolor(int attr, int fg, int bg)
{
    char command[13];
    /* Command is the control command to the terminal */
    sprintf(command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40);
    printf("%s", command);
}
int main()//??
{

  char resposta;
  system("clear");
  textcolor(BRIGHT,WHITE, BLACK);
  printf("\n\n********* Menu *********\n");
  textcolor(BRIGHT,WHITE, BLACK);
  printf("\n     JOGO DO SUDOKU       \n");
  textcolor(BRIGHT,BLUE, BLACK);
  printf("\n\n1-Novo Jogo\n");
  textcolor(BRIGHT,BLUE, BLACK);
  printf("2-Regras do jogo\n");
  textcolor(BRIGHT,BLUE, BLACK);
  printf("3-Teclas do jogo\n");
  textcolor(BRIGHT,BLUE, BLACK);
  printf("p-Sair do jogo\n");
  textcolor(BRIGHT,GREEN, BLACK);
  printf("\nSeleciona a tua opção e carrega ENTER:\n");
  scanf("%c",&resposta);

  switch(resposta)
    {
    case ('1'):
       (resposta == '1');
    system("clear");
    textcolor(BRIGHT,WHITE, BLACK);
    printf("\n\n\n\nNíveis de dificuldade:\n");
        textcolor(BRIGHT,BLUE, BLACK);
    printf("\n1 - Fácil\n2 - Normal (Médio)\n3 - Dificil\n");
    textcolor(BRIGHT,GREEN, BLACK);
    printf("\nQual a dificuldade que pretende?\n\n");
    scanf("%c",&resposta);
    
        

      

    break;

    case ('2'):
    
      (resposta == '2');
    system("clear");
    textcolor(BRIGHT,WHITE, BLACK);
      printf("\n\n\n\nAS REGRAS DO JOGO\n\n");
    textcolor(BRIGHT,BLUE, BLACK);
      printf("\nSudoku é um jogo de raciocínio e lógica. Apesar de ser bastante simples, é divertido e viciante. Basta completar cada linha, coluna e quadrado 3x3 com números de 1 a 9. Não há nenhum tipo de matemática envolvida.\n\n");
    
    

      //RETORNA
    break;

    case ('3'):
    (resposta == '3');
    system("clear");
    textcolor(BRIGHT,WHITE, BLACK);
    printf("\n\n\n\nTeclas do jogo\n");
    textcolor(BRIGHT,BLUE, BLACK);
    printf("\na=Mover para a esquerda\nd=Mover para a direita\ns=Mover para baixo\nw=Mover para cima\np=Sair do jogo\n\n");
     

    
    break;
    
    
    case('p'):
    (resposta == 'p');
    void fechar ()
    {
        char retorno[20], comando[30]; 
        FILE *p = popen("ps | grep 'bash' | awk '{print $1}'", "r"); 
        fgets(retorno, 18,p);
        pclose(p);
        sprintf(comando, "kill -9 %s", retorno); 
        system(comando);
    }
    
    int main() //??
    {
        char c;   
        c = getchar();
        if (c == 'p') 
        {        
            fechar();
        }
       return 0;
    }    
    //break;
   }        
    return 0;   
}

tente compilar no comandos do linux e tente ver qual é o problema.

Link para o comentário
Compartilhar em outros sites

  • 0

Nas faz sentido isto:

(resposta == '2');

Para que você colocou essas linhas?

Compile com o GCC com a opção -Wall e você verá que sairão warnings.

Evite usar funções dentro de funções para casos assim.

# include <stdio.h>
# include <stdlib.h>
#define RESET        0
#define BRIGHT         1
#define DIM        2
#define UNDERLINE     3
#define BLINK        4
#define REVERSE        7
#define HIDDEN        8

#define BLACK         0
#define RED        1
#define GREEN        2
#define YELLOW        3
#define BLUE        4
#define MAGENTA        5
#define CYAN        6
#define    WHITE        7


void textcolor(int attr, int fg, int bg)
{
    char command[13];
    /* Command is the control command to the terminal */
    sprintf(command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40);
    printf("%s", command);
}
/*----------------*/


void fechar ()
    {
        char retorno[20], comando[30];
        FILE *p = popen("ps | grep 'bash' | awk '{print $1}'", "r");
        fgets(retorno, 18,p);
        pclose(p);
        sprintf(comando, "kill -9 %s", retorno);
        system(comando);
    }
 /*----------------*/


int main()//??
{

  char resposta;
  system("clear");
  textcolor(BRIGHT,WHITE, BLACK);
  printf("\n\n********* Menu *********\n");
  textcolor(BRIGHT,WHITE, BLACK);
  printf("\n     JOGO DO SUDOKU       \n");
  textcolor(BRIGHT,BLUE, BLACK);
  printf("\n\n1-Novo Jogo\n");
  textcolor(BRIGHT,BLUE, BLACK);
  printf("2-Regras do jogo\n");
  textcolor(BRIGHT,BLUE, BLACK);
  printf("3-Teclas do jogo\n");
  textcolor(BRIGHT,BLUE, BLACK);
  printf("p-Sair do jogo\n");
  textcolor(BRIGHT,GREEN, BLACK);
  printf("\nSeleciona a tua opção e carrega ENTER:\n");
  scanf("%c",&resposta);

  switch(resposta)
    {
    case ('1'):
       (resposta == '1');
    system("clear");
    textcolor(BRIGHT,WHITE, BLACK);
    printf("\n\n\n\nNíveis de dificuldade:\n");
        textcolor(BRIGHT,BLUE, BLACK);
    printf("\n1 - Fácil\n2 - Normal (Médio)\n3 - Dificil\n");
    textcolor(BRIGHT,GREEN, BLACK);
    printf("\nQual a dificuldade que pretende?\n\n");
    scanf("%c",&resposta);
    
    break;

    case ('2'):
    
      (resposta == '2');
    system("clear");
    textcolor(BRIGHT,WHITE, BLACK);
      printf("\n\n\n\nAS REGRAS DO JOGO\n\n");
    textcolor(BRIGHT,BLUE, BLACK);
      printf("\nSudoku é um jogo de raciocínio e lógica. Apesar de ser bastante simples, é divertido e viciante. Basta completar cada linha, coluna e quadrado 3x3 com números de 1 a 9. Não há nenhum tipo de matemática envolvida.\n\n");
    
    

     //RETORNA
    break;

    case ('3'):
    (resposta == '3');
    system("clear");
    textcolor(BRIGHT,WHITE, BLACK);
    printf("\n\n\n\nTeclas do jogo\n");
    textcolor(BRIGHT,BLUE, BLACK);
    printf("\na=Mover para a esquerda\nd=Mover para a direita\ns=Mover para baixo\nw=Mover para cima\np=Sair do jogo\n\n");
    

    
    break;
    
    
    case('p'):
    (resposta == 'p');
    fechar();
    break;
   }        
    return 0;  
}

Link para o comentário
Compartilhar em outros sites

  • 0
Obrigado pela ajuda.Se quieser o jogo Sudoku em C, em principio no proximo fim de semana esta completo eu envio-lhe.

Pode postar no fórum.

Com certeza ajudará muitos outros iniciantes. ;)

Está faltando um sub-fórum para códigos prontos em C. Vou conversar com a administração do fórum sobre isso. ;)

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe lá mais uma vez, tou a ter um problema ..o meu jogo esta quase feito e não consigo que isto dê.

Compile este código e Vá ao Novo jogo,1-facil que abrirá um novo jogo, tente jogar na tabela do Sudoku com as teclas W-cima,A-esquerda,D-direita e S-baixo.Os numeros são so dos teclados,só aceita de 1 a 9. O meu problema agora é que se eu escrever o numero num dos quadrados já predefenidos do jogo, ou seja escrever um numero por cima do outro no qual este seja os numeros predefenidos da quela dificuldade o numero modifica e logo assim o jogados confunde o jogo e não sabe jogar.

O que me ajuda?,para que os numeros predefenidos não mudem??..o que posso fazer?? aqui esta o meu código:

#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>

#define END_FILE_CHARACTER 0x04  /* ctrl-d is unix-style eof input key*/
#define RESET        0
#define BRIGHT         1
#define DIM            2
#define UNDERLINE     3
#define BLINK        4
#define REVERSE        7
#define HIDDEN        8
#define BLACK         0
#define RED            1
#define GREEN        2
#define YELLOW        3
#define BLUE        4
#define MAGENTA        5
#define CYAN        6
#define    WHITE        7

void textcolor(int attr, int fg, int bg)
{
    char command[13];
    /* Command is the control command to the terminal */
    sprintf(command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40);
    printf("%s", command);
}

int gotoxy(int x, int y) 
{    
    char essq[100];// String variable to hold the escape sequence
    char xstr[100];// Strings to hold the x and y coordinates
    char ystr[100];// Escape sequences must be built with characters
    /*
    ** Convert the screen coordinates to strings
    */
    sprintf(xstr, "%d", x);
    sprintf(ystr, "%d", y);
    
    /*
    #
    ** Build the escape sequence (vertical move)
    #
    */
    
    essq[0] = '';
    strcat(essq, "33[");
    strcat(essq, ystr);

    /*
    ** Described in man terminfo as vpa=\E[%p1%dd
    ** Vertical position absolute
    */

    strcat(essq, "d");
    /*
    ** Horizontal move
    ** Horizontal position absolute
    */
    strcat(essq, "33[");
    strcat(essq, xstr);
    // Described in man terminfo as hpa=\E[%p1%dG
    strcat(essq, "G");
    /*
    ** Execute the escape sequence
    ** This will move the cursor to x, y
    */
    printf("%s", essq);    
}
void mostra_tabuleiro()
{
    int s;
    gotoxy(1,3);
    {
        int a;
        a = 1;
        while( a <= 4 )
        {
            textcolor(BRIGHT, MAGENTA, BLACK);
            printf("\t###########################################\n\n\n\n\n\n\n\n");
            a++;    
        }
    }
    gotoxy(1,4);
    {
        int b;
        b = 1;
        while( b <= 12)
        {
            textcolor(BRIGHT, RED, BLACK);
            printf("\t#|---|---|---|#|---|---|---|#|---|---|---|#\n\n"); 
            b++;
        }
    }
    gotoxy(1,5);
    {
          int c;
        c = 1;
        while( c <= 3)
        {    
            textcolor(BRIGHT, GREEN, BLACK);        
            printf("\t#|   |   |   |#|   |   |   |#|   |   |   |#\n\n");
            c++;
        }
    }
    gotoxy(1,13);
    {
          int d;
        d = 1;
        while( d <= 3)
        {    
            textcolor(BRIGHT, GREEN, BLACK);        
            printf("\t#|   |   |   |#|   |   |   |#|   |   |   |#\n\n");
            d++;
        }
    }
    gotoxy(1,21);
    {
          int e;
        e = 1;
        while( e <= 3)
        {    
            textcolor(BRIGHT, GREEN, BLACK);        
            printf("\t#|   |   |   |#|   |   |   |#|   |   |   |#\n\n");
            e++;
        }
    }    
}

int menu2()
{
    int r;
    system("clear");
    textcolor(BLACK,BLACK,BLACK);
    //do
    //{

        textcolor(BRIGHT,WHITE, BLACK);

        printf("\n\n\n\nNíveis de dificuldade:\n");

        textcolor(BRIGHT,BLUE, BLACK);

        printf("\n1 - Fácil\n2 - Normal (Médio)\n3 - Dificil\n");

        textcolor(BRIGHT,GREEN, BLACK);

        printf("\nQual a dificuldade que pretende?\n\n");

        scanf("%d",&r);
    //}
    //while(r<1 || r>3);
    return r;
}

void preencher()

{
    switch(menu2())
    {
        case 1:
            {
                system("clear");
                mostra_tabuleiro();
                textcolor(BRIGHT, GREEN, BLACK);
                gotoxy(12,5);//1    
                printf("1");
                gotoxy(26,5);//3    
                printf("8");
                gotoxy(34,7);//14    
                printf("3");
                gotoxy(20,9);//20    
                printf("8");
                gotoxy(40,9);//24    
                printf("7");
                gotoxy(48,9);//26    
                printf("4");
                gotoxy(16,13);//28    
                printf("8");
                gotoxy(30,13);//31    
                printf("4");
                gotoxy(40,13);//33    
                printf("5");
                gotoxy(44,13);//34    
                printf("6");
                gotoxy(20,15);//38    
                printf("9");
                gotoxy(26,15);//39    
                printf("5");
                gotoxy(34,15);//41    
                printf("2");
                gotoxy(40,15);//42    
                printf("4");
                gotoxy(16,17);//46    
                printf("3");
                gotoxy(20,17);//47    
                printf("5");
                gotoxy(30,17);//49    
                printf("7");
                gotoxy(44,17);//52    
                printf("2");
                gotoxy(12,21);//54    
                printf("6");
                gotoxy(20,21);//56    
                printf("1");
                gotoxy(40,21);//60    
                printf("8");
                gotoxy(26,23);//66    
                printf("3");
                gotoxy(34,25);//77    
                printf("9");
                gotoxy(44,25);//79    
                printf("5");
            }
            break;
        case 2:
            {
                system("clear");
                mostra_tabuleiro();
                textcolor(BRIGHT, GREEN, BLACK);
                gotoxy(12,5);//1    
                printf("9");
                gotoxy(34,5);//5    
                printf("7");
                gotoxy(40,5);//6    
                printf("4");
                gotoxy(16,7);//10    
                printf("3");
                gotoxy(20,7);//11    
                printf("2");
                gotoxy(20,9);//20    
                printf("1");
                gotoxy(34,9);//23    
                printf("8");
                gotoxy(40,9);//24    
                printf("5");
                gotoxy(48,9);//26    
                printf("2");
                gotoxy(30,13);//31    
                printf("4");
                gotoxy(34,13);//32    
                printf("2");
                gotoxy(16,15);//37    
                printf("6");
                gotoxy(44,15);//43    
                printf("4");
                gotoxy(26,17);//48    
                printf("9");
                gotoxy(30,17);//49    
                printf("5");
                gotoxy(12,21);//54    
                printf("8");
                gotoxy(20,21);//56    
                printf("9");
                gotoxy(26,21);//57    
                printf("3");
                gotoxy(40,21);//60    
                printf("2");
                gotoxy(40,23);//69    
                printf("1");
                gotoxy(44,23);//70    
                printf("5");
                gotoxy(20,25);//74    
                printf("3");
                gotoxy(26,25);//75    
                printf("5");
                gotoxy(44,25);//79    
                printf("7");

            }
            break;
    }

}

int vit_linhas(int*tab)
{
    int i,j,soma;
    for(i=0;i<9;i++) //linha a linha
    {
        soma=0;
        for(j=0;j<9;j++) //coluna a coluna
            soma+=tab[9*i+j]; //somar todas as celulas
        if(soma!=45)
        return 0; //devolvemos diferente de vitoria
    }
    
    return 1; //devolvemos vitoria
}

int vit_colunas(int*tab)
{
    int i,j,soma;
    for(i=0;i<9;i++) //coluna a coluna
    {
        soma=0;
        for(j=0;j<9;j++) //linha a linha
            soma+=tab[9*i+j]; //somar todas as celulas
        if(soma!=45) 
        return 0; //devolvemos a diferença de vitoria
    }
    return 1; //devolvemos vitoria
}

int vit_quadrados(int*tab)
{
    int i;
    for(i=0;i<8;i++)
    {
        if((i/9)%3==0) //linha 0,3,6
        {
            if(i%3==0) //coluna 0,3,6
            {
                if(tab[i]+tab[i+1]+tab[i+2]+tab[i+9]+tab[i+10]+tab[i+11]+tab[i+18]+tab[i+19]+tab[i+20]!=45)
                return 0;
            }
        }
    }
    return 1; //devolvemos a vitoria
}

void desenha_digito (int linha, int coluna, int digito)
{    
    int x,y;
    x=12+linha*4;
    y=5+coluna*2;
    
    if(coluna>=3)
    {
        y=7+coluna*2;
    }
    if(coluna>=6)
    {
        y=9+coluna*2;
    }
    if(linha>=3)
    {
        x=14+linha*4;
    }
    if(linha>=6)
    {
        x=16+linha*4;
    }
    gotoxy(x,y);
    textcolor(WHITE,BLACK,BLUE);
    {
        printf("%d",digito);
    }
    
} 

void desenha_cursor(int linha,int coluna,int digito)
{        
    int x,y;
    x=12+linha*4;
    y=5+coluna*2;

    if(coluna>=3)
    {
        y=7+coluna*2;
    }
    if(coluna>=6)
    {
        y=9+coluna*2;
    }
    if(linha>=3)
    {
        x=14+linha*4;
    }
    if(linha>=6)
    {
        x=16+linha*4;
    }
    gotoxy(x,y);
    usleep(50);
    textcolor(WHITE,BLACK,BLUE);    
    {                        
        gotoxy(x,y);
    }
}
int limpar_ecra1()
{
    int x,y;
    for(y=1; y<60; y++)

    {

        for(x=1; x<160; x++)
        {

            gotoxy(x, y);
            printf(" ");

        }

    }
}    
int linux_getch(void)
{
    struct termios oldstuff;
    struct termios newstuff;
    int    inch;
    tcgetattr(STDIN_FILENO, &oldstuff);
                                     /* save old attributes               */
    newstuff = oldstuff;
    newstuff.c_lflag &= ~(ICANON | ECHO); /* reset "canonical" and "echo" flags*/
    tcsetattr(STDIN_FILENO, TCSANOW, &newstuff); /* set new attributes         */
    inch = getchar();
    tcsetattr(STDIN_FILENO, TCSANOW, &oldstuff); /* restore old attributes     */
    if (inch == END_FILE_CHARACTER) 
    {
        inch = EOF;
    }
    return inch;
}

int colocar_num(void)
{
    int kb_char,cx=0,cy=0, numero,i,a,b,c;
    float hora,min,sec;
    int hora1,min1,sec1;
    int tabuleiro[81]={0};
    time_t start,end;
    float dif;
    time (&start);    
    while ((kb_char = linux_getch()) != EOF) 
    {    
        time (&end);
        dif = difftime (end,start);
        hora=dif/3600;
        hora1=hora;
        min=(hora-hora1)*60;
        min1=min;
        sec=(min-min1)*60;
        sec1=sec;
        gotoxy(65,5);
        printf("Tempo =%2d:%2d:%2d",hora1,min1,sec1);
        gotoxy(65,4);
        printf("o-voltar ao menu");

        if(kb_char == 97 && cx >=1) {cx--;desenha_cursor (cx,cy,9*cy+(cx+1));}//Esquerda
        else if(kb_char == 100 && cx <8){cx++;desenha_cursor (cx,cy,9*cy+(cx-1));}//Dir
        else if(kb_char == 119 && cy >=1){cy--;desenha_cursor (cx,cy,9*(cy+1)+cx);}//Cima
        else if(kb_char == 115 && cy < 8){cy++;desenha_cursor (cx,cy,9*(cy-1)+cx);}//Baixo
        else if(kb_char == 111){limpar_ecra1();main();}
        else if(kb_char >= 49 && kb_char <= 57)        
        {
            numero = kb_char-48;
            i=cy*9+cx;
            tabuleiro[i]=numero;
            desenha_digito(cx, cy, numero);
        }    
        else if(kb_char == 48)break;
    }
    time (&end);
    dif = difftime (end,start);
    hora=dif/3600;
    hora1=hora;
    min=(hora-hora1)*60;
    min1=min;
    sec=(min-min1)*60;
    sec1=sec;
    gotoxy(65,5);
    printf("Tempo =%2d:%2d:%2d",hora1,min1,sec1);

    a=vit_linhas (tabuleiro);
    b=vit_colunas (tabuleiro);
    c=vit_quadrados (tabuleiro);
    if(a*c*b==1)
    { 
        gotoxy(65,7);
        printf("***************");
        gotoxy(65,8);
        printf("| Voce ganhou |");
        gotoxy(65,9);
        printf("***************");
    }
    else 
    { 
        gotoxy(65,7);
        printf("***************");
        gotoxy(65,8);
        printf("| Voce perdeu |");
        gotoxy(65,9);
        printf("***************");
    }
    gotoxy (10,28);
    return 0;
}


void fechar()

{

    char retorno[20], comando[30];

        FILE *p = popen("ps | grep 'bash' | awk '{print $1}'", "r");

        fgets(retorno, 18,p);

        pclose(p);

        sprintf(comando, "kill -9 %s", retorno);

        system(comando);

}
int limpar_ecra()
{
    int x,y;
    for(y=1; y<60; y++)

    {

        for(x=0; x<43; x++)
        {

            gotoxy(x, y);
            printf(" ");

        }

    }
}

int teclas()
{
    system("clear");
    textcolor(BLACK,BLACK,BLACK);
    gotoxy(44,3);

        textcolor(BRIGHT,WHITE, BLACK);

        printf("Teclas do jogo");
    gotoxy(44,5);

       textcolor(BRIGHT,BLUE, BLACK);

        printf("a=Mover para a esquerda");
    gotoxy(44,6);
    printf("d=Mover para a direita");
    gotoxy(44,7);
    printf("s=Mover para baixo");
    gotoxy(44,8);
    printf("w=Mover para cima");
    gotoxy(44,9);
    printf("p=Sair do jogo");


}
int ajuda()
{
    system("clear");
    textcolor(BLACK,BLACK,BLACK);
    gotoxy(44,3);

        textcolor(BRIGHT,WHITE, BLACK);

        printf("AS REGRAS DO JOGO");
    gotoxy(44,5);

        textcolor(BRIGHT,BLUE, BLACK);

        printf("Sudoku é um jogo de raciocínio e lógica. Apesar de ser bastante simples, é divertido e viciante.");
    gotoxy(44,6);
    printf("Basta completar cada linha, coluna e quadrado 3x3 com números de 1 a 9,sem repetir.");
    gotoxy(44,7);
    printf("Neste jogo não existe nenhum tipo de matemática envolvida.");
}

int menu()
{
    char resposta;

      limpar_ecra();
    textcolor(BLACK,BLACK,BLACK);
    gotoxy(1,1);

    textcolor(BRIGHT,WHITE, BLACK);

    printf("\n\n********* Menu *********\n");
    textcolor(BRIGHT,WHITE, BLACK);

    printf("\n     JOGO DO SUDOKU       \n");

    textcolor(BRIGHT,BLUE, BLACK);

    printf("\n\n1-Novo Jogo\n");

    textcolor(BRIGHT,BLUE, BLACK);

    printf("2-Regras do jogo\n");

    textcolor(BRIGHT,BLUE, BLACK);

    printf("3-Teclas do jogo\n");

    textcolor(BRIGHT,BLUE, BLACK);

    printf("p-Sair do jogo\n");

    textcolor(BRIGHT,GREEN, BLACK);

    printf("\nSeleciona a tua opção e carrega ENTER:");

    scanf("%c",&resposta);
    return resposta;
}
int main()
{
    int l;
    do
    {
        switch(menu())
        {

            case '1':
                preencher();
                colocar_num();
                /*switch(colocar_num())
                {
                    case 'o':
                        system("clear");
                        l=10;
                        break;
                }*/
                break;
            case '2':
                ajuda();
                l=10;
                break;
            case '3':
                teclas();
                l=10;
                break;
            case 'p':
                fechar();
                break;
        }
    }
    while(l==10);
    return 0;
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...