Super Truco

Publicado por Celito Gregolon Júnior 27/11/2004

[ Hits: 24.482 ]

Download super_truco.txt




Joguinho de truco que demonstra como utilizar arquivos para armazenar dados com comandos simples. Ainda demonstra alguns conceitos básicos de IA (inteligencia artificial)... Muito legal.

  



Esconder código-fonte

/*Jogo de truco em C*/
/*Versão 0.20*/


/*Bibliotecas utilizadas*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/*Estados:
   0=normal
   1=trucado
   2=vale seis
   3=vale nove
   4=vale doze
      */


/*Constantes*/
#define opcoes 4
#define versao 0.20
#define TRUE 1
#define FALSE 0
#define ptsmax 12
#define g "(Gato)"
#define c "(Copas)"
#define e "(Espadilha)"
#define m "(Mole)"
#define truco "truco"
#define seis "seis"
#define nove "nove"
#define doze "doze"
#define vazio "vazio"
#define autor2 "Celito Gregolon J\£nior"     /*Ordem alfabética*/
#define autor1 "Carlos Eduardo Weber"
#define autor3 "Ricardo Oenning"
#define part "Partidas"
#define sal "Pontos"
#define jog "Jogador"
#define vit "Vit\¢rias"


/*Variáveis Globais*/
char   nome[40]="Design";
int    pnts[2];
int   pntsrod[2];
int   baralho[40];
int   matriz[40];
int    mao[2][3];
int   mesa[2][3];
int   cartas[40];
char   ranknomes[100][40];
int   rankpts[100];
int   rankpartidas[100];
int   rankvitorias[100];
FILE    *fl;
FILE    *arq;
int   primeiro, virada, turno, rodada, estado, last, saldo, inicial, continua, qly, sorteado, local, npartidas, vitorias;
char   status[6][10]={vazio,truco,seis,nove,doze,vazio};
char   esp;


/*Funções e procedimentos definidos*/
void    embaralha(void);
int   sorteia(int max);
void   distribui(void);
void   pcplay(void);
void   jgplay(void);
void   atribui(void);
char    toon(int card);
char   carta(int card);
void    save(void);
void   pcpensa(void);
void   pctruca(void);
void   pcordena(void);
void   jgtruca(void);
void   jogo(void);
void   sobre(void);
void   rank(void);


/*Principal*/
void main()
{
   /*Variáveis locais*/
   int opcao, i;


   /*Início*/
   opcao=opcoes+1;
   while (opcao!=opcoes)
   {
      /* Pede para que o usuário escolha uma opção*/
      printf("\n");
      printf("************************\n");
      printf("O que voc\^ deseja fazer?\n");
      printf("\t1 - Jogar truco\n");
      printf("\t2 - Ver ranking\n");
      printf("\t3 - Sobre...\n");
      printf("\t4 - Sair\n");
      printf("\nDigite uma op\Æo:");
      scanf("%d",&opcao);
      strcpy(&status[1],&truco);
      strcpy(&status[2],&seis);
      strcpy(&status[3],&nove);
      strcpy(&status[4],&doze);
      /*Verifica possíveis entradas erradas*/
      if ((opcao<1)||(opcao>opcoes))
      {
         printf("\a\n\nVALOR INCORRETO!\n\n");
         printf("Por favor escolha uma op\Æo entre 1 e %d\n\n", opcoes);
         system("Pause");
      }
      if (opcao==1)
      {
         jogo();
      }
      if (opcao==2)
      {
         rank();
      }
      if (opcao==3)
      {
         sobre();
      }
   }
}


void sobre(void)
{
/**/   printf("\n\n");
   printf("Programa: Super Truco\n>>");
   esp=getch();
   printf("\nVers\Æo: %3.2f\n>>",versao);
   esp=getch();
   printf("\nAutores:\n");
   printf("\t%s\n",autor1);
   printf("\t%s\n",autor2);
   printf("\t%s\n>>",autor3);
   esp=getch();
   printf("\nComent\ rios\n");
   printf("\t       Este programa foi feito em novembro de 2004 como trabalho\n");
   printf("\tde conclus\Æo da disciplina de Processamento de Dados (PRD) da \n");
   printf("\t3\¦ fase do curso de Engenharia El\`trica da Universidade do Estado\n");
   printf("\tde Santa Catarina (UDESC).\n>>");
   esp=getch();
}


