Jogo da velha reverso

Publicado por Djames Suhanko 12/12/2008

[ Hits: 6.725 ]

Homepage: www.phantomsystem.com.br

Download velhaReversa.c




Um jogo da velha que você deve obrigar o computador a ganhar.

Dessa vez, sem gambiarra de "goto", usando apenas funções recursivas.

  



Esconder código-fonte

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
// As onze linhas que compoe a matriz
// Linha 3 e 6 sao preenchidas por "_"
// Indices de pipe: 5 e 11
// As linhas com 18 posicoes sao para coordenadas numericas
char linha1[17], linha2[18], linha3[17], linha4[17],  linha5[18], linha6[17];
char linha7[17], linha8[18], linha9[17];

//Definicao das coordenadas
//Se limitarmos em 2 casas, havera erro se a digitacao passar de duas posicoes
//Deixar esse excesso elimina tal bug
char posicao[10];
char vez = 'X';
/*
//Zeras as posicoes
char zera(){
   linha2[2]  = ' ';
   linha2[8]  = ' ';
   linha2[14] = ' ';
   linha5[2]  = ' ';
   linha5[8]  = ' ';
   linha5[14] = ' ';
   linha8[2]  = ' ';
   linha8[8]  = ' ';
   linha8[14] = ' ';
   }
zera();
*/
char matriz(){
system("clear");
//imprime a matriz
linha2[17] = '1';
linha5[17] = '2';
linha8[17] = '3';  
printf("  A     B     C\n");

for (i=0;i<17;i++)
   {
   printf("%c", linha1[i]);
   }
printf("\n");
for (i=0;i<18;i++)
   {
   printf("%c", linha2[i]);
   }
printf("\n");
for (i=0;i<17;i++)
   {
   printf("%c", linha3[i]);
   }
printf("\n");
for (i=0;i<17;i++)
   {
   printf("%c", linha4[i]);
   }
printf("\n");
for (i=0;i<18;i++)
   {
   printf("%c", linha5[i]);
   }
printf("\n");

for (i=0;i<17;i++)
   {
   printf("%c", linha6[i]);
   }
printf("\n");
for (i=0;i<17;i++)
   {
   printf("%c", linha7[i]);
   }
printf("\n");
for (i=0;i<18;i++)
   {
   printf("%c", linha8[i]);
   }
printf("\n");
for (i=0;i<17;i++)
   {
   printf("%c", linha9[i]);
   }
printf("\n");
}
//Gera numeros aleatorios de 1 a 9

//Computador joga
int j=0;
int computador(){
int myrand( int N )
{
  return random() % N;
}
unsigned int seed;
  seed=time(0);
  srandom(seed);
 int compopt = random()%10;
if (compopt == 0)
   {
   compopt = 1;
   }
int numeros[10];
numeros[j] = compopt;

//Esse printf abaixo debuga o random
printf("%d",numeros[j]);
int x;
if (j != 0)
   {
   for (x=j;x>-1;x--)
      {
      if (j != 0)
         {
         if (numeros[j] == numeros[j-1])
            {
            sleep(1);
            computador();
            }
         j = j-1;
         }
      }
   }
   j = j+1;

//Posicoes 1 2 e 3 da primeira linha
if (compopt == 1)
   {
   if (linha2[2] == '*' || linha2[2] == 'X')
      {
      sleep(1);
      computador();
      }
   else
      {
      linha2[2] = vez;
      }
   }
else if (compopt == 2)
   {
   if (linha2[8] == '*' || linha2[8] == 'X')
      {
      sleep(1);
      computador();
      }
   else
      {
      linha2[8] = vez;
      }
   }
else if (compopt == 3)
   {
   if (linha2[14] == '*' || linha2[14] == 'X')
      {
      sleep(1);
      computador();
      }
   else
      {
      linha2[14] = vez;
      }
   }
// Posicoes 1 2 e 3 da segunda linha
else if (compopt == 4)
   {
   if (linha5[2] == '*' || linha5[2] == 'X')
      {
      sleep(1);
      computador();
      }
   else
      {
      linha5[2] = vez;
      }
   }
else if (compopt == 5)
   {
   if (linha5[8] == '*' || linha5[8] == 'X')
      {
      sleep(1);
      computador();
      }
   else
      {
      linha5[8] = vez;
      }
   }
else if (compopt == 6)
   {
   if (linha5[14] == '*' || linha5[14] == 'X')
      {
      sleep(1);
      computador();
      }
   else
      {
      linha5[14] = vez;
      }
   }

//Posicoes 1 2 e 3 da terceira linha
else if (compopt == 7)
   {
   if (linha8[2] == '*' || linha8[2] == 'X')
      {
      sleep(1);
      computador();
      }
   else
      {
      linha8[2] = vez;
      }
   }
else if (compopt == 8)
   {
   if (linha8[8] == '*' || linha8[8] == 'X')
      {
      sleep(1);
      computador();
      }
   else
      {
      linha8[8] = vez;
      }
   }
else if (compopt == 9)
   {
   if (linha8[14] == '*' || linha8[14] == 'X')
      {
      sleep(1);
      computador();
      }
   else
      {
      linha8[14] = vez;
      }
   }
}//fim da funcao

//humano joga
char humano(){

      printf("Entre com a coordenada: >> ");
      fflush(NULL);
      scanf("%s",&posicao);
      if (!strcmp(posicao,"a1"))
         {
         if (!(linha2[2] == '*' || linha2[2] == 'X'))
            {
            linha2[2] = '*';
            }
         else
            {
            printf("Casa ocupada. tente de novo\n");
            humano();
            }
         }
      else if (!strcmp(posicao,"b1"))
         {
         if (!(linha2[8] == '*' || linha2[8] == 'X'))
            {
            linha2[8] = '*';
            }
         else
            {
            printf("Casa ocupada. tente de novo\n");
            humano();
            }
         }
      else if (!strcmp(posicao,"c1"))
         {
         if (!(linha2[14] == '*' || linha2[14] == 'X'))
            {
            linha2[14] = '*';
            }
         else
            {
            printf("Casa ocupada. tente de novo\n");
            humano();
            }
         }
      else if (!strcmp(posicao,"a2"))
         {
         if (!(linha5[2] == '*' || linha5[2] == 'X'))
            {
            linha5[2] = '*';
            }
         else
            {
            printf("Casa ocupada. tente de novo\n");
            humano();
            }
         }
      else if (!strcmp(posicao,"b2"))
         {
         if (!(linha5[8] == '*' || linha5[8] == 'X'))
            {
            linha5[8] = '*';
            }
         else
            {
            printf("Casa ocupada. tente de novo\n");
            humano();
            }
         }
      else if (!strcmp(posicao,"c2"))
         {
         if (!(linha5[14] == '*' || linha5[14] == 'X'))
            {
            linha5[14] = '*';
            }
         else
            {
            printf("Casa ocupada. tente de novo\n");
            humano();
            }
         }
      else if (!strcmp(posicao,"a3"))
         {
         if (!(linha8[2] == '*' || linha8[2] == 'X'))
            {
            linha8[2] = '*';
            }
         else
            {
            printf("Casa ocupada. tente de novo\n");
            humano();
            }
         }
      else if (!strcmp(posicao,"b3"))
         {
         if (!(linha8[8] == '*' || linha8[8] == 'X'))
            {
            linha8[8] = '*';
            }
         else
            {
            printf("Casa ocupada. tente de novo\n");
            humano();
            }
         }
      else if (!strcmp(posicao,"c3"))
         {
         if (!(linha8[14] == '*' || linha8[14] == 'X'))
            {
            linha8[14] = '*';
            }
         else
            {
            printf("Casa ocupada. tente de novo\n");
            humano();
            }
         }
      else
         {
         printf("Opcoes validas:\n");
         printf("a1,a2,a3,b1,b2,b3,c1,c2,c3\n");
         printf("Tente novamente:\n");
         humano();
         }
         }

//Preenche as posicoes de pipe
for (i=5;i<12;i++)
   {
   if (i == 5 || i == 11)
      {
      linha1[i]  = '|';
      linha2[i]  = '|';
      linha3[i]  = '|';
      linha4[i]  = '|';
      linha5[i]  = '|';
      linha6[i]  = '|';
      linha7[i]  = '|';
      linha8[i]  = '|';
      linha9[i]  = '|';
      }
   } 

//Preenche as linhas 3 e 6

for (i=0;i<17;i++)
   {
   if (i == 5 || i == 11)
      {
      i = i+1;
      }
   linha3[i] = '_';
   linha6[i] = '_';
   }

// Preenche os espacos em branco de todas as linhas
for (i=0;i<17;i++)
   {
   if(i == 5 || i == 11)
      {
      i = i+1;
      }
   linha1[i]  = ' ';
   linha2[i]  = ' ';
   linha4[i]  = ' ';
   linha5[i]  = ' ';
   linha7[i]  = ' ';
   linha8[i]  = ' ';
   linha9[i]  = ' ';
   }

//imprime a matriz
//linha2[2]  = '*';
//linha2[8]  = '*';
//linha2[14] = '*';
matriz();
int a;
for (a=0;;a++)
 {
humano();
sleep(1);
computador();
sleep(1);
matriz();
 }
}

Scripts recomendados

Shadow Mapping usando OpenGL e Cg

Ponteiros

Divisores de um inteiro positivo em C++

Simple Pomerode Time Counter

A - Comando strdup


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts