Pular para o conteúdo

Jogo da Velha (corrigido)

O velha.c corrigido..
* Sem o uso de "goto" agora.. :)
* Com o uso do "for" para economizar várias linhas de código repetitivo :)
* Adicionei uma função que mostra se um número é divisivel por outro (retirada de um script aqui no site do VOL). Função usada para determinar de quem é a vez de jogar.

Abraços,
Fiquem com Deus;
Hunz HunZ
Hits: 20.622 Categoria: C/C++ Subcategoria: Introdução
  • Download
  • Nova versão
  • Indicar
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Descrição

O velha.c corrigido..
* Sem o uso de "goto" agora.. :)
* Com o uso do "for" para economizar várias linhas de código repetitivo :)
* Adicionei uma função que mostra se um número é divisivel por outro (retirada de um script aqui no site do VOL). Função usada para determinar de quem é a vez de jogar.

Abraços,
Fiquem com Deus;
Download velha.c Enviar nova versão
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Esconder código-fonte

/* *****************************************
  AUTOR: Thiago ( hunz )
  EMAIL / MSN: tn_negri@hotmail.com
  ESPAÇO VOL: www.vivaolinux.com.br/~hunz
***************************************** */

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

char set;
int linha=0,coluna=0,win,casa[3][3];

void draw(int x, int y) {
  if (casa[x][y] == '\0') printf(" ");
  if (casa[x][y] == 1) printf("X");
  if (casa[x][y] == 2) printf("O");
}

void limpa() {
  printf("\e[H\e[2J");
}

void jogo() {
  printf("  1   2   3\n");
  printf("1 ");
  draw(0,0);
  printf(" | ");
  draw(0,1);
  printf(" | ");
  draw(0,2);
  printf("\n ---+---+---\n2 ");
  draw(1,0);
  printf(" | ");
  draw(1,1);
  printf(" | ");
  draw(1,2);
  printf("\n ---+---+---\n3 ");
  draw(2,0);
  printf(" | ");
  draw(2,1);
  printf(" | ");
  draw(2,2);
}

void check() {
  int i=0;
  for (i=0;i<3;i++) { /* Horizontal */
    if (casa[i][0] == casa[i][1] && casa[i][0] == casa[i][2]) {
      if (casa[i][0] == 1) win=1;
      if (casa[i][0] == 2) win=2;
    }
  }
  for (i=0;i<3;i++) { /* Vertical */
    if (casa[0][i] == casa[1][i] && casa[0][i] == casa[2][i]) {
      if (casa[0][i] == 1) win=1;
      if (casa[0][i] == 2) win=2;
    }
  }
  if (casa[0][0] == casa[1][1] && casa[0][0] == casa[2][2]) { /* Diagonal Cima->Baixo*/
    if (casa[0][0] == 1) win=1;
    if (casa[0][0] == 2) win=2;
  }
  if (casa[0][2] == casa[1][1] && casa[0][2] == casa[2][0]) { /* Diagonal Baixo->Cima */
    if (casa[0][2] == 1) win=1;
    if (casa[0][2] == 2) win=2;
  }
}

void play(int player) {
  int i=0;
  if (player==1) set=1;
  if (player==2) set=2;
  play:
  while (i==0) {
    linha=0;
    coluna=0;
    while (linha<1 || linha>3) {
      printf("\nJogador %d. Escolha a Linha (1,2,3): ",set);
      scanf("%d",&linha);
      getchar();
    }
    while (coluna<1 || coluna>3) {
      printf("\nJogador %d. Escolha a Coluna (1,2,3): ",set);
      scanf("%d",&coluna);
      getchar();
    }
    linha--;
    coluna--;
    if (casa[linha][coluna] != 1 && casa[linha][coluna] != 2) {
      casa[linha][coluna]=set;
      i=1;
    }
    else {
      printf("A casa está em uso! Jogue Novamente..\n");
      sleep(2);
      limpa();
      jogo();
    }
  }
}

char divi(int a, int b) {
  return (!(a%b));
}

void main() {
  int i=0;
  for (i=0;i<9;i++) {
    limpa();
    jogo();
    if(!divi(i,2)) play(2);
    else play(1);
    check();
    if (win == 1 || win == 2) i=10;
  }
  limpa();
  jogo();
  if (win == 1 || win == 2) printf("\nJogador %d venceu o jogo!\n",win);
  else printf("\nEmpate!\n");
}  
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Beethoven

Fila Sequencial

Uso do comando for e printf

impar ou par...

Função Busca Caractere

#1 Comentário enviado por jllucca em 02/09/2004 - 13:49h
Opa,

apenas para titulo de complemento. A função:

char divi(int a, int b) {
return (!(a%b));
}

Poderia ser substituida pela "fmod"(da math.h). Assim, chamariamos a função do mesmo modo.

Sobre a parte retirada seria bom se tu deixase uns comentarios retirado do site tal, feito por fulano. Citar o autor, seja qual for, é excelente e dá credibilidade pra pessoa.

[]'s
#3 Comentário enviado por celito.junior em 29/11/2004 - 13:11h
Ei kra, blz??

O que significa o codigo :

--------------------------
printf("\e[H\e[2J");
--------------------------

que esta no teu script ??

Acho que nao funcionou no meu compilador porque ele apenas escreveu
[H[2J
na tela.
Se vc puder me ajudar seria de muito util.
Flw.
#4 Comentário enviado por hunz em 29/11/2004 - 13:15h
Esse código é usado para limpar a tela, como o system("clear");
Se você preferir, pode substituir essa linha por:
system("clear");

Abraços,
Fiquem com Deus.
#5 Comentário enviado por jochan em 14/12/2005 - 14:36h
Muito legal, vai me ajudar bastente no meu projeto de C++ ... =)
#7 Comentário enviado por LucianoAlexandre em 14/03/2012 - 14:09h
para que serve a função "fmod"(da math.h).

Contribuir com comentário

Entre na sua conta para comentar.