Ir para conteúdo
Fórum Script Brasil

duarte_valente

Membros
  • Total de itens

    25
  • Registro em

  • Última visita

Tudo que duarte_valente postou

  1. 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; }
  2. Obrigado pela ajuda.Se quieser o jogo Sudoku em C, em principio no proximo fim de semana esta completo eu envio-lhe. Abraços Mais uma vez obrigado por tudo e a todos que me responderam no forum.
  3. 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.
  4. então o p tem haver com o que? com o p=sair?? agora quanto as minhas dúvidas..podia me explciarme?
  5. 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; }
  6. Obrigado pela ajuda.podia explicarme a sua função que fez??, é que certas coisas não percebo... e se eu quiseres com a tecla p ,resultará?como faço ?
  7. 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
  8. Como é que axo para descobrir o PID (ID do processo) de um programa em c??
  9. 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); }
  10. duarte_valente

    szInput ?

    obrigado..mais uma dúvida. Preciso para o meu jogo Sudoku, uma função time que conte o tempo e carrego numa tecla e pára, no final aparece por baixo o tempo que foi contado ate aquele momento!! Começa a contar o tempo no preciso momento que aparece o tabuleiro..è tipo um cronométro.. Podia dar um dica com é que faxo??
  11. duarte_valente

    szInput ?

    alguém me sabe dizer para que serve isso, e quando é que uso??? : char szInput [256]; gets (szInput);
  12. não estou conseguindo.. aqui está como fiz, o que tenho mal?? #include <stdio.h> int main() { int p; printf("p=sair\n"); scanf("%d",&p); exit(p); return (0); }
  13. não consegui encontrar funções assim mais simples na internet ... estou me a consfundir um bocado quais são as outras funções existentes?
  14. 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) ....??
  15. Preciso de uma ajuda.Preciso de uma função no qual gere 6 numeros entre 1 e 49, automáticamente.POdem me ajudar!!!
  16. Na main do cursor ,o que é que eu ponho dentro dos parenteses () ???? int main() { . . . cursor( ); } tou confundido. ponho : cursor(linha,coluna,digito) ou ponho: cursor() ??? Quanto a tua questão: Como é que eu passo o valor de uma pra outra??
  17. Boas! Eu tenho duas funções a parte e queria juntalas pa ficarem numa só. A primeira função é a do chamar digito, no qual pergunto a linha e a coluna e o numero e vai coloca-lo o digito no local correcto. A outra funçao é a do cursor que se passa igual, chamo a linha e coluna e o cursor vai piscar no local correcto. O meu trabalho é juntar estas duas funções numa SÓ. Ficava assim: ia perguntar a linha e a coluna e o numero, depois ia colucar o cursor e o numero nesse devido local correcto.(nota o cursor tem que aparecer a piscar e o digito parado). A funçao do digito: int main() { int i, j; textcolor(BLACK, BLACK, BLACK); limpar_ecra(); desenha_tabuleiro(); for(i=0; i<9; i++) for(j=0; j<9; j++) digito(i, j, j+80*i); } int limpar_ecra2() { int x,y; for(y=34; y<60; y++) { for(x=0; x<160; x++) { gotoxy(x, y); printf(" "); } } } int limpar_ecra3() { int x,y; for(y=28; y<34; y++) { for(x=0; x<160; x++) { gotoxy(x, y); printf(" "); } } } void desenha_digito (int linha, int coluna, int digito) { int x,y,n,i; x=8+linha*4; y=3+coluna*2; if(coluna>=3) { y=5+coluna*2; } if(coluna>=6) { y=7+coluna*2; } if(linha>=3) { x=10+linha*4; } if(linha>=6) { x=12+linha*4; } if( digito>=9 || digito<=-1) { gotoxy(3,36); printf("Nº do digito INCORRETO, numeros validos de 0 a 8"); } textcolor(WHITE,BLUE,BLACK); { for(i=0; i<=2; i++) { n=x-1; gotoxy(n,y); textcolor(WHITE,BLUE,BLACK); printf(" \n"); } gotoxy(n,y); textcolor(BLACK, BLACK, BLACK); printf(" \n"); gotoxy(x,y); textcolor(BRIGHT, GREEN, BLACK); printf("%d",digito); } //gotoxy(x,y); //printf("%d",digito); } int digito() { int coluna,linha,digito; textcolor(BLACK, BLACK, BLACK); limpar_ecra3(); gotoxy(3,28); textcolor(BRIGHT, GREEN, BLACK); printf("introduza coluna linha:\n"); scanf("%d%d",&linha,&coluna); if(coluna>=9 || coluna<=-1 || linha>=9 || linha<=-1) { gotoxy(3,34); printf("Numero INCORRETO, numeros validos de 0 a 8"); return 0; } limpar_ecra2(); gotoxy(3,31); printf("introduza numero:\n"); scanf("%d",&digito); desenha_digito(coluna,linha,digito); return 1; } o código do cursor: void desenha_cursor(int linha,int coluna, int digito) { int x,y,i; x=10+linha*4; y=4+coluna*2; if(coluna>=3) { y=6+coluna*2; } if(coluna>=6) { y=8+coluna*2; } if(linha>=3) { x=12+linha*4; } if(linha>=6) { x=14+linha*4; } if( digito>=9 || digito<=-1) { gotoxy(1,36); printf("Nº do digito INCORRETO, numeros validos de 0 a 8"); } //gotoxy(x,y); //printf("%d",digito); for(i=0;i<10;i++) { usleep(500000); textcolor(WHITE,BLACK,BLACK); { gotoxy(x,y); printf("|---|\n"); gotoxy(x,y+1); printf("| |\n"); gotoxy(x,y+2); printf("|---|\n"); } for(i=0;i<1;i++) { usleep(500000); textcolor(WHITE,BLACK,YELLOW); { gotoxy(x,y); printf("|---|\n"); gotoxy(x,y+1); printf("| |\n"); gotoxy(x,y+2); printf("|---|\n"); } } } gotoxy(1,28); printf(" \n"); } int cursor(int linha,int coluna,int digito) { gotoxy(3,32); printf("Insira o numero da linha\n"); scanf("%d",&linha); gotoxy(3,34); printf("Insira o numero da coluna\n"); scanf("%d",&coluna); desenha_cursor(linha,coluna,digito); return 0; }
  18. o código que eu fiz até agora está assim.Mas não sei o que fazer para dar. desculpa pela organização.. Existe as bibliotecas que em principio estão certas.A funçao textcolor serve para por a cor no cursor e na tabela.A função gotoxy é para as coordenadas. A função void desenha_cursor(int coluna,int linha, int digito) são os calculos para o cursor nos referidos quadrados da tabela do Sudoku, onde vai ser situado o cursor sem sair dos 81 quadrados . A função int repetir () vai repetir a pergunta várias vezes, sem ter de compilar as várias vezes. a funçao int digito() vai aceitar os numeros das linhas e das colunas entre 0 a 8 senao dá erro.A funçao int numero(int linha,int coluna) é onde vai aparecer o numero, depois de pedir a linha e a coluna( o numero vai aparecer no local do cursor ao mesmo tempo).A funçao int desenha_tabuleiro() é o tabuleiro do Sudoku. Objectivo do jogo e do problema: 1)perguntar pela linha e coluna!! 2)perguntar pelo numero!! 3)o cursor PISCA nesse local e o numero aparece #include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> #include <string.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 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); } int limpar_ecra() { int x,y; for(y=1; y<60; y++) { for(x=1; x<160; x++) { gotoxy(x, y); printf(" "); } } } void desenha_cursor(int coluna,int linha, int digito) { int x,y; x=10+linha*4; y=4+coluna*2; if(coluna>=4) { y=6+coluna*2; } if(coluna>=7) { y=8+coluna*2; } if(linha>=4) { x=12+linha*4; } if(linha>=7) { x=14+linha*4; } if( digito>=9 || digito<=-1) { gotoxy(3,36); printf("Nº do digito INCORRETO, numeros validos de 0 a 8"); } gotoxy(x,y); printf("%d",digito); { usleep(500.000); textcolor(WHITE,BLACK,BLACK); { gotoxy(x,y); printf("|---|\n"); gotoxy(x,y+1); printf("| |\n"); gotoxy(x,y+2); printf("|---|\n"); } usleep(500.000); textcolor(WHITE,BLACK,YELLOW); { gotoxy(x,y); printf("|---|\n"); gotoxy(x,y+1); printf("| |\n"); gotoxy(x,y+2); printf("|---|\n"); } gotoxy(1,28); printf(" \n"); } } int repetir() { int i, j; textcolor(BLACK, BLACK, BLACK); limpar_ecra(); desenha_tabuleiro(); for(i=0; i<9; i++) for(j=0; j<9; j++) digito(i, j,j+80*i); } int digito() { int coluna,linha,digito; textcolor(BLACK, BLACK, BLACK); gotoxy(3,28); textcolor(BRIGHT, GREEN, BLACK); printf("introduza coluna linha:\n"); scanf("%d%d",&linha,&coluna); if(coluna>=9 || coluna<=-1 || linha>=9 || linha<=-1) { gotoxy(3,34); printf("Numero INCORRETO, numeros validos de 0 a 8"); return 0; } gotoxy(3,31); printf("introduza numero:\n"); scanf("%d",&digito); desenha_cursor(linha,coluna,digito); return 1; } int numero(int linha,int coluna) { gotoxy(3,32); printf("Insira o numero da linha\n"); scanf("%d",&linha); gotoxy(3,34); printf("Insira o numero da coluna\n"); scanf("%d",&coluna); desenha_cursor(linha,coluna,digito4); return 0; } int desenha_tabuleiro() { limpar_ecra(); gotoxy(1,3); { int a; a = 1; while( a <= 4 ) { textcolor(BRIGHT,CYAN, BLACK); printf("\t###########################################\n\n\n\n\n\n\n\n"); a++; } } gotoxy(1,4); { int b; b = 1; while( b <= 12) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#|---|---|---|#|---|---|---|#|---|---|---|#\n\n"); b++; } } gotoxy(1,5); { int c; c = 1; while( c <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); c++; } } gotoxy(1,13); { int d; d = 1; while( d <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); d++; } } gotoxy(1,21); { int e; e = 1; while( e <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); e++; } } gotoxy(1,28); printf(" \n"); } int main() { int i; desenha_tabuleiro(); numero(); digito(); repetir(); return 0; }
  19. cara, na percebo já corrigi os erros.Agora são os argumentos e já não sei o que fazer. A funçao esta corrigida assim como me disse.Que argumentos faltam pa eu terminar a funçao?? ajuda me.. [code #include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> #include <string.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 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); } int limpar_ecra() { int x,y; for(y=1; y<60; y++) { for(x=1; x<160; x++) { gotoxy(x, y); printf(" "); } } } void desenha_cursor(int coluna,int linha, int digito) { int x,y; x=10+linha*4; y=4+coluna*2; if(coluna>=4) { y=6+coluna*2; } if(coluna>=7) { y=8+coluna*2; } if(linha>=4) { x=12+linha*4; } if(linha>=7) { x=14+linha*4; } if( digito>=9 || digito<=-1) { gotoxy(3,36); printf("Nº do digito INCORRETO, numeros validos de 0 a 8"); } gotoxy(x,y); printf("%d",digito); { usleep(500.000); textcolor(WHITE,BLACK,BLACK); { gotoxy(x,y); printf("|---|\n"); gotoxy(x,y+1); printf("| |\n"); gotoxy(x,y+2); printf("|---|\n"); } usleep(500.000); textcolor(WHITE,BLACK,YELLOW); { gotoxy(x,y); printf("|---|\n"); gotoxy(x,y+1); printf("| |\n"); gotoxy(x,y+2); printf("|---|\n"); } gotoxy(1,28); printf(" \n"); } } int repetir() { int i, j; textcolor(BLACK, BLACK, BLACK); limpar_ecra(); desenha_tabuleiro(); for(i=0; i<9; i++) for(j=0; j<9; j++) numero(i, j,j+80*i); } int digito() { int coluna,linha,digito; textcolor(BLACK, BLACK, BLACK); gotoxy(3,28); textcolor(BRIGHT, GREEN, BLACK); printf("introduza coluna linha:\n"); scanf("%d%d",&linha,&coluna); if(coluna>=9 || coluna<=-1 || linha>=9 || linha<=-1) { gotoxy(3,34); printf("Numero INCORRETO, numeros validos de 0 a 8"); return 0; } gotoxy(3,31); printf("introduza numero:\n"); scanf("%d",&digito); desenha_cursor(linha,coluna,digito); return 1; } int numero(int linha,int coluna) { gotoxy(3,32); printf("Insira o numero da linha\n"); scanf("%d",&linha); gotoxy(3,34); printf("Insira o numero da coluna\n"); scanf("%d",&coluna); desenha_cursor(linha,coluna); return 0; } int desenha_tabuleiro() { limpar_ecra(); gotoxy(1,3); { int a; a = 1; while( a <= 4 ) { textcolor(BRIGHT,CYAN, BLACK); printf("\t###########################################\n\n\n\n\n\n\n\n"); a++; } } gotoxy(1,4); { int b; b = 1; while( b <= 12) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#|---|---|---|#|---|---|---|#|---|---|---|#\n\n"); b++; } } gotoxy(1,5); { int c; c = 1; while( c <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); c++; } } gotoxy(1,13); { int d; d = 1; while( d <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); d++; } } gotoxy(1,21); { int e; e = 1; while( e <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); e++; } } gotoxy(1,28); printf(" \n"); } int main() { int i; desenha_tabuleiro(); numero(2,4); digito(); repetir(); return 0; } #include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> #include <string.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 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); } int limpar_ecra() { int x,y; for(y=1; y<60; y++) { for(x=1; x<160; x++) { gotoxy(x, y); printf(" "); } } } void desenha_cursor(int coluna,int linha, int digito) { int x,y; x=10+linha*4; y=4+coluna*2; if(coluna>=4) { y=6+coluna*2; } if(coluna>=7) { y=8+coluna*2; } if(linha>=4) { x=12+linha*4; } if(linha>=7) { x=14+linha*4; } if( digito>=9 || digito<=-1) { gotoxy(3,36); printf("Nº do digito INCORRETO, numeros validos de 0 a 8"); } gotoxy(x,y); printf("%d",digito); { usleep(500.000); textcolor(WHITE,BLACK,BLACK); { gotoxy(x,y); printf("|---|\n"); gotoxy(x,y+1); printf("| |\n"); gotoxy(x,y+2); printf("|---|\n"); } usleep(500.000); textcolor(WHITE,BLACK,YELLOW); { gotoxy(x,y); printf("|---|\n"); gotoxy(x,y+1); printf("| |\n"); gotoxy(x,y+2); printf("|---|\n"); } gotoxy(1,28); printf(" \n"); } } int repetir() { int i, j; textcolor(BLACK, BLACK, BLACK); limpar_ecra(); desenha_tabuleiro(); for(i=0; i<9; i++) for(j=0; j<9; j++) numero(i, j,j+80*i); } int digito() { int coluna,linha,digito; textcolor(BLACK, BLACK, BLACK); gotoxy(3,28); textcolor(BRIGHT, GREEN, BLACK); printf("introduza coluna linha:\n"); scanf("%d%d",&linha,&coluna); if(coluna>=9 || coluna<=-1 || linha>=9 || linha<=-1) { gotoxy(3,34); printf("Numero INCORRETO, numeros validos de 0 a 8"); return 0; } gotoxy(3,31); printf("introduza numero:\n"); scanf("%d",&digito); desenha_cursor(linha,coluna,digito); return 1; } int numero(int linha,int coluna) { gotoxy(3,32); printf("Insira o numero da linha\n"); scanf("%d",&linha); gotoxy(3,34); printf("Insira o numero da coluna\n"); scanf("%d",&coluna); desenha_cursor(linha,coluna); return 0; } int desenha_tabuleiro() { limpar_ecra(); gotoxy(1,3); { int a; a = 1; while( a <= 4 ) { textcolor(BRIGHT,CYAN, BLACK); printf("\t###########################################\n\n\n\n\n\n\n\n"); a++; } } gotoxy(1,4); { int b; b = 1; while( b <= 12) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#|---|---|---|#|---|---|---|#|---|---|---|#\n\n"); b++; } } gotoxy(1,5); { int c; c = 1; while( c <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); c++; } } gotoxy(1,13); { int d; d = 1; while( d <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); d++; } } gotoxy(1,21); { int e; e = 1; while( e <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); e++; } } gotoxy(1,28); printf(" \n"); } int main() { int i; desenha_tabuleiro(); numero(2,4); digito(); repetir(); return 0; } #include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> #include <string.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 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); } int limpar_ecra() { int x,y; for(y=1; y<60; y++) { for(x=1; x<160; x++) { gotoxy(x, y); printf(" "); } } } void desenha_cursor(int coluna,int linha, int digito) { int x,y; x=10+linha*4; y=4+coluna*2; if(coluna>=4) { y=6+coluna*2; } if(coluna>=7) { y=8+coluna*2; } if(linha>=4) { x=12+linha*4; } if(linha>=7) { x=14+linha*4; } if( digito>=9 || digito<=-1) { gotoxy(3,36); printf("Nº do digito INCORRETO, numeros validos de 0 a 8"); } gotoxy(x,y); printf("%d",digito); { usleep(500.000); textcolor(WHITE,BLACK,BLACK); { gotoxy(x,y); printf("|---|\n"); gotoxy(x,y+1); printf("| |\n"); gotoxy(x,y+2); printf("|---|\n"); } usleep(500.000); textcolor(WHITE,BLACK,YELLOW); { gotoxy(x,y); printf("|---|\n"); gotoxy(x,y+1); printf("| |\n"); gotoxy(x,y+2); printf("|---|\n"); } gotoxy(1,28); printf(" \n"); } } int repetir() { int i, j; textcolor(BLACK, BLACK, BLACK); limpar_ecra(); desenha_tabuleiro(); for(i=0; i<9; i++) for(j=0; j<9; j++) numero(i, j,j+80*i); } int digito() { int coluna,linha,digito; textcolor(BLACK, BLACK, BLACK); gotoxy(3,28); textcolor(BRIGHT, GREEN, BLACK); printf("introduza coluna linha:\n"); scanf("%d%d",&linha,&coluna); if(coluna>=9 || coluna<=-1 || linha>=9 || linha<=-1) { gotoxy(3,34); printf("Numero INCORRETO, numeros validos de 0 a 8"); return 0; } gotoxy(3,31); printf("introduza numero:\n"); scanf("%d",&digito); desenha_cursor(linha,coluna,digito); return 1; } int numero(int linha,int coluna) { gotoxy(3,32); printf("Insira o numero da linha\n"); scanf("%d",&linha); gotoxy(3,34); printf("Insira o numero da coluna\n"); scanf("%d",&coluna); desenha_cursor(linha,coluna); return 0; } int desenha_tabuleiro() { limpar_ecra(); gotoxy(1,3); { int a; a = 1; while( a <= 4 ) { textcolor(BRIGHT,CYAN, BLACK); printf("\t###########################################\n\n\n\n\n\n\n\n"); a++; } } gotoxy(1,4); { int b; b = 1; while( b <= 12) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#|---|---|---|#|---|---|---|#|---|---|---|#\n\n"); b++; } } gotoxy(1,5); { int c; c = 1; while( c <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); c++; } } gotoxy(1,13); { int d; d = 1; while( d <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); d++; } } gotoxy(1,21); { int e; e = 1; while( e <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); e++; } } gotoxy(1,28); printf(" \n"); } int main() { int i; desenha_tabuleiro(); numero(2,4); digito(); repetir(); return 0; } }
  20. Estou a trabalhar num jogo de Sudoku. E quero verificar a vitoria do jogo, com as seguintes condiçoes: para ganhar: a soma dos numeros de cada linha tem de dar 45! a soma dos numeros de cada coluna tem de dar 45! a soma dos numeros de cada quadrado 45! ...ta me dar o seguinte error!!! :tab redeclared as different kind of symbol :previous definition of tab was here !!!!!??? #include <stdio.h> int main() { 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) { char tab[81]={0}; int i; for(i=0;i<8;i++) { if((i/9)%3==0) //linha 0,4,6 { if(i%3==0) //coluna 0,4,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 } return 0; }
  21. cara,estou perdido.estive a ver os erros que você me deu nas devidas páginas e não percebo, isso está certo, eu tenho as bibliotecas para usar o textcolor,gotoxy e para a funçau usleep. não percebo o erro. Mais uma coisa eu uso o adjunta do linux e tb o Dev C++ e mesmo assim é o mesmo erro. não tem uma ideia?mais facil..eu estou no meu primeiro ano de Engenharia Electrotecnica e tenho poucas bases de Programação.. Daquilo que eu sei, a diferença entre o dev e o adjunta são mts e certas referências não dão.
  22. obrigado. E como é que eu faço?? isso eu já sabia porque dávame esse erro. como é que posso fazer pa dar correcto??
  23. Colegas,dá me um erro e já não sei o que fazer.Para começar vou explicar aquilo que vou fazer: o meu projecto na universidade é criar um cursor e implementar na tabela e tb a implementação dos numeros atraves do numero de linha e de coluna. Esta presente a funçao gotoxy para saber as cordenadas do referidos numeros e do cursor.Tambem esta presente a funçao textcolor para as corer da tebelado sudoku e do cursor. agora o erro que me dá quando compilo é que diz que existe poucos argumentos na funçao, por isso queria uma ajuda.Preciso urgente até amanha a tarde.quem me podesse ajudar eu agradecia. mais uma coisa, a função é muito grande e peço desculpa eu colucar a funçao toda.mas assim já percebem o problema... #include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> #include <string.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 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); } int limpar_ecra() { int x,y; for(y=1; y<60; y++) { for(x=1; x<160; x++) { gotoxy(x, y); printf(" "); } } } void cursor(int coluna,int linha, int digito) { int x,y; x=10+linha*4; y=4+coluna*2; if(coluna>=4) { y=6+coluna*2; } if(coluna>=7) { y=8+coluna*2; } if(linha>=4) { x=12+linha*4; } if(linha>=7) { x=14+linha*4; } if( digito>=9 || digito<=-1) { gotoxy(3,36); printf("Nº do digito INCORRETO, numeros validos de 0 a 8"); } gotoxy(x,y); printf("%d",digito); { usleep(500000); textcolor(WHITE,BLACK,BLACK); { gotoxy(x,y); printf("|---|\n"); gotoxy(x,y+1); printf("| |\n"); gotoxy(x,y+2); printf("|---|\n"); } usleep(500000); textcolor(WHITE,BLACK,YELLOW); { gotoxy(x,y); printf("|---|\n"); gotoxy(x,y+1); printf("| |\n"); gotoxy(x,y+2); printf("|---|\n"); } gotoxy(1,28); printf(" \n"); } } int repetir() { int i, j; textcolor(BLACK, BLACK, BLACK); limpar_ecra(); desenha_tabuleiro(); for(i=0; i<9; i++) for(j=0; j<9; j++) numero(i, j, j+80*i); } int digito() { int coluna,linha,digito; textcolor(BLACK, BLACK, BLACK); gotoxy(3,28); textcolor(BRIGHT, GREEN, BLACK); printf("introduza coluna linha:\n"); scanf("%d%d",&linha,&coluna); if(coluna>=9 || coluna<=-1 || linha>=9 || linha<=-1) { gotoxy(3,34); printf("Numero INCORRETO, numeros validos de 0 a 8"); return 0; } gotoxy(3,31); printf("introduza numero:\n"); scanf("%d",&digito); desenha_digito(coluna,linha,digito); return 1; } int numero(int linha,int coluna) { gotoxy(3,32); printf("Insira o numero da linha\n"); scanf("%d",&linha); gotoxy(3,34); printf("Insira o numero da coluna\n"); scanf("%d",&coluna); cursor(linha,coluna); return 0; } int tabela() { limpar_ecra(); gotoxy(1,3); { int a; a = 1; while( a <= 4 ) { textcolor(BRIGHT,CYAN, BLACK); printf("\t###########################################\n\n\n\n\n\n\n\n"); a++; } } gotoxy(1,4); { int b; b = 1; while( b <= 12) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#|---|---|---|#|---|---|---|#|---|---|---|#\n\n"); b++; } } gotoxy(1,5); { int c; c = 1; while( c <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); c++; } } gotoxy(1,13); { int d; d = 1; while( d <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); d++; } } gotoxy(1,21); { int e; e = 1; while( e <= 3) { textcolor(BRIGHT,BLUE, BLACK); printf("\t#| | | |#| | | |#| | | |#\n\n"); e++; } } gotoxy(1,28); printf(" \n"); } int main() { int i; tabela(); numero(2,4); digito(); repetir(); return 0; } [/codebox]
×
×
  • Criar Novo...