void rank(void)
{
   char    car;
   int   i;
   if ((arq=fopen("rank.txt","r"))==NULL)
   {
      arq=fopen("Rank.txt","w");
      for (i=0; i<100; i++)
         fprintf(arq,"%s %d %d %d\n",vazio,0,0,0);
      fclose(arq);
      arq=fopen("rank.txt","r");
   }
   printf("\n");
   printf(" Rank -%15s\t%10s\t%8s%10s\n\n",jog,part,vit,sal);
   for (i=0; i<10; i++)
   {
      fscanf(arq,"%s%d%d%d",ranknomes[i],&rankpartidas[i],&rankvitorias[i],&rankpts[i]);
      printf("%3d   -%15s\t%8d\t%5d\t%9d\n",i+1,ranknomes[i],rankpartidas[i],rankvitorias[i],rankpts[i]);
   }
   printf("\n");
   system("Pause");
   fclose(arq);
   if ((strcmp(&ranknomes[0],&vazio))!=0)
   {
      car='a';
      while ((car!='s')&&(car!='n'))
      {
         printf("\nVoc\^ deseja limpar a lista?(s/n)\n");
         scanf("%s",&car);
         if (car=='s')
         {
            arq=fopen("Rank.txt","w");
            for (i=0; i<100; i++)
               fprintf(arq,"%s %d %d %d\n",vazio,0,0,0);
            printf("Lista limpa!\n\n");
            system("Pause");
         }
         fclose(arq);
      }
   }
}


void jogo(void)
{
   char ch[5], tipo[40], car;
   int i, primeira, vale, naipe0, naipe1, valor;

         srand(time(NULL));
         for (i=0; i<40; i++)
            matriz[i]=39-i;

   
   /*Pede o nome do jogador*/
   printf("\n\nDigite seu nome:");
   scanf("%s",&nome);
   pnts[0]=0;
   pnts[1]=0;
   primeiro=sorteia(2);
   rodada=0;
   vitorias=0;
   npartidas=0;
   saldo=0;
   while ((pnts[0]<ptsmax)&&(pnts[1]<ptsmax))
   {
      /*embaralha as cartas*/
      embaralha();
      /*Distribui as cartas entre os jogadores*/
      distribui();
      /*Atribui uma pontuação as cartas para fins de comparação do valor das mesmas*/
      atribui();
      pntsrod[0]=0;
      pntsrod[1]=0;
      inicial=primeiro;
      turno=-1;
      estado=0;
      vale=0;
      last=2;
      local=1;
      sorteado=sorteia(40);
      while ((pntsrod[0]<2)&&(pntsrod[1]<2))
      {
         printf("\n***********************************\n");
         turno=turno+1;
         mesa[1][turno]=-1;
         /*Os jogadores jogam as cartas*/
         pcordena();
         continua=TRUE;
         if ((pnts[0]==11)&&(pnts[1]==11))
         {
            printf("\n\t*** Escurinha! ***\n");
         }
         if (inicial==0)
         {
            if (((pnts[0]==11)&&(pnts[1]<11))&&(turno==0))
            {
               printf("Pc est\  com m\Æo de 11.\n>>");
               esp=getch();
               if (qly<45)
               {
                  printf("\nPc correu.\n>>");
                  pntsrod[1]=3;
                  continua=FALSE;
               }
               else
               {
                  printf("\nPc aceitou.\n>>");
                  estado=1;
                  last=-1;
               }
            esp=getch();
            }
            if (((pnts[1]==11)&&(pnts[0]<11))&&(turno==0))
            {
               printf("Voc\^ est\  com m\Æo de 11.\n>>");
               esp=getch();
               printf("\nVirada: %c %c\n",carta(virada),toon(virada));
               printf("\nSua m\Æo \`:\n");
               for (i=0; i<3; i++)
               {
                  tipo[0]='{FONTE}';
                  if (cartas[mao[1][i]]==13)
                     strcpy(&tipo,&g);
                  if (cartas[mao[1][i]]==12)
                     strcpy(&tipo,&c);
                  if (cartas[mao[1][i]]==11)
                     strcpy(&tipo,&e);
                  if (cartas[mao[1][i]]==10)
                     strcpy(&tipo,&m);
                  printf("%c %c %s\n",carta(mao[1][i]),toon(mao[1][i]),tipo);
               }
               car='a';
               while ((car!='s')&&(car!='n'))
               {
                  printf("Voc\^ aceita?(s/n)");
                  scanf("%s",&car);
               }
               if (car=='n')
               {
                  pntsrod[0]=3;
                  continua=FALSE;
               }
               else
               {
                  estado=1;
                  last=-1;
               }
            }
            if (continua==TRUE)
               pctruca();
            if (continua==TRUE)
               pcplay();
            local=2;
            if (continua==TRUE)
               jgtruca();
            if (continua==TRUE)
               jgplay();
         }
         else
         {
            if (((pnts[0]==11)&&(pnts[1]<11))&&(turno==0))
            {
               printf("Pc est\  com m\Æo de 11.\n>>");
               esp=getch();
               if (qly<60)
               {
                  printf("\nPc correu.\n>>");
                  pntsrod[1]=3;
                  continua=FALSE;
               }
               else
               {
                  printf("\nPc aceitou.\n>>");
                  estado=1;
                  last=-1;
               }
            esp=getch();
            }
            if (((pnts[1]==11)&&(pnts[0]<11))&&(turno==0))
            {
               printf("Voc\^ est\  com m\Æo de 11.\n>>");
               esp=getch();
               printf("\nVirada: %c %c\n",carta(virada),toon(virada));
               printf("\nSua m\Æo \`:\n");
               for (i=0; i<3; i++)
               {
                  tipo[0]='{FONTE}';
                  if (cartas[mao[1][i]]==13)
                     strcpy(&tipo,&g);
                  if (cartas[mao[1][i]]==12)
                     strcpy(&tipo,&c);
                  if (cartas[mao[1][i]]==11)
                     strcpy(&tipo,&e);
                  if (cartas[mao[1][i]]==10)
                     strcpy(&tipo,&m);
                  printf("%c %c %s\n",carta(mao[1][i]),toon(mao[1][i]),tipo);
               }
               car='a';
               while ((car!='s')&&(car!='n'))
               {
                  printf("Voc\^ aceita?(s/n)");
                  scanf("%s",&car);
               }
               if (car=='n')
               {
                  pntsrod[0]=3;
                  continua=FALSE;
               }
               else
               {
                  estado=1;
                  last=-1;
               }
            }
            local=1;
            if (continua==TRUE)
               jgtruca();
            if (continua==TRUE)
               jgplay();
            if (continua==TRUE)
               pctruca();
            if (continua==TRUE)
               pcplay();
         }
                  if ((pntsrod[0]<2)&&(pntsrod[1]<2))
                 {           
            /*Avalia o resultado do turno*/
            if (cartas[mesa[0][turno]]>cartas[mesa[1][turno]])
            {
               inicial=0;
               if ((vale==1)||(vale==2))
                  pntsrod[0]=3;
               else
                  pntsrod[0]++;
               if (turno==0)
                  primeira=0;
               printf("\nPc levou este turno.\n>>");
            }
            if (cartas[mesa[0][turno]]<cartas[mesa[1][turno]])
            {
               inicial=1;
               if ((vale==1)||(vale==2))
                  pntsrod[1]=3;
               else
                  pntsrod[1]++;
               if (turno==0)
                  primeira=1;
               printf("\nVoc\^ levou este turno.\n>>");
            }
            if (cartas[mesa[0][turno]]==cartas[mesa[1][turno]])
            {
               if (turno==0)
               {
                  vale=1;
                  printf("\nTurno empatado.\n>>");
               }
               if (turno==1)
                  if (vale==0)
                  {
                     pntsrod[primeira]=3;
                     printf("\nTurno empatado.\n>>");
                  }
                  else
                  {
                     vale=2;
                     printf("\nTurno empatado.\n>>");
                  }
               if (turno==2)
               {
                  if (vale==2)
                  {
                     naipe0=(int)(mesa[1][3]/10);
                     naipe1=(int)(mesa[1][3]/10);
                     if (naipe0>naipe1)
                     {
                        pntsrod[0]=3;
                        printf("\nTurno empatado.\n>>");
                     }
                     else
                     {
                        pntsrod[1]=3;
                        printf("\nTurno empatado.\n>>");
                     }
                  }
                  else
                  {
                     pntsrod[primeira]=3;
                     printf("\nTurno empatado.\n>>");
                  }
               }   
            }
            esp=getch();
         }
      }
      printf("\n***********************************\n");
      valor=estado*3;
      if (estado==0)
         valor=1;
      if (pntsrod[0]>=2)
      {
         if (pnts[0]==11)
            valor=1;
         pnts[0]=pnts[0]+valor;
         if (valor==1)
            printf("\nPc ganhou 1 ponto\n");
         else
                        printf("\nPc ganhou %d pontos\n",valor);
                  printf("\n***********************************\n");
              }
      if (pntsrod[1]>=2)
      {
         if (pnts[1]==11)
            valor=1;
         if (valor==1)
            printf("\nVoc\^ ganhou 1 ponto\n");
         else
                        printf("\nVoc\^ ganhou %d pontos\n",valor);
         pnts[1]=pnts[1]+valor;
                  printf("\n***********************************\n");
      }
      esp=getch();
      if (pnts[0]>12)
         pnts[0]=12;
      if (pnts[1]>12)
         pnts[1]=12;
      printf("\n\tPLACAR PARCIAL\n");
      printf("\t---------------------\n\t Pc =   %d\n",pnts[0]);
      printf("\t---------------------\n\t %s =   %d\n",nome,pnts[1]);
      printf("\t---------------------\n");
      printf(">>");
      esp=getch();
      if ((pnts[0]>=ptsmax)||(pnts[1]>=ptsmax))
      {
         if (pnts[0]>=ptsmax)
         {
            npartidas++;
            saldo=pnts[1]-ptsmax;
                printf("\n\n\tVOC\Ò PERDEU!!!\n\n");
               }
         if (pnts[1]>=ptsmax)
         {
            vitorias++;
            npartidas++;
            saldo=ptsmax-pnts[0];
            printf("\n\n\tVOC\Ò GANHOU!!!\n\n");
         }
         system("Pause");
      }
      if (primeiro==0)
         primeiro++;
      else
             primeiro--;
           rodada++;
   }
   save();
}

void embaralha(void)
{
   int num, i, j, k;
   char ch[2];
   for (i=0; i<40; i++)
   {
      num=sorteia(40-i);
      baralho[i]=matriz[num];
      for (j=num; j<(39); j++)
         matriz[j]=matriz[j+1];
   }
   for (i=0; i<40; i++)
      matriz[i]=baralho[i];
}

int sorteia(int max)
{
   return ((int)max*rand()/(RAND_MAX+1));
}

void distribui(void)
{
   int   a, b, i;
   for (a=0; a<3; a++)
   {
      for (b=0; b<2; b++)
      {
         mao[b][a]=baralho[a*2+b];
      }
   }
   virada=baralho[6];
   printf("\n***********************************\n");
   printf("Rodada %2d",rodada+1);
   printf("\n>>");
   esp=getch();
   if (primeiro==0)
       printf("\nPc come\
>>");
      else
           printf("\nVoc\^ come\
>>");
       printf("");
       esp=getch();
}

void pcplay(void)
{
   int num, i, j, wx, ql, jogou, valormao;
   char tipo[40];
   
   


   /*Pc escolhe carta para jogar*/
   if (inicial==0)
   {
      if ((pntsrod[0]==0)&&(turno>0))
      {
         if (cartas[mao[0][1]]>6)
            num=sorteia(3-turno);
         else
            num=0;
      }
      else
         num=sorteia(3-turno);
   }
   if ((pnts[0]==11)||(pnts[1]==11))
      num=sorteia(3-turno);
   if (inicial==1)
   {
      jogou=FALSE;
      for (i=(2-turno); i>=0; i--)
      {
         if ((cartas[mao[0][i]]>cartas[mesa[1][turno]])&&(jogou==FALSE))
         {
            num=i;
            jogou=TRUE;
         }
      }
      if (jogou==FALSE)
         for (i=(2-turno); i>=0; i--)
         {
            if ((cartas[mao[0][i]]>cartas[mesa[1][turno]])&&(jogou==FALSE))
            {
               num=i;
               jogou=TRUE;
            }
         }
      if (jogou==FALSE)
         num=2-turno;
      if ((pntsrod[0]==pntsrod[1])&&(turno!=0))
         num=0;
   }

   tipo[0]='{FONTE}';
   mesa[0][turno]=mao[0][num];
   for (i=num; i<(2-turno); i++)
      mao[0][i]=mao[0][i+1];
   if (cartas[mesa[0][turno]]==13)
      strcpy(&tipo,&g);
   if (cartas[mesa[0][turno]]==12)
      strcpy(&tipo,&c);
   if (cartas[mesa[0][turno]]==11)
      strcpy(&tipo,&e);
   if (cartas[mesa[0][turno]]==10)
      strcpy(&tipo,&m);
   printf("\nPc jogou:  %c %c  %s\n",carta(mesa[0][turno]),toon(mesa[0][turno]),tipo);
   printf(">>");
   esp=getch();
}

void jgplay(void)
{
   int num, i, vle;
   char tipo[40];
   num=10;
   while ((num<0)||(num>(2-turno)))
   {
         printf("\nVirada:  %c %c\n",carta(virada),toon(virada));
      if ((pnts[0]==11)&&(pnts[1]==11))
      {
         printf("\nQue carta voc\^ quer jogar?(1");
         for (i=1; i<(3-turno); i++)
            printf("/%d",i+1);
         printf(")\n");
         scanf("%d",&num);
         num--;         
      }
      else
      {
         printf("\nQue carta voc\^ quer jogar?\n");
         for (i=0; i<(3-turno); i++)
         {
            tipo[0]='{FONTE}';
            if (cartas[mao[1][i]]==13)
               strcpy(&tipo,&g);
            if (cartas[mao[1][i]]==12)
               strcpy(&tipo,&c);
            if (cartas[mao[1][i]]==11)
               strcpy(&tipo,&e);
            if (cartas[mao[1][i]]==10)
               strcpy(&tipo,&m);
                 printf("%d - %c %c %s\n",i+1,carta(mao[1][i]),toon(mao[1][i]),tipo);
         }
         scanf("%d",&num);
         num--;
      }
      if ((num<0)||(num>(2-turno)))
      {
         printf("\a\n\tVALOR INCORRETO!!\n");
         printf("\nDigite sua op\Æo entre 0 e %d\n",(2-turno));
         system("Pause");
      }
      else
           {
         tipo[0]='{FONTE}';
         if (cartas[mao[1][num]]==13)
            strcpy(&tipo,&g);
         if (cartas[mao[1][num]]==12)
            strcpy(&tipo,&c);
         if (cartas[mao[1][num]]==11)
            strcpy(&tipo,&e);
         if (cartas[mao[1][num]]==10)
            strcpy(&tipo,&m);
                          printf("Voc\^ jogou: %c %c %s\n",carta(mao[1][num]),toon(mao[1][num]),tipo);
                   printf(">>");
             }
           esp=getch();
   }
   mesa[1][turno]=mao[1][num];
   for (i=num; i<(2-turno); i++)
      mao[1][i]=mao[1][i+1];   
}

void atribui(void)
{
   int vle, a, i, j, card;
   if ((virada%10)<9)
   {
      card=(virada%10)+1;
   }
   else   
      card=0;
   vle=0;
   for (i=0; i<4; i++)
   {
      vle=0;
      for (j=0; j<10; j++)
      {
         if (card==j)
            cartas[10*i+j]=10+i;
         else
         {
            cartas[10*i+j]=vle;
            vle=vle+1;
         }
      }
   }
}

char toon(int card)
{
   int vle, x;
   vle=(int)(card/10);
   if (vle==0)
      x=4;
   if (vle==1)
      x=6;
   if (vle==2)
      x=3;
   if (vle==3)
      x=5;
   return ("%c",x);
}

char carta(int card)
{
   int vle;
   char x;
   vle=card%10;
   if (vle>7)
      x=("\c",42+vle);
   if (vle==7)
      x='A';
   if (vle==6)
      x='K';
   if (vle==5)
      x='J';
   if (vle==4)
      x='Q';
   if (vle<4)
      x=("%c",52+vle);
   return x;
}

void save(void)
{
   int   i, pos, njogadores, pontos, j;
   char   nm[40];

   /*Abre o arquivo para leitura, se existir*/
   if ((arq=fopen("Rank.TXT","r"))!=NULL)
   {
      /*Obtem os nomes e a pontuação*/      
      for (i=0; i<100; i++)
      {
         fscanf(arq,"%s%d%d%d",&ranknomes[i],&rankpartidas[i],&rankvitorias[i],&rankpts[i]);
      }
   }


   /*senão, o cria*/
   else
   {
      arq=fopen("Rank.txt","w");
      for (i=0; i<100; i++)
      {
         fprintf(arq,"%s %d %d %d\n",vazio,0,0,0);
         strcpy(&ranknomes[i],&vazio);
         rankpartidas[i]=0;
         rankvitorias[i]=0;
         rankpts[i]=0;
      }
   }


   /*fecha o arquivo*/
   fclose(arq);


   /*procura o nome e conta o número de jogadores na lista*/
   njogadores=0;
   pos=-1;
   i=0;
   while ((pos==-1)||(i==njogadores))
   {
      if (strcmp(&ranknomes[i],&nome)==0)
         pos=i;
      if ((pos==-1)&&(i==99))
         pos=100;
      if (strcmp(&ranknomes[i],&vazio)!=0)
         njogadores++;
      i++;
   }


   /*se encontrar, acrescenta ou diminui seus pontos*/
   if (pos<100)
   {
      rankpartidas[pos]=rankpartidas[pos]+npartidas;
      rankpts[pos]=rankpts[pos]+saldo;
      rankvitorias[pos]=rankvitorias[pos]+vitorias;
   }


   /*senão, adiciona-lhe ao final da lista*/
   else
   {
      njogadores++;
      rankpartidas[njogadores-1]=npartidas;
      rankvitorias[njogadores-1]=vitorias;
      rankpts[njogadores-1]=saldo;
      strcpy(&ranknomes[njogadores-1],&nome);
   }


   /*ordena a lista em forma decrescente*/
   for (i=0; i<(njogadores-1); i++)
   {
      for (j=0; j<(njogadores-1); j++)
      {
         if (rankvitorias[j]<rankvitorias[j+1])
         {
            pontos=rankpts[j];
            rankpts[j]=rankpts[j+1];
            rankpts[j+1]=pontos;

            pontos=rankvitorias[j];
            rankvitorias[j]=rankvitorias[j+1];
            rankvitorias[j+1]=pontos;

            pontos=rankpartidas[j];
            rankpartidas[j]=rankpartidas[j+1];
            rankpartidas[j+1]=pontos;

            strcpy(&nm,&ranknomes[j]);
            strcpy(&ranknomes[j],&ranknomes[j+1]);
            strcpy(&ranknomes[j+1],&nm);
         }
         else
         {
            if (rankvitorias[j]==rankvitorias[j+1])
            {
               if (rankpts[j]<rankpts[j+1])
               {
                  pontos=rankpts[j];
                  rankpts[j]=rankpts[j+1];
                  rankpts[j+1]=pontos;

                  pontos=rankvitorias[j];
                  rankvitorias[j]=rankvitorias[j+1];
                  rankvitorias[j+1]=pontos;
   
                  pontos=rankpartidas[j];
                  rankpartidas[j]=rankpartidas[j+1];
                  rankpartidas[j+1]=pontos;
   
                  strcpy(&nm,&ranknomes[j]);
                  strcpy(&ranknomes[j],&ranknomes[j+1]);
                  strcpy(&ranknomes[j+1],&nm);
               }
               else
               {
                  if (rankpts[j]==rankpts[j+1])
                  {
                     if (rankpartidas[j]<rankpartidas[j+1])
                     {
                        pontos=rankpts[j];
                        rankpts[j]=rankpts[j+1];
                        rankpts[j+1]=pontos;

                        pontos=rankvitorias[j];
                        rankvitorias[j]=rankvitorias[j+1];
                        rankvitorias[j+1]=pontos;
         
                        pontos=rankpartidas[j];
                        rankpartidas[j]=rankpartidas[j+1];
                        rankpartidas[j+1]=pontos;
   
                        strcpy(&nm,&ranknomes[j]);
                        strcpy(&ranknomes[j],&ranknomes[j+1]);
                        strcpy(&ranknomes[j+1],&nm);
                     }
                  }
               }
            }
         }
      }
   }


   /*recria o arquivo para escrita*/
   if ((arq=fopen("Rank.txt","w"))==NULL)
   {
      printf("\n\aErro de leitura.\nO arquivo 'Rank.Txt' pode estar corrompido ou danificado.\n");
   }
   else
   {
      /*escreve os dados da lista*/
      for (i=0; i<100; i++)
      {
         fprintf(arq,"%s %d %d %d\n",ranknomes[i],rankpartidas[i],rankvitorias[i],rankpts[i]);
      }
   }


   /*fecha o arquivo*/
   fclose(arq);
}

void pcpensa(void)
{
   int i, valormao;
   valormao=0;
   for (i=0; i<(3-turno); i++)
      valormao=valormao+cartas[mao[0][i]];
   qly=3*valormao;
   if (turno==0)
   {
      if (inicial==1)
      {
         for (i=0; i<3; i++)
            if (cartas[mao[0][i]]>cartas[mesa[1][0]])
               qly=qly+5;
         if (qly==(3*valormao))
         {
            qly=25+sorteia(50);   /*Facão*/
         }
      }
   }
   if (turno==1)
   {
      if (pntsrod[0]==1)
      {
         qly=5*valormao;
         if (cartas[mesa[0][1]]==-1)
         {
            if (cartas[mao[0][0]]>=10)
               qly=60;
            if (cartas[mao[9][1]]>=8)
               qly=qly+20;
         }
         else
         {
            if (cartas[mesa[0][1]]>=11)
               qly=65;
            if (cartas[mao[0][1]]>=9)
               qly=90;
         }
         if (cartas[mao[0][0]]==13)
            qly=100;
      }
      if (pntsrod[1]==1)
      {
         if (cartas[mao[0][0]]<cartas[mesa[1][1]])
         {
               qly=30+sorteia(50);   /*Facão*/
         }
         else
         {
            if (cartas[mao[0][1]]<cartas[mesa[1][1]])
            {
                  qly=20+sorteia(50);   /*Facão*/
            }
            else
            {
               qly=4*valormao+sorteado;
            }
         }
      }
      else
      {
         qly=6*cartas[mao[0][0]]+2*cartas[mao[0][1]]+sorteado;
      }
   }
   if (turno==2)
   {
      if (inicial==1)
      {
         if (cartas[mao[0][0]]>cartas[mesa[1][2]])
         {
            qly=100;
         }
         else
         {
            if ((cartas[mao[0][0]]==cartas[mesa[1][2]])&&(cartas[mesa[0][0]]>cartas[mesa[1][0]]))
            {
               qly=100;
            }
            else
            {
                  qly=30+sorteia(60);   /*Facão*/
            }
         }         
      }
      if (cartas[mao[0][0]]==13)
         qly=100;
   }
}

void pctruca(void)
{
   int   num, i;
   char   tipo[40];
   pcpensa();
   if (((pnts[0]<11)&&(pnts[1]<11))&&(((last==1)||(last==2))&&(estado<4)))
   {
      if (qly>(50+sorteia(20)+estado*8))
      {
         printf("\nPc pediu %s.\n>>",status[estado+1]);
         esp=getch();
         printf("\nVirada: %c %c\n",carta(virada),toon(virada));
         printf("\nSua m\Æo \`:\n");
         if (mesa[1][turno]==-1)
         {
            for (i=0; i<(3-turno); i++)
            {
               tipo[0]='{FONTE}';
               if (cartas[mao[1][i]]==13)
                  strcpy(&tipo,&g);
               if (cartas[mao[1][i]]==12)
                  strcpy(&tipo,&c);
               if (cartas[mao[1][i]]==11)
                  strcpy(&tipo,&e);
               if (cartas[mao[1][i]]==10)
                  strcpy(&tipo,&m);
               printf("%c %c %s\n",carta(mao[1][i]),toon(mao[1][i]),tipo);
            }
         }
         else
         {
            for (i=0; i<(2-turno); i++)
            {
               tipo[0]='{FONTE}';
               if (cartas[mao[1][i]]==13)
                  strcpy(&tipo,&g);
               if (cartas[mao[1][i]]==12)
                  strcpy(&tipo,&c);
               if (cartas[mao[1][i]]==11)
                  strcpy(&tipo,&e);
               if (cartas[mao[1][i]]==10)
                  strcpy(&tipo,&m);
               printf("%c %c %s\n",carta(mao[1][i]),toon(mao[1][i]),tipo);
            }
         }      
         printf("Digite:\n1 - Aceitar;\n2 - Correr\n");
         if (estado<3)
            printf("3 - Pedir '%s'\n",status[estado+2]);
         scanf("%d",&num);
         if (num==1)
         {
            estado++;
            last=0;
         }
         if (num==2)
         {
            continua=FALSE;
            pntsrod[0]=3;
         }
         if (num==3)
         {
            last=0;
            estado++;
            local=0;
            jgtruca();
         }
         
      }
   }
}

void pcordena(void)
{
   int   i, j, wx;
   /*Ordena as cartas do pc no primeiro turno*/
   if (turno==0)
   {
      for (i=0; i<2; i++)
         for (j=0; j<2; j++)
            if (cartas[mao[0][j]]<cartas[mao[0][j+1]])
            {
               wx=mao[0][j];
               mao[0][j]=mao[0][j+1];
               mao[0][j+1]=wx;
            }
   }
}

void jgtruca(void)
{
   char   car;
   char   tipo[40];
   int   cont, i, num;
   if (((pnts[0]<11)&&(pnts[1]<11))&&(((last==0)||(last==2))&&(estado<4)))
   {
      cont=TRUE;
      if (local!=0)
      {
         printf("\nVirada: %c %c",carta(virada),toon(virada));
         printf("\nSua m\Æo \`:\n");
         for (i=0; i<(3-turno); i++)
         {
            tipo[0]='{FONTE}';
            if (cartas[mao[1][i]]==13)
               strcpy(&tipo,&g);
            if (cartas[mao[1][i]]==12)
               strcpy(&tipo,&c);
            if (cartas[mao[1][i]]==11)
               strcpy(&tipo,&e);
            if (cartas[mao[1][i]]==10)
               strcpy(&tipo,&m);
            printf("%c %c %s\n",carta(mao[1][i]),toon(mao[1][i]),tipo);
         }
         num=0;
         while ((num!=1)&&(num!=2))
         {
            printf("\nVoc\^ quer pedir %s?\n",status[estado+1]);
            printf("1 - Sim\n");
            printf("2 - N\Æo\n");
            scanf("%d",&num);
         }

         if (num==2)
            cont=FALSE;
      }
      if (cont==TRUE)
      {
         pcpensa();
         if ((qly>(sorteia(10)+(estado+1)*8+40))&&((qly<(sorteia(10)+(estado+2)*8+40)))||(estado>2))
         {
            estado++;
            last=1;
            printf("\nPc aceitou!\n>>");
            esp=getch();
         }
         else
         {
            if ((qly>(sorteia(10)+(estado+2)*8+40))&&(estado<3))
            {
               estado++;
               last=1;
               printf("\nPc aceitou!\n>>");
               esp=getch();
               pctruca();
            }
            else
            {
               continua=FALSE;
               pntsrod[1]=3;
               printf("\nPc correu!\n>>");
               esp=getch();
            }
         }
      }
   }
}


Scripts recomendados

Arquivos em C

Manipulação de registros em arquivos utilizando índices

read_log_conf

Exemplo de manipulação de arquivos

read_sql_conf


  

Comentários
[1] Comentário enviado por hunz em 29/11/2004 - 13:25h

Fiz o Download do script e fui tentar compilar..
Deu bastante erro cara.. Pelo que eu vi o codigo é bem grande..
Não olhei o codigo todo, talvez eu tenha tentado compilar errado, mas não deu pra compilar aqui..

Abraços,
Fique com Deus.

[2] Comentário enviado por cvs em 29/11/2004 - 16:02h

super_truco.c:1115:40: warning: unknown escape sequence: '\306'
/tmp/ccpxkZuh.o(.text+0x19d): In function `sobre':
: undefined reference to `getch'
/tmp/ccpxkZuh.o(.text+0x1c3): In function `sobre':
: undefined reference to `getch'
/tmp/ccpxkZuh.o(.text+0x21c): In function `sobre':
: undefined reference to `getch'
/tmp/ccpxkZuh.o(.text+0x276): In function `sobre':
: undefined reference to `getch'
/tmp/ccpxkZuh.o(.text+0x716): In function `jogo':
: undefined reference to `getch'
/tmp/ccpxkZuh.o(.text+0x773): more undefined references to `getch' follow
collect2: ld returned 1 exit status

esse foi o erro apos varios warnings.

[3] Comentário enviado por celito.junior em 29/11/2004 - 16:37h

Tente o seguinte,

Crie uma subrotina da seguinte forma:

void espera(void)
{
char esp;
esp=getch();
}

e a chame-a onde antes havia o codigo:

espera=getch();

Se, ainda assim não funcionar tente substituir getch por getchar, pois alguns compiladores nao reconhecem este comando.

Se vc tiver um compilador de C do DOS podera compilar com a seguinte comando:

bcc32 -y200 caminho_do_arquivo

por exemplo, se o arquivo estiver numa subpasta chamata programas, entao escreva:

bcc323 -y200 Programas\Super_Truco.c

Esta instrucao diz ao compilador para ignorar ate 200 warnings.

OK??!

Espero ter ajudado!!

[4] Comentário enviado por hunz em 29/11/2004 - 16:40h

Esse codigo foi programado para Windows?

Abraços,
Fiquem com Deus.

[5] Comentário enviado por celito.junior em 29/11/2004 - 16:51h

yeahp... mas atualizado para linux...

[6] Comentário enviado por nenoboy em 11/11/2011 - 17:24h

Use o Dev-Cpp para compilar...
Crie um projeto como console e com a linguagem em C que funciona...
Achei bacana e bem interessante o projeto...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts