Super Truco

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

[ Hits: 25.474 ]

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

Justificador de texto em 80 colunas

Copia uma linha selecionada para um arquivo secundário

Ler string de um ficheiro

MyBank

Montando string de conexão para banco de dados em C# através de um arquivo xml personalizado


  

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