Ir ao conteúdo
  • Cadastre-se

jogo da velha


devair1010

Posts recomendados

hehe também não é assim, antigamente as IDE vinham com bibliotecas gráficas como era o caso do Borland c++ que tinha a BGI, porém eram feitas pelas próprias empresas.  Hoje em dia o cara pensa em fazer algo gráfico tem que pensar sei lá em pelo menos umas 20 API diferente, trocentos tipos de sistemas o que seria impraticável ter uma biblioteca gráfica padronizada para o C/C++ hehe mas não concordo que seria o caso de chamar de Java ou c sharp.

 

Eu digo algo para fins educacionais mesmo visto que C e C++ são muitos usados em instituições de ensino.

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

31 minutos atrás, Benjamin Breeg disse:

hehe também não é assim, antigamente as IDE vinham com bibliotecas gráficas como era o caso do Borland c++ que tinha a BGI, porém eram feitas pelas próprias empresas.

Exato! Não eram padrões, qualquer um pode fazer sua biblioteca sabendo manejar a API do sistema. Que por certo costuma ser muito pior de programar que outras opções.

C++ o que você tem que buscar são coisas como..
Funciona em um X numero de plataformas(Portavel)?
É fácil de manipular?
Está em constante desenvolvimento ou é um projeto abandonado? Porque acho que se vai ser dedicado dias e meses em aprender uma biblioteca/API, não acredito que faça muita graça que em pouco tempo a biblioteca deixe de ter suporte pelos criadores.

 

 

 

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

Ficou muito bom o jogo. :thumbsup:

 

Quanto ao código só os lables + gotos que eu recomendaria não usar pra programar se tiver qualquer coisa que faça o mesmo trabalho e melhor na linguagem (como ciclos e funções), pois vira um quebra cabeça pra outra pessoa tentar entender o código, é até comum que o próprio programador não entenda mais o código que ele fez quando vê-lo novamente depois de alguns meses sem mexer.

 

Lembre-se que um dos principais objetivos de uma linguagem de programação é facilitar o entendimento para os programadores, afinal do contrário programaríamos em linguagem de computador diretamente. Então pratique sempre programar de modo que qualquer pessoa que leia posteriormente consiga entender o código (fazendo uma combinação de bom código, indentação, comentários, nomenclatura descritiva e consistente de variáveis, classes e funções, e se necessário documentação), pois fazer o código inteligível é essencial quando trabalhar em grupos de desenvolvimento em que mais de uma pessoa trabalham no mesmo código, e também torna possível reaproveitar e expandir o código futuramente ao invés de ter que recomeçar do zero.

 

 

 

Vou aproveitar pra postar aqui um jogo da velha que eu fiz uns meses atrás como passa tempo. Ele tá bem simples, não tem inteligência artificial, só joga com 2 jogadores, e nem tem escolha de símbolo pra jogar. Uma coisa que fiz no código que é um pouco interessante é que a lógica funciona mesmo se aumentar o tamanho da velha pra algo maior que 3 x 3:

 

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

/*
  Você pode aumentar o tamanho abaixo para jogar velha com mais casas,
  mas também será necessário aumentar o tamanho da janela do prompt,
  esticando-a para cima ou para baixo, para que tudo caiba na tela,
  pois não fiz o programa corrigir o espaçamento entre as linhas
  para compensar o aumento no tamnho da grade do jogo.

  Obs: 10 é o maior tamanho sem que a grade # da velha se deforme.
*/
#define TAMANHO 3

void pausa() {
    char c;
    printf("\nPressione Enter para continuar.");
    while ((c = getchar()) != '\n');
}

void limpatela() {
    int i;
    for (i=0; i<10; i++)
        printf("\n\n\n\n\n\n\n\n\n\n");
}

void inicializamatriz(int n, int matriz[n][n], int valor) {
    int i, j;
    for (i=0; i<n; i++) {
        for (j=0; j<n; j++) {
            matriz[i][j] = valor;
        }
    }
}

void imprimevelha(int n, int velha[n][n]) {
    int i, j, cont=1;
    unsigned char c;
    limpatela();
    c = 219;
    printf(" Jogador 1 -> %c%c   |   Jogador 2 -> ><\n\n\n", c, c);
    for (i=0; i<n; i++) {
        printf("  ");
        for (j=0; j<n; j++) {
            if (velha[i][j] == 0)
                printf("%02d", cont);
            else if (velha[i][j] == 1) {
                c = 219;
                printf("%c%c", c, c); //printf("[]");
            }
            else if (velha[i][j] == 2)
                printf("><");
            if (j<n-1) {
                c = 179; // |
                printf(" %c ", c);
            }
            cont++;
        }
        printf("\n ");
        if (i<n-1) {
            for (j=0; j<n; j++) {
                c = 196; // -
                printf("%c%c%c%c", c, c, c, c);
                if (j<n-1) {
                    c = 197; // +
                    printf("%c", c);
                }
            }
            printf("\n");
        }
    }
}

/*
Checa se o jogo chegou ao fim, seja resultando em
vitória ou empate, ou se a partida continua.
Retornos:
-1 -> Empate
 0 -> O jogo continua
 1 -> O jogador 1 venceu
 2 -> O Jogacor 2 venceu
 */
int checafimdojogo(int n, int velha[n][n]) {
    int i, j, sequencia=0, resultado;

    //Checa linhas
    for (i=0; i<n; i++) {
        if (velha[i][0]!=0) {
            resultado = velha[i][0];
            for (j=0; j<n; j++) {
                if(velha[i][j] == resultado)
                    sequencia++;
            }
        }
        if (sequencia == n)
            return resultado;
        else
            sequencia=0;
    }

    //Checa colunas
    for (i=0; i<n; i++) {
        if (velha[0][i]!=0) {
            resultado = velha[0][i];
            for (j=0; j<n; j++) {
                if(velha[j][i] == resultado)
                    sequencia++;
            }
        }
        if (sequencia == n)
            return resultado;
        else
            sequencia=0;
    }

    //Checa diagonal 1
    if(velha[0][0]!=0) {
        resultado = velha[0][0];
        for (i=0; i<n; i++) {
            if(velha[i][i] == resultado)
                sequencia++;
        }
        if (sequencia == n)
            return resultado;
        else
            sequencia=0;
    }

    //Checa diagonal 2
    if(velha[0][n-1]!=0) {
        resultado = velha[0][n-1];
        for (i=0; i<n; i++) {
            if(velha[i][n-1-i] == resultado)
                sequencia++;
        }
        if (sequencia == n)
            return resultado;
        else
            sequencia=0;
    }

    //Checa empate
    resultado = -1;
    for (i=0; i<n && resultado!=0; i++) {
        for (j=0; j<n && resultado!=0; j++) {
            if (velha[i][j] == 0)
                resultado = 0;
        }
    }

    return resultado;
}

void jogada(int n, int velha[n][n], int jogadoratual) {
    int posicao, sucesso, posicaovalida;
    do {
        posicaovalida = 1;
        imprimevelha(n, velha);

        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n Jogador %d digite a posicao onde vai jogar:\n", jogadoratual);
        sucesso = scanf("%d%*c", &posicao);
        if(sucesso!=1 || posicao<1 || posicao>n*n)
            posicaovalida = 0;
        else if (velha[(posicao-1)/n][(posicao-1)%n] == 0)
            velha[(posicao-1)/n][(posicao-1)%n] = jogadoratual;
        else
            posicaovalida = 0;

        if (!posicaovalida) {
            limpatela();
            printf("   !!! Essa posicao ja esta ocupada, ou voce digitou uma posicao invalida !!!\n\n\n\n\n\n\n\n\n\n\n");
            pausa();
        }
    } while (!posicaovalida);
}

void jogodavelha(int n) {
    int velha[n][n], resultado = 0, jogadoratual=1;
    inicializamatriz(n, velha, 0);
    while (resultado == 0) {
        jogada(n, velha, jogadoratual);
        resultado = checafimdojogo(n, velha);
        if(jogadoratual==1)
            jogadoratual=2;
        else
            jogadoratual=1;
    }
    imprimevelha(n, velha);
    if (resultado > 0) {
        printf("\n\n\n\n\n");
        printf("             **************************************************\n");
        printf("             *** Parabens Jogador %d voce venceu a partida! ***\n", resultado);
        printf("             **************************************************\n");
        printf("\n\n\n\n\n\n");
        pausa();
    }
    else {
        printf("\n\n\n\n\n");
        printf("                              ******************\n");
        printf("                              *** Deu Velha! ***\n");
        printf("                              ******************\n");
        printf("\n\n\n\n\n\n");
        pausa();
    }
}

int main() {
    int n=TAMANHO, b;
    char c = 'S';

    do {
        limpatela();
        jogodavelha(n);
        do {
            limpatela();
            printf(" Deseja jogar outra partida (S/N)?\n ");
            scanf("%c", &c);
            while ((b = getchar()) != '\n' && b != EOF);
        } while (toupper(c) != 'S' && toupper(c) != 'N');
    } while (toupper(c) != 'N');

    return 0;
}

 

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

@isrnick    obrigado pelas dicas com relação ao código,  e aqueles label goto que coloquei foi por que achei mais fácil  na hora de fazer, mas já vi outras pessoas também dizer que não é bom usar goto mesmo não, vou ver se consigo modificar o código e usar while no lugar de goto.

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

  • 2 semanas depois...

@isrnick     modifiquei o código do jogo da velha e retirei os label goto, tive de modificar algumas funções e criar outras e melhorei a identação , com isso aumentou muito o número de linhas .

     O seu código de jogo da velha, não consegui rodar, pode ser porque estou usando a versão 16.01 do codeblocks e ela seja diferente da sua,   o erro que ele apresenta traz essa  mensagem que diz  assim :

error: ISO C++ forbids Variable-size array 'matriz'

e não sei como corrigir esse erro por que parece que é na declaração da matriz , vou ver se consigo acertar.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <locale.h>
#include <windows.h>
int vet [4][4];
int vet2[4][4];
int i,j,a,b,g,h,r,k,w,f;
int vg,cg,qg,qjp,f,e,m,vjc;
int vl_nivel,jj,gto,got,dx,qip;
char nivel[5][14];
char c[5];

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*/
void gotoxy(int x, int y){
  COORD c;
  c.X = x;
  c.Y = y;
  SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void desenha(int vt){
    gotoxy(71,4) ;printf(" ///"  );
    gotoxy(71,5) ;printf("(. .)" );
    gotoxy(72,6) ;printf(" -"    );
    gotoxy(72,18);printf("%c",184);
    gotoxy(0,0)  ;printf("\n\n"  );
    printf("        1   2   3\n" );
    printf("        %c   %c   %c\n\n",31,31,31);
    for(i=1;i<4;i++){
        if(i==1){printf(" A -%c  ",16);}
        else{
            if(i==2){printf(" B -%c  ",16);}
            else{
                printf(" C -%c  ",16);
            }
        }
        for(j=1;j<4;j++){
            if(vt==1){
                if(vet[i][j]==1){
                    if(vjc==1){
                        printf(" O ");
                    }
                    else{printf(" X ");}
                }
                else{
                    if(vet[i][j]==2){
                        if(vjc==2){
                            printf(" O ");
                        }
                        else{printf(" X ");}
                    }
                    else{printf("   ");}
                }
            }
            else{
                if(vet2[i][j]==1){
                    if(vjc==1){
                        printf(" O ");
                    }
                    else{printf(" X ");}
                }
                else{
                    if(vet2[i][j]==2){
                        if(vjc==2){
                            printf(" O ");
                        }
                        else{printf(" X ");}
                    }
                    else{printf("   ");}
                }
            }
            if(j==3){printf("\n");}
            if(j<3){printf("|");}
        }
        if(i<3){printf("       -----------\n");}
    }
    printf("                                          Vit%crias Do Computador ------> %d\n",224,cg);
    printf("                                          Vit%crias Do Jogador Humano --> %d\n",224,vg);
}
int verifica_se_ganhou(int g,int h){
    for(i=1;i<4;i++){
        for(j=1;j<4;j++){
            vet2[i][j]=vet[i][j];
        }
    }
    if(vet[1][1]==h&&vet[1][2]==h&&vet[1][3]==h){
        g=1;vet2[1][1]=3;vet2[1][2]=3;vet2[1][3]=3;
    }
    else{
        if(vet[2][1]==h&&vet[2][2]==h&&vet[2][3]==h){
            g=1;vet2[2][1]=3;vet2[2][2]=3;vet2[2][3]=3;
        }
        else{
            if(vet[3][1]==h&&vet[3][2]==h&&vet[3][3]==h){
                g=1;vet2[3][1]=3;vet2[3][2]=3;vet2[3][3]=3;
            }
            else{
                if(vet[1][1]==h&&vet[2][1]==h&&vet[3][1]==h){
                    g=1;vet2[1][1]=3;vet2[2][1]=3;vet2[3][1]=3;
                }
                else{
                    if(vet[1][2]==h&&vet[2][2]==h&&vet[3][2]==h){
                        g=1;vet2[1][2]=3;vet2[2][2]=3;vet2[3][2]=3;
                    }
                    else{
                        if(vet[1][3]==h&&vet[2][3]==h&&vet[3][3]==h){
                            g=1;vet2[1][3]=3;vet2[2][3]=3;vet2[3][3]=3;
                        }
                        else{
                            if(vet[1][1]==h&&vet[2][2]==h&&vet[3][3]==h){
                                g=1;vet2[1][1]=3;vet2[2][2]=3;vet2[3][3]=3;
                            }
                            else{
                                if(vet[1][3]==h&&vet[2][2]==h&&vet[3][1]==h){
                                    g=1;vet2[1][3]=3;vet2[2][2]=3;vet2[3][1]=3;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return g;
}
void imprime_msg(int tw){
    gotoxy(3,18);
    if(tw==1){
        printf("O Computador Ganhou Essa Partida");
    }
    else{
        if(tw==2){
            printf("Voc%c Ganhou Essa Partida ",136);
        }
        else{
            printf("Essa Partida Terminou Empatada");
        }
    }
    printf("\n   Voc%c Quer Jogar Mais Uma Partida ?       S / N ",136);
}
void tecla(){
    fflush(stdin);
    if( kbhit()){dx=getch();}
    if(dx==110||dx==78){
        c[0]='n';
    }
    else{
        if(dx==115 || dx==83){
            c[0]='s';
        }
    }
}
int inicio(int tp){
    c[0]='p';dx=0;
    imprime_msg(tp);
    if(tp != 0){/*tp=0 empatou tp=1 comp.ganhou tp=2 humano ganhou*/
        do{
            desenha(2);
            Sleep(200);
            desenha(1);
            Sleep(200);
            tecla();
        }while(c[0] != 's' && c[0] != 'n');
    }
    else{
        c[0]='p';dx=0;
        do{
            tecla();
        }while(c[0] != 's' && c[0] != 'n');
    }
    k=0;
    if(c[0]=='n'){k=27;}
    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            vet[i][j]=0;
        }
    }
    system("cls");
    desenha(1);
    return k;
}
int raciocinio(int p){  /*nivel muito fácil*/
    if(vl_nivel > 0){    /*  nivel fácil*/
        if(vet[2][2]==0){
            vet[2][2]=1;
            return 1;
        }
        if(vet[2][2]==p){
            if(vet[1][1]==p){
                if(vet[3][3]==0){
                    vet[3][3]=1;
                    return 1;
                }
            }
        }
        if(vet[2][2]==p){
            if(vet[1][2]==p){
                if(vet[3][2]==0){
                    vet[3][2]=1;
                    return 1;
                }
            }
        }
        if(vet[2][2]==p){
            if(vet[1][3]==p){
                if(vet[3][1]==0){
                    vet[3][1]=1;
                    return 1;
                }
            }
        }
        if(vet[2][2]==p){
            if(vet[2][3]==p){
                if(vet[2][1]==0){
                    vet[2][1]=1;
                    return 1;
                }
            }
        }
        if(vet[2][2]==p){
            if(vet[3][3]==p){
                if(vet[1][1]==0){
                    vet[1][1]=1;
                    return 1;
                }
            }
        }
        if(vet[2][2]==p){
            if(vet[3][2]==p){
                if(vet[1][2]==0){
                    vet[1][2]=1;
                    return 1;
                }
            }
        }
        if(vet[2][2]==p){
            if(vet[3][1]==p){
                if(vet[1][3]==0){
                    vet[1][3]=1;
                    return 1;
                }
            }
        }
        if(vl_nivel > 1){     /*nivel medio*/
            if(vet[2][2]==p){
                if(vet[2][1]==p){
                    if(vet[2][3]==0){
                        vet[2][3]=1;
                        return 1;
                    }
                }
            }
            if(vet[1][1]==p){
                if(vet[1][2]==p){
                    if(vet[1][3]==0){
                        vet[1][3]=1;
                        return 1;
                    }
                }
            }
            if(vet[1][1]==p){
                if(vet[2][1]==p){
                    if(vet[3][1]==0){
                        vet[3][1]=1;
                        return 1;
                    }
                }
            }
            if(vet[1][1]==p){
                if(vet[1][2]==p){
                    if(vet[1][3]==0){
                        vet[1][3]=1;
                        return 1;
                    }
                }
            }
            if(vet[1][1]==p){
                if(vet[1][3]==p){
                    if(vet[1][1]==0){
                        vet[1][1]=1;
                        return 1;
                    }
                }
            }
            if(vet[1][2]==p){
                if(vet[1][1]==p){
                    if(vet[1][3]==0){
                        vet[1][3]=1;
                        return 1;
                    }
                }
            }
            if(vet[1][2]==p){
                if(vet[1][3]==p){
                    if(vet[1][1]==0){
                        vet[1][1]=1;
                        return 1;
                    }
                }
            }
            if(vet[1][3]==p){
                if(vet[1][2]==p){
                    if(vet[1][1]==0){
                        vet[1][1]=1;
                        return 1;
                    }
                }
            }
            if(vl_nivel > 2){     /*nivel difícil*/
                srand(time(NULL));
                if(rand()%100 > 20){
                    if(vet[1][3]==p){
                        if(vet[1][1]==p){
                            if(vet[1][2]==0){
                                vet[1][2]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[1][3]==p){
                        if(vet[2][3]==p){
                            if(vet[3][3]==0){
                                vet[3][3]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[1][3]==p){
                        if(vet[2][1]==p){
                            if(vet[2][3]==0){
                                vet[2][3]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[2][3]==p){
                        if(vet[1][3]==p){
                            if(vet[3][3]==0){
                                vet[3][3]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[2][3]==p){
                        if(vet[3][3]==p){
                            if(vet[1][3]==0){
                                vet[1][3]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[3][3]==p){
                        if(vet[2][3]==p){
                            if(vet[1][3]==0){
                                vet[1][3]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[3][3]==p){
                        if(vet[1][3]==p){
                            if(vet[2][3]==0){
                                vet[2][3]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[3][3]==p){
                        if(vet[3][2]==p){
                            if(vet[3][1]==0){
                                vet[3][1]=1;
                                return 1;
                            }
                        }
                    }
                }
                if(vl_nivel > 3){     /*nivel muito difícil*/
                    if(vet[3][3]==p){
                        if(vet[3][1]==p){
                            if(vet[3][2]==0){
                                vet[3][2]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[3][2]==p){
                        if(vet[3][1]==p){
                            if(vet[3][3]==0){
                                vet[3][3]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[3][2]==p){
                        if(vet[3][3]==p){
                            if(vet[3][1]==0){
                                vet[3][1]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[3][1]==p){
                        if(vet[3][2]==p){
                            if(vet[3][3]==0){
                                vet[3][3]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[3][1]==p){
                        if(vet[3][3]==p){
                            if(vet[3][1]==0){
                                vet[3][1]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[3][1]==p){
                        if(vet[2][1]==p){
                            if(vet[1][1]==0){
                                vet[1][1]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[3][1]==p){
                        if(vet[1][1]==p){
                            if(vet[2][1]==0){
                                vet[2][1]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[2][1]==p){
                        if(vet[1][1]==p){
                            if(vet[3][1]==0){
                                vet[3][1]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[2][1]==p){
                        if(vet[3][1]==p){
                            if(vet[1][1]==0){
                                vet[1][1]=1;
                                return 1;
                            }
                        }
                    }
                    if(vet[1][3]==p&&vet[2][2]==p&&vet[1][2]==0){
                        vet[1][2]=1;
                        return 1;
                    }

                }
            }
        }
    }
    return 0;
}
int computador_joga(){
    gotoxy(10,15);
    printf("\nO Computador Est%c Pensando ",160);
    for(m=0;m<10;m++){
        printf(".");
        Sleep(100);
    }
    printf("!");
    Sleep(200);
    r=raciocinio(1);/*se for 1 então computador achou lugar para jogar*/
    if(r==1){
        return 0;
    }
    r=raciocinio(2);
    if(r==1){
        return 0;
    }
    if(vet[1][1]==0){
        vet[1][1]=1;
        return 0;
    }
    if(vet[1][3]==0){
        vet[1][3]=1;
        return 0;
    }
    if(vet[3][3]==0){
        vet[3][3]=1;
        return 0;
    }
    if(vet[3][1]==0){
        vet[3][1]=1;
        return 0;
    }
    if(vet[1][2]==0){
        vet[1][2]=1;
        return 0;
    }
    if(vet[2][3]==0){
        vet[2][3]=1;
        return 0;
    }
    if(vet[3][2]==0){
        vet[3][2]=1;
        return 0;
    }
    if(vet[2][1]==0){
        vet[2][1]=1;
        return 0;
    }
    return 1;
}
int verifica_se_empatou(){
    int w=0;
    for(f=1;f<4;f++){
        for(e=1;e<4;e++){
            if(vet[f][e]==0){w=1;}
        }
    }
    return w;/*se w=0 então acabou a partida*/
}
void imprime_nivel(){
    gotoxy(33,21);
    printf("              ");
    gotoxy(33,21);
    if(vl_nivel==0){printf(" Muito F%ccil" ,160);}
    if(vl_nivel==1){printf("    F%ccil"    ,160);}
    if(vl_nivel==2){printf("    M%cdio"    ,130);}
    if(vl_nivel==3){printf("   Dif%ccil"   ,161);}
    if(vl_nivel==4){printf("Muito Dif%ccil",161);}
    gotoxy(39,22);
}
int tela_de_abertura(){
    int y1=3,x1=23,y2=y1;           /*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 marca(){
    tela_de_abertura();
    gotoxy(14,21);
    printf("         Voc%c Quer Jogar Com   X  ou  O               ",136);
    do{
        e=0;
        fflush(stdin);
        if( kbhit() ){e = getch();}
        if(e==120 || e==88){c[0]='x';}
        if(e==111 || e==79){c[0]='o';}
    }while((c[0]!='x' && c[0]!='X') && (c[0]!='o' && c[0]!='O'));
    if(c[0] =='x'|| c[0] =='X'){vjc=1;}/*voce joga com */
    if(c[0] =='o'|| c[0] =='O'){vjc=2;}
    printf("%c",c[0]);
    Sleep(300);
    gotoxy(14,21);
    printf("Dificuldade  - %c--     M%cdio     --%c %c   Tecle Enter     ",17,130,16,197);
    gotoxy(39,22);
    vl_nivel=2;
    if( kbhit() ){e = getch();e = getch();}/*para limpar o buffer */
    if(e==13){e=0;}
    do{
        e=0;
        fflush(stdin);
        if( kbhit() ){e = getch();}
        if(e==43||e==77){
            if(vl_nivel<4){
                vl_nivel++;
                imprime_nivel();
            }
        }
        if(e==45||e==75){
            if(vl_nivel>0){
                vl_nivel--;
                imprime_nivel();
            }
        }
    }while(e!=13);
    return 0;
}
int humano_joga(){
    do{
        gto=1;
        system("cls");
        desenha(1);
        printf("\nDigite   A B C   p/ Linha");
        printf("\nDigite   1 2 3   p/ Coluna  < ou  S para Parar >");
        gotoxy(10,16);printf("%c%c%c%c%c%c",201,205,205,205,205,187);
        gotoxy(10,20);printf("%c%c%c%c%c%c",200,205,205,205,205,188);
        gotoxy(10,17);printf("%c    %c"    ,186,186                );
        gotoxy(10,18);printf("%c    %c"    ,186,186                );
        gotoxy(10,19);printf("%c    %c"    ,186,186);gotoxy(12,18  );
        fflush(stdin);
        gets(c);
        if(c[0]=='a'||c[0]=='A'||c[0]=='b'||c[0]=='B'||c[0]=='c'||c[0]=='C'||c[0]=='s'||
                                            c[0]=='S'||c[0]=='1'||c[0]=='2'||c[0]=='3'){
            if(c[0]=='a' || c[0]=='A'){a=1;}
            if(c[0]=='b' || c[0]=='B'){a=2;}
            if(c[0]=='c' || c[0]=='C'){a=3;}
            if(c[1]=='1'){b=1;}
            if(c[1]=='2'){b=2;}
            if(c[1]=='3'){b=3;}
            if(c[0]=='s'||c[0]=='S'){printf("\n\n");k=27;return 0;}
            if(strlen (c) > 2){      printf("\n\n\nS%c Pode Ser Duas Coordenadas   >>> Tecle <<<",224);getch();gto=2;}
            if(vet[a][b]!= 0){printf("\n\n\nEsta Posi%c%co Est%c Ocupada   >>> Tecle <<<",135,198,160);getch();gto=2;}
            if(c[0]!='a'&&c[0]!='b'&&c[0]!='c'){printf("\n\n\nS%c Pode Ser A B C   >>> Tecle <<<",224);getch();gto=2;}
            if(c[1]!='1'&&c[1]!='2'&&c[1]!='3'){printf("\n\n\nS%c Pode Ser 1 2 3   >>> Tecle <<<",224);getch();gto=2;}
        }else{gto=2;}
        gto--;
    }while(gto!=0);
    vet[a][b] = 2;/*voce joga*/
    system("cls");
    desenha(1);
    return 0;
}
void comp_inicia(){
    gotoxy(14,21);
    printf("O Computador Vai Iniciar A Partida   >>> Tecle <<<       ");
    getch();
    gotoxy(14,21);
    printf("                                                         ");
}
void humano_inicia(){
    gotoxy(14,21);
    printf("O Humano Vai Iniciar A Partida   >>> Tecle <<<        ");
    getch();
    gotoxy(14,21);
    printf("                                                      ");
}
void limpa_tela(){
    system("cls");
    desenha(1);
}
int main(){
    /*setlocale(LC_ALL,"portuguese");*/
    qjp=1;                            /*quem joga primeiro*/
    marca();                          /*simbolo que vai jogar X  ou O */
    qip=2;
    do{
        if(qjp==1){                   /*se computador jogou primeiro*/
            humano_joga();
            limpa_tela();
            r=verifica_se_ganhou(0,2);/*2 é humano*/
            qjp=2;
            if(r==1){                 /*se r=1 então ganhou*/
                vg++;                 /*voce ganhou*/
                qjp=2;
                k=inicio(2);          /*2 é humano*/
                if(k==27){return 0;}
                qip=1;                /* quem iniciará a partida */
                marca();
                comp_inicia();
                limpa_tela();
            }
            else{
                r=verifica_se_empatou();
                if(r==0){              /*se for 0 acabou*/
                    k = inicio(0);
                    if(k==27){return 0;}
                    marca();
                    if(qip==2){
                        qjp=2;qip=1;
                        comp_inicia();
                        limpa_tela();
                    }
                    else{qjp=1;qip=2;
                        humano_inicia();
                        limpa_tela();
                    }
                }
            }
        }
        if(k == 27){
            return 0;
        }
        if(qjp==2){
            computador_joga();
            limpa_tela();
            r=verifica_se_ganhou(0,1);/*0 para o retorno e 1 para jogada do comput*/
            qjp=1;
            if(r==1){
                cg++;
                k=inicio(1);
                if(k==27){return 0;}
                qip=2;/*quem iniciara a partida*/
                marca();
                humano_inicia();
                limpa_tela();
                qg=1;
            }
            else{
                r=verifica_se_empatou();
                if(r==0){
                    qg=0;
                    k=inicio(0);
                    if(k==27){return 0;}
                    marca();
                    if(qip==2){
                        qjp=2;qip=1;
                        comp_inicia();
                        limpa_tela();
                    }
                    else{
                        qjp=1;qip=2;
                        humano_inicia();
                        limpa_tela();
                    }
                }
            }
        }
    }while(k!=27);
    return 0;
}

 

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

1 hora atrás, devair1010 disse:

O seu código de jogo da velha, não consegui rodar, pode ser porque estou usando a versão 16.01 do codeblocks e ela seja diferente da sua,   o erro que ele apresenta traz essa  mensagem que diz  assim :


error: ISO C++ forbids Variable-size array 'matriz'

e não sei como corrigir esse erro por que parece que é na declaração da matriz , vou ver se consigo acertar.

O problema é que você está compilando como C++ e esse é um programa em C.

Imagino que você tenha salvo o arquivo com extensão .cpp, e nesse caso o Codeblocks automaticamente assume que é um programa C++ e tenta compilar usando o compilador do C++. No Codeblocks programas em C devem ter extensão .c .

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

  • 4 semanas depois...

estou tentando fazer uma interface para esse jogo da velha, e apesar de que funcionou não estou conseguindo colocar um placar informando as vitórias, alguém pode me ajudar ? 

   para rodar esse código  no code blocks é preciso criar um projeto  clicando em file / new / project  e escolher Win32 GUI project   e depois escolher Dialog Based, depois colocar o nome e escolher a pasta onde salvar, em seguida abra esse mesmo arquivo que você salvou, mas na hora que você for na pasta onde está o arquivo não abra o nome do arquivo mas sim o arquivo main c++,  em seguida selecione o código todo e delete e em seguida coloque esse código e salve ele, com isso pode compilar, e depois que fechar o arquivo e você quiser abri-lo novamente abra o arquivo com o nome do projeto mesmo.

aqui está o código  usando a API Win32 :

#include <windows.h>
#include <time.h>
#define DIVISIONS 5
static BOOL fState[DIVISIONS+2][DIVISIONS] ;
int qj=2,vl_nivel,i,j,qa,att;
int vet2[4][4];
HPEN hpen;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){
    static TCHAR szAppName[] = TEXT ("Checker1") ;
    HWND hwnd ;
    MSG msg ;
    WNDCLASS wndclass ;
    wndclass.style = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc = WndProc ;
    wndclass.cbClsExtra = 0 ;
    wndclass.cbWndExtra = 0 ;
    wndclass.hInstance = hInstance ;
    wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName = NULL ;
    wndclass.lpszClassName = szAppName ;
    if (!RegisterClass (&wndclass)){
        MessageBox (NULL, TEXT ("Program requires Windows NT!"),
        szAppName, MB_ICONERROR) ;
        return 0 ;
    }
    hwnd = CreateWindow (szAppName, TEXT ("Jogo Da Velha"),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT,
    CW_USEDEFAULT, CW_USEDEFAULT,
    NULL, NULL, hInstance, NULL) ;
    ShowWindow (hwnd, iCmdShow) ;
    UpdateWindow (hwnd) ;
    while (GetMessage (&msg, NULL, 0, 0)){
        TranslateMessage (&msg) ;
        DispatchMessage (&msg) ;
    }
    return msg.wParam ;
}
int verifica_se_ganhou(int g,int h){
    for(i=2;i<5;i++){
        for(j=1;j<4;j++){
            vet2[i][j]=fState[i][j];
        }
    }
    if(fState[2][1]==h&&fState[2][2]==h&&fState[2][3]==h){
        g=1;vet2[2][1]=3;vet2[2][2]=3;vet2[2][3]=3;
    }
    else{
        if(fState[3][1]==h&&fState[3][2]==h&&fState[3][3]==h){
            g=1;vet2[3][1]=3;vet2[3][2]=3;vet2[3][3]=3;
        }
        else{
            if(fState[4][1]==h&&fState[4][2]==h&&fState[4][3]==h){
                g=1;vet2[4][1]=3;vet2[4][2]=3;vet2[4][3]=3;
            }
            else{
                if(fState[2][1]==h&&fState[3][1]==h&&fState[4][1]==h){
                    g=1;vet2[4][1]=3;vet2[4][1]=3;vet2[4][1]=3;
                }
                else{
                    if(fState[2][2]==h&&fState[3][2]==h&&fState[4][2]==h){
                        g=1;vet2[2][2]=3;vet2[3][2]=3;vet2[4][2]=3;
                    }
                    else{
                        if(fState[2][3]==h&&fState[3][3]==h&&fState[4][3]==h){
                            g=1;vet2[2][3]=3;vet2[3][3]=3;vet2[4][3]=3;
                        }
                        else{
                            if(fState[2][1]==h&&fState[3][2]==h&&fState[4][3]==h){
                                g=1;vet2[2][1]=3;vet2[3][2]=3;vet2[4][3]=3;
                            }
                            else{
                                if(fState[2][3]==h&&fState[3][2]==h&&fState[4][1]==h){
                                    g=1;vet2[2][3]=3;vet2[3][2]=3;vet2[4][1]=3;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return g;
}
int raciocinio(int p){
    if(fState[3][2]==0){
        fState[3][2]=1;/*1 é computador*/
        return 1;
    }
    if(fState[2][1]==p&&fState[3][1]==p&&fState[4][1]==0){/* --- */
        fState[4][1]=1;
        return 1;
    }
    if(fState[2][1]==p&&fState[3][1]==p&&fState[2][1]==0){/* --- */
        fState[2][1]=1;
        return 1;
    }
    if(fState[2][1]==p&&fState[3][1]==p&&fState[2][1]==0){/* --- */
        fState[2][1]=1;
        return 1;
    }
    if(fState[2][2]==p&&fState[3][2]==p&&fState[4][2]==0){/* - */
        fState[4][2]=1;                                   /*   - */
        return 1;                                          /*    - */
    }
    if(fState[2][2]==p&&fState[4][2]==p&&fState[3][2]==0){
        fState[3][2]=1;
        return 1;
    }
    if(fState[3][2]==p&&fState[4][2]==p&&fState[2][2]==0){
        fState[2][2]=1;
        return 1;
    }
    if(fState[2][3]==p&&fState[3][3]==p&&fState[4][3]==0){
        fState[4][3]=1;
        return 1;
    }
    if(fState[2][3]==p&&fState[4][3]==p&&fState[3][3]==0){
        fState[3][3]=1;
        return 1;
    }
    if(fState[3][3]==p&&fState[4][3]==p&&fState[2][3]==0){
        fState[2][3]=1;
        return 1;
    }
    if(fState[2][1]==p&&fState[2][2]==p&&fState[2][3]==0){
        fState[2][3]=1;
        return 1;
    }
    if(fState[2][1]==p&&fState[2][3]==p&&fState[2][2]==0){
        fState[2][2]=1;
        return 1;
    }
    if(fState[2][2]==p&&fState[2][3]==p&&fState[2][1]==0){
        fState[2][1]=1;
        return 1;
    }
    if(fState[3][1]==p&&fState[3][2]==p&&fState[3][3]==0){
        fState[3][3]=1;
        return 1;
    }
    if(fState[3][1]==p&&fState[3][3]==p&&fState[3][2]==0){
        fState[3][2]=1;
        return 1;
    }
    if(fState[3][2]==p&&fState[3][3]==p&&fState[3][1]==0){
        fState[3][1]=1;
        return 1;
    }
    if(fState[4][1]==p&&fState[4][2]==p&&fState[4][3]==0){
        fState[4][3]=1;
        return 1;
    }
    if(fState[4][1]==p&&fState[4][3]==p&&fState[4][2]==0){
        fState[4][2]=1;
        return 1;
    }
    if(fState[4][2]==p&&fState[4][3]==p&&fState[4][1]==0){
        fState[4][1]=1;
        return 1;
    }
    if(fState[2][1]==p&&fState[3][2]==p&&fState[4][3]==0){
        fState[4][3]=1;
        return 1;
    }
    if(fState[2][1]==p&&fState[4][3]==p&&fState[3][2]==0){
        fState[3][2]=1;
        return 1;
    }
    if(fState[3][2]==p&&fState[4][3]==p&&fState[2][1]==0){
        fState[2][1]=1;
        return 1;
    }
    if(fState[2][3]==p&&fState[3][2]==p&&fState[4][1]==0){
        fState[4][1]=1;
        return 1;
    }
    if(fState[2][3]==p&&fState[4][1]==p&&fState[3][2]==0){
        fState[3][2]=1;
        return 1;
    }
    if(fState[3][2]==p&&fState[4][1]==p&&fState[2][3]==0){
        fState[2][3]=1;
        return 1;
    }
    return 0;
}
int verifica_se_empatou(){
    int w=0,f,e;
    for(f=2;f<5;f++){
        for(e=1;e<4;e++){
            if(fState[f][e]==0){w=1;}
        }
    }
    return w;/*se w=0 então acabou a partida*/
}
int computador_joga(){
    int r;
    r=raciocinio(1);/*se for 1 então computador achou lugar para jogar*/
    if(r==1){
        return 0;
    }
    r=raciocinio(2);
    if(r==1){
        return 0;
    }
    if(fState[2][1]==0){
        fState[2][1]=1;
        return 0;
    }
    if(fState[2][3]==0){
        fState[2][3]=1;
        return 0;
    }
    if(fState[4][3]==0){
        fState[4][3]=1;
        return 0;
    }
    if(fState[4][1]==0){
        fState[4][1]=1;
        return 0;
    }
    if(fState[2][2]==0){
        fState[2][2]=1;
        return 0;
    }
    if(fState[3][3]==0){
        fState[3][3]=1;
        return 0;
    }
    if(fState[4][2]==0){
        fState[4][2]=1;
        return 0;
    }
    if(fState[3][1]==0){
        fState[3][1]=1;
        return 0;
    }
    return 1;
}
void zera(){
    for(i=0;i<7;i++){
        for(j=0;j<5;j++){
            fState[i][j]=0;
        }
    }
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
    static int cxBlock, cyBlock ;
    HDC hdc ;
    int x, y ,q,r;
    PAINTSTRUCT ps ;
    RECT rect ;
    if(att==1){
        InvalidateRect (hwnd, NULL, FALSE) ;/*ISSO ATUALIZA A TELA*/
        att=0;
    }
    if(qj==1){
        computador_joga();
        qj=2;
        InvalidateRect (hwnd, NULL, FALSE) ;/*ISSO ATUALIZA A TELA*/
        r=verifica_se_ganhou(0,1);
        if(r==1){
            zera();
            MessageBox( NULL,"O Computador Ganhou Essa Partida !","Jogo Da Velha",MB_OK|MB_ICONINFORMATION );
            att=1;
        }
        else{
            r=verifica_se_empatou();
            if(r==0){
                zera();
                MessageBox(NULL,"Essa Partida Terminou Empatada !","Jogo Da Velha",MB_OK|MB_ICONINFORMATION);
                att=1;
            }
        }
    }
    switch (message){
        case WM_SIZE :
            cxBlock = LOWORD (lParam) / 7;
            cyBlock = HIWORD (lParam) / DIVISIONS ;
            return 0 ;
        case WM_LBUTTONDOWN :
            x = LOWORD (lParam) / cxBlock ;
            y = HIWORD (lParam) / cyBlock ;
            if (x>1 && x < 5 && y>0 &&y < DIVISIONS-1){
                if(qj==2){
                    if(fState[x][y]==0){
                        fState [x][y] ^=  2 ;
                        qj=1;qa=1;
                    }
                    else
                        MessageBox(NULL,"Esta Posição Já Está Ocupada","informação",MB_OK|MB_ICONINFORMATION);
                }
                rect.left      =  x      *  cxBlock ;
                rect.top       =  y      *  cyBlock ;
                rect.right     = (x + 1) *  cxBlock ;
                rect.bottom    = (y + 1) *  cyBlock ;
                InvalidateRect (hwnd, &rect, FALSE) ;

                r=verifica_se_ganhou(0,2);
                if(r==1){
                    MessageBox(NULL,"O Jogador Humano Ganhou Essa Partida !","Jogo Da Velha",MB_OK|MB_ICONINFORMATION);
                    zera();
                    att=1;
                }
                else{
                    r=verifica_se_empatou();
                    if(r==0&&att==0){
                        MessageBox(NULL,"Essa Partida Terminou Empatada !","Jogo Da Velha",MB_OK|MB_ICONINFORMATION);
                        zera();
                        att=1;
                    }
                }
            }
            else
                MessageBeep (0) ;
            return 0 ;
        case WM_PAINT :
            hdc = BeginPaint (hwnd, &ps) ;
            for (x = 0 ; x < 7 ; x++)
                for (y = 0 ; y < DIVISIONS ; y++){
                    if(x > 1 && x < 5 && y > 0 && y < 4){

                      hpen = CreatePen(PS_SOLID,1,RGB(255,255,255));
                      SelectObject(hdc, hpen);

                      Rectangle (hdc, x * cxBlock, y * cyBlock,
                      (x + 1) * cxBlock, (y + 1) * cyBlock) ;
                      hpen = CreatePen(PS_SOLID,1,RGB(0,0,0));
                      SelectObject(hdc, hpen);
                      if( y > 1 && y < 4 ){
                          for(q=0;q<5;q++){
                              MoveToEx(hdc,x*cxBlock,y*cyBlock+q,NULL);
                              LineTo  (hdc,x*cxBlock+180,y*cyBlock+q);
                          }
                      }
                      if( x > 2 && x < 5 ){
                          for(q=0;q<5;q++){
                              MoveToEx(hdc,x*cxBlock+q,y*cyBlock,NULL);
                              LineTo  (hdc,x*cxBlock+q,y*cyBlock+140);
                          }
                      }
                      if (fState [x][y]==1){
                        for(q=0;q<6;q++){ /*  aqui é o circulo */
                            Ellipse (hdc,x*cxBlock+30+q,y*cyBlock+13+q,x*cxBlock+100-q,y*cyBlock+83-q) ;
                        }
                      }
                      if (fState [x][y]==2){
                        for(q=0;q<9;q++){    /*aqui é o x*/
                          MoveToEx (hdc, x   * cxBlock+35+q, y   * cyBlock+10, NULL) ;
                          LineTo   (hdc,(x+1)* cxBlock-35+q,(y+1)* cyBlock-8) ;
                          MoveToEx (hdc, x   * cxBlock+35+q,(y+1)* cyBlock-10, NULL) ;
                          LineTo   (hdc,(x+1)* cxBlock-35+q, y   * cyBlock+8) ;
                        }
                      }
                    }
                }
                EndPaint (hwnd, &ps) ;
                return 0 ;
        case WM_DESTROY :
            PostQuitMessage (0) ;
            return 0 ;
    }
    DeleteObject(hpen);
    return DefWindowProc (hwnd, message, wParam, lParam) ;
}

 

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

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...