Jogo da velha, para 2 jogadores, bem simples

Publicado por Samuel Macedo 06/10/2004

[ Hits: 23.393 ]

Download jogo_da_velha.c




Este é um jogo da velha bem básico mesmo, para 2 jogadores, em C, que eu fiz bem rápido, em uns 15 minutos... Dá pra melhorar bastante coisa no código, principalmente na parte de checar se dá velha... É interessante p/ estudar matrizes.

  



Esconder código-fonte

#include <stdio.h>

int ctrl[3][3];
char imp[3][3];
int ctrlf(int l1,int c1,int l2,int c2)
{
    int cti,ctj,chp1=0,chp2=0,chv=0,cmp;

    --l1; --c1; --l2; --c2;
    ctrl[l1][c1] = 1; imp[l1][c1] = 'X';
    ctrl[l2][c2] = 2; imp[l2][c2] = 'O';

    for(cti=0;cti<3;cti++){
        for(ctj=0;ctj<3;ctj++){
            if(ctrl[cti][ctj] == 1){
               ++chp1;
            }
            if(ctrl[cti][ctj] == 2){
               ++chp2;
            }
            if(ctrl[cti][ctj] == 0){
               chv = 1;
            }
        }
        if (chp1 == 3)
            return 1;
        if (chp2 == 3)
            return 2;
        chp1 = 0;
        chp2 = 0;
    }//checagem linha

    for(cti=0;cti<3;cti++){
        for(ctj=0;ctj<3;ctj++){
            if(ctrl[ctj][cti] == 1){
               ++chp1;
            }
            if(ctrl[ctj][cti] == 2){
               ++chp2;
            }
        }
        if (chp1 == 3)
            return 1;
        if (chp2 == 3)
            return 2;
        chp1 = 0;
        chp2 = 0;
    }//checagem coluna

    for(cti = 0;cti<3;cti++){
            if(ctrl[cti][cti] == 1){
               ++chp1;
            }
            if(ctrl[cti][cti] == 2){
               ++chp2;
            }
    }
    if (chp1 == 3)
            return 1;
    if (chp2 == 3)
            return 2;
    chp1 = 0;
    chp2 = 0;
    // checagem diag. principal

    for(cti=0;cti<3;cti++){
        for(ctj=0;ctj<3;ctj++){
            if(cti + ctj == 2){
            if(ctrl[cti][ctj] == 1){
               ++chp1;
            }
            if(ctrl[cti][ctj] == 2){
               ++chp2;
            }
            }
        }
    }
    if (chp1 == 3)
            return 1;
    if (chp2 == 3)
            return 2;
        chp1 = 0;
        chp2 = 0;
    //checagem diag. sec.



 if (chv == 0){
     return 3;
 }


return 0;
}

impjogo()
{

 int impi, impj;
  system("clear");
 for(impi=0;impi<3;impi++){
    for(impj=0;impj<3;impj++){
       printf("%c ",imp[impi][impj]);
    }
    printf("\n");
 }
}

int central()
{
 int i,j,j1l,j1c,j2l,j2c,result;
 for(i=0;i<3;i++){
     for(j=0;j<3;j++){
        ctrl[i][j] = 0;
        imp[i][j] = '*';
     }
 }
 do{
    impjogo();
    printf("==Jogador 1==\n");
    printf("Linha: ");
    scanf("%d",&j1l);
    printf("Coluna: ");
    scanf("%d",&j1c);
    printf("==Jogador 2==\n");
    printf("Linha: ");
    scanf("%d",&j2l);
    printf("Coluna: ");
    scanf("%d",&j2c);
    result =  ctrlf(j1l,j1c,j2l,j2c);
 }while(result == 0);
 impjogo();
 if (result == 1){
    puts("JOGADOR 1 GANHOU");
 }
 if (result == 2){
    puts("JOGADOR 2 GANHOU");
 }
 if (result == 3){
    puts("VELHA...");
 }
 return 1;
}

main()
{
  while(central()==0){

  }
}


Scripts recomendados

Fibonacci - Modo muito simples

Conversor de Temperaturas

Gerador de sequência numérica

Tabela ASCII Em C

Usando IF - Como usar o IF


  

Comentários
[1] Comentário enviado por engos em 13/10/2004 - 09:57h

Nada contra o jogo, mas a lógica está mais complicada do que precisa ser, o que não é um grande problema, isso é só uma observação para você procurar refazer de outra forma.

O que não gostei é o fato de que se pode roubar no jogo, fazendo com que um jogador jogue onde já foi jogado antes e o jogador 2 pode jogar no mesmo lugar que o jogador 1 na mesma rodada, substituindo a peça do jogador 1.

Valeu pelo esforço, mas que tal uma versão 2 "sem bugs"?

[]s

[2] Comentário enviado por karamoojo em 13/10/2004 - 17:45h

Valeu pelo comentario, já dei uma arrumada no código, vou colocar aqui a nova versão. Cê sabe se tem como apagar esse do site e deixar só o novo?

Valeu...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts