Advertisement
GuiBrust

Untitled

Oct 26th, 2019
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.22 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <windows.h>
  6.  
  7. const int TAM=10;
  8.  
  9. using namespace std;
  10.  
  11.                         //VALIDA VETOR PARA CRIAR AS CARTAS EMBARALHADAS >>
  12.                         int valid_vetor(int vet[20] , int rando){
  13.                             int k=0, valid=0;
  14.  
  15.                         for(k=0;k<20;k++){
  16.                             if(vet[k]==rando || vet[k]==rando+10){
  17.                                 valid++;
  18.                         }
  19.                         }
  20.                         if(valid==1){
  21.                             return 3;
  22.                         }
  23.                         else if(valid==2){
  24.                         return 0;
  25.                         }
  26.                         else {
  27.                             return 1;
  28.                         }
  29.  
  30.                          }
  31.                          //VALIDA VETOR PARA CRIAR AS CARTAS EMBARALHADAS >>
  32.  
  33.  
  34.  
  35. //STRUCT PARA DEFINIR COR PARA CADA CARTA
  36. typedef struct card{
  37. int num[20];
  38. char cor[20];
  39. }card;
  40. //STRUCT PARA DEFINIR COR PARA CADA CARTA
  41.  
  42.  
  43.  
  44.                                 //DEFINIMOS O MONTE DE CARTAS
  45.                                 typedef struct {            
  46.                                     int monte[TAM];
  47.                                     char cor[TAM];
  48.                                     int topo;
  49.                                 } TMonte;
  50.                                 //DEFINIMOS O MONTE DE CARTAS
  51.  
  52.  
  53.  
  54.                                 //INICIAMOS O MONTE EM -1;
  55.                                 void TMonte_inicia (TMonte *p){    
  56.                                      p->topo = 0;  
  57.                                 }
  58.                                 //INICIAMOS O MONTE EM -1;
  59.  
  60.  
  61.  
  62.                                 //VERIFICA SE O MONTE ESTÁ VAZIO
  63.                                 int TMonte_vazio(TMonte *p){   //Definimos uma função que recebera a pilha
  64.                                     if(p->topo == 0){      //Verifica se o topo está vazio "-1"
  65.                                         return 1;         // Sim = Retorna 1
  66.                                     }
  67.                                     else {
  68.                                         return 0;         //Não = Retorna 2
  69.                                     }
  70.                                 }
  71.                                 //VERIFICA SE O MONTE ESTÁ VAZIO
  72.  
  73.  
  74.  
  75.                                 //VERIFICA SE O MONTE ESTÁ CHEIO
  76.                                 int TMonte_cheio(TMonte *p){   // Criamos uma função que recebe a pilha como parametro em ponteiro
  77.                                     if(p->topo == TAM){    // Verificamos se o topo estiver cheio "tamanho max - 1" ;
  78.                                         return 1;    // Sim = Retorna 1
  79.                                     }
  80.                                     else{
  81.                                         return 0;    // Não = Retorna 2
  82.                                     }
  83.                                 }
  84.                                 //VERIFICA SE O MONTE ESTÁ CHEIO
  85.  
  86.  
  87.  
  88.                                 //INSERIR CARTA AO MONTE
  89.                                 void TMonte_inserir(TMonte *p , card *c){  //Passamos a pilha como referencia e um valor
  90.                                     if(TMonte_cheio(p)==0){
  91.                                         p->monte[p->topo]= c->num[p->topo];
  92.                                         p->cor[p->topo]= c->cor[p->topo];
  93.                                         p->topo++;
  94.                                     }
  95.                                 }
  96.                                 //INSERIR CARTA AO MONTE
  97.  
  98.  
  99. //DEFINIMOS A FILA
  100. typedef struct Fila{
  101.     int Ini;
  102.     int Fim;
  103.     int Dados[TAM];
  104.     char Cor[TAM];
  105.     int nItens;
  106. }fila;
  107. //DEFINIMOS A FILA
  108.  
  109.  
  110.  
  111.  
  112. //INICIA FILA
  113. void cria_fila(fila *f){  //Cria fila iniciando inicio, fim e numero de itens como 0
  114.     f->Ini=0;
  115.     f->Fim=0;
  116.     f->nItens=0;
  117. }
  118. //INICIA FILA
  119.  
  120.  
  121. //VERIFICA SE A FILA ESTÁ CHEIA
  122. bool fila_cheia(fila *f){  //Se o numero de itens for igual ao tamanho da fila retorna verdade ou falso
  123.     if(f->nItens==TAM){
  124.         return true;
  125.     }
  126.     else{
  127.         return false;
  128.     }
  129. }
  130. //VERIFICA SE A FILA ESTÁ CHEIA
  131.  
  132.  
  133.  
  134. //VERIFICA SE A FILA ESTA VAZIA
  135. bool fila_vazia(fila *f){  // Verifica se o numero de itens é zero e retorna verdadeiro ou falso
  136.     if(f->nItens==0){
  137.         return true;
  138.     }
  139.     else{
  140.         return false;
  141.     }
  142. }
  143. //VERIFICA SE A FILA ESTA VAZIA
  144.  
  145. //INSERE NA FILA
  146. void insere(card *c , fila *f, int pos){
  147.     if(!fila_cheia(f)){
  148.         f->Dados[f->Fim] = c->num[pos];
  149.         f->Cor[f->Fim] = c->cor[pos];
  150.     f->Fim++;
  151.     if(f->Fim==TAM){
  152.         f->Fim=0;
  153.     }
  154.     f->nItens++;
  155.     }
  156.     }
  157. //INSERE NA FILA
  158.  
  159.  
  160. //REMOVE DA FILA
  161. struct card retira(fila *f){
  162.     card ca;
  163.     ca.cor[1]=f->Cor[f->Ini];
  164.     ca.num[1]=f->Dados[f->Ini];
  165.     f->Ini++;
  166.     if(f->Ini==TAM){
  167.         f->Ini=0;
  168.     }
  169.     f->nItens--;
  170.     return ca;
  171. }
  172.  
  173. //REMOVE DA FILA   
  174.  
  175.  
  176. void mostra(fila *f1, fila *f2, TMonte *p, card cm){
  177.     int i=0;
  178.     cout<<" Monte"<<endl;
  179.     for(i=0;i<p->topo;i++){
  180.         printf(" |%d - %c| ", p->monte[i], p->cor[i]);
  181.     }
  182.    
  183.     int a=f1->nItens;
  184.     int b=f1->Ini;
  185.     cout<<"\n\n Jogador 1"<<endl;
  186.     for(i=0;i<a;i++){
  187.         printf(" |%d - %c| ", f1->Dados[f1->Ini], f1->Cor[f1->Ini]);
  188.         f1->Ini++;
  189.         f1->nItens--;
  190.             if(f1->Ini==TAM){
  191.               f1->Ini=0;
  192.             }
  193.     }
  194.     f1->nItens=a;
  195.     f1->Ini=b;
  196.    
  197.     int a2=f2->nItens;
  198.     int b2=f2->Ini;
  199.     cout<<"\n\n Jogador 2"<<endl;
  200.     for(i=0;i<a2;i++){
  201.         printf(" |%d - %c| ", f2->Dados[f2->Ini], f2->Cor[f2->Ini]);
  202.         f2->Ini++;
  203.         f2->nItens--;
  204.             if(f2->Ini==TAM){
  205.               f2->Ini=0;
  206.             }
  207.     }
  208.     f2->nItens=a2;
  209.     f2->Ini=b2;
  210.    
  211.     cout<<"\n\nMesa "<<endl;
  212.     printf(" |%d - %c| ", cm.num[1],cm.cor[1]);
  213.     cout<<endl;
  214. }
  215.  
  216.  
  217.  
  218. //REMOVE CARTA DO MONTE
  219. void TMonte_remove(TMonte *p, card cc, fila *f){          //Definimos função que remove valor        
  220.     if(TMonte_vazio(p)==0){  //Verifica se o monte nao estiver vazio                          
  221.         p->topo--;  
  222.         cc.num[1]=p->monte[p->topo];
  223.         cc.cor[1]=p->cor[p->topo];
  224.         insere(&cc,f,1);        
  225.    
  226.     }
  227. }
  228. //REMOVE CARTA DO MONTE
  229.  
  230. //MAIN
  231. int main(int argc, char const *argv[])
  232. {
  233.    
  234. int r, controller=0, y=-1;
  235.  
  236. int vetor[20];
  237.  
  238. card cc, cm;
  239. bool start=true;
  240. TMonte monte;
  241. TMonte_inicia(&monte);
  242. fila f1, f2;
  243. cria_fila(&f1);
  244. cria_fila(&f2);
  245.  
  246.  
  247.  
  248. srand(time (NULL));
  249.  
  250.                     //ADICIONAR VALORES AO VETOR
  251.                     while(1){
  252.                     r = (rand() % 10) + 1;
  253.                     controller = valid_vetor(vetor, r);    
  254.                     if(controller == 1){
  255.                         vetor[y]=r;
  256.                         y++;
  257.                     }
  258.                     else if(controller == 3 ){
  259.                         vetor[y]=r+10;
  260.                         y++;
  261.                     }
  262.  
  263.                     if(y==20){
  264.                         break;
  265.                     }
  266.                     }
  267.                     //ADICIONAR VALORES AO VETOR
  268.  
  269.  
  270.  
  271. //CHAMAR FUNÇÃO E ATRIBUIR COR
  272. for(int n=0;n<20;n++){
  273.     if(vetor[n] > 10){
  274.         cc.num[n]=vetor[n];
  275.         cc.num[n]=cc.num[n]-10;
  276.         cc.cor[n]='V';
  277.     }
  278.     else if (vetor[n] <= 10) {
  279.         cc.num[n]=vetor[n];
  280.         cc.cor[n]='A';
  281.     }
  282. }
  283. //CHAMAR FUNÇÃO E ATRIBUIR COR
  284.  
  285.   for (int im=0; im<=19 ; im++){
  286.  
  287.     if(im<10){
  288.     TMonte_inserir(&monte, &cc);
  289.     }
  290.     else if(im>=10 && im <= 14){    
  291.         insere(&cc, &f1 , im);     
  292.        
  293.     }
  294.     else{
  295.         insere(&cc, &f2 , im);
  296.     }
  297.  
  298.  }
  299. cm.num[1]=0;
  300. cm.cor[1]='-';
  301. while(1){
  302. mostra(&f1, &f2, &monte, cm);
  303. cout<<"Digite 1 para inciar o jogo:"<<endl;
  304. cout<<"Digite 2 para sair do jogo:"<<endl;
  305. int action=0;
  306. cin>>action;
  307.  
  308.  
  309. if(action==2){
  310.     break;
  311. }
  312. if(action==1){
  313.  
  314.     int t=10;
  315.     while(!TMonte_vazio(&monte)&&!fila_vazia(&f1)&&!fila_vazia(&f2)){
  316.        
  317.         if(start){
  318.             cm = retira(&f1);
  319.             start=false;
  320.             mostra(&f1, &f2, &monte, cm);
  321.             system("pause");
  322.         }
  323.  
  324.         if(f2.Cor[f2.Ini]== cm.cor[1] || f2.Dados[f2.Ini] == cm.num[1]){   //FAZ A VERIFICAÇÃO COM A CARTA JA EXISTENTE NA MESA, CASO FOR IGUAL A CARTA DA MESA ASSUME A CARTA DO INICIO DA FILA 2
  325.             cm = retira(&f2);  //GUARDA A CARTA REMOVIDA EM UMA VARIAVEL CM= CARTA DA MESA
  326.         }
  327.         else{  //SE NAAOOOOO
  328.             cc = retira(&f2); //RETIRA A CARTA E GUARDA EM CC
  329.             insere(&cc, &f2, 1); //INSERE NO FINAL DA FILA
  330.             TMonte_remove(&monte, cc, &f2);
  331.         }
  332.         mostra(&f1, &f2, &monte, cm);
  333.         system("pause");
  334.        
  335.         if(f1.Cor[f1.Ini]== cm.cor[1] || f1.Dados[f1.Ini] == cm.num[1]){   //FAZ A VERIFICAÇÃO COM A CARTA JA EXISTENTE NA MESA, CASO FOR IGUAL A CARTA DA MESA ASSUME A CARTA DO INICIO DA FILA 2
  336.             cm = retira(&f1);  //GUARDA A CARTA REMOVIDA EM UMA VARIAVEL CM= CARTA DA MESA
  337.         }
  338.         else{  //SE NAAOOOOO
  339.             cc = retira(&f1); //RETIRA A CARTA E GUARDA EM CC
  340.             insere(&cc, &f1, 1); //INSERE NO FINAL DA FILA
  341.             TMonte_remove(&monte, cc, &f1);
  342.         }
  343.         mostra(&f1, &f2, &monte, cm);
  344.         system("pause");
  345.  
  346.         t--;
  347. }
  348.  
  349. }
  350. }
  351.  
  352.     return 0;
  353. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement