Exemplo n.º 1
0
   SEQJ_tpCondRet SEQJ_PushCartaSequencia( SEQJ_tppSeqJ pSeqJ, CAR_tppCarta pCarta )
   {
      CAR_tppCarta cartaAux;

      if (pSeqJ == NULL)
      {
        return SEQJ_CondRetSequenciaVazia;
      }

           // se tiverem cartas na seq, verificar se pode colocar

      if( totalCartasNaSeq( pSeqJ ) != 0 )  
      {
        PIL_VerCarta( pSeqJ->pPilha, &cartaAux, 0 ); 

        if ( !ehSequenciaValor( cartaAux, pCarta ))
        {
            return SEQJ_CondRetCartasForaDaSequencia;
        }
      }  

      //senao apenas dar push
	  
      PIL_PushCarta( pSeqJ->pPilha, pCarta);

      pSeqJ->numCartasViradas++;

      return SEQJ_CondRetOK;
   }
Exemplo n.º 2
0
   PIL_tpCondRet PIL_PopCarta( PIL_tppPilha pPilha , CAR_tppCarta * pCarta )
   {
	    int valor ;
		char naipe ;
		PIL_tpCondRet condRet = PIL_VerCarta( pPilha , pCarta , 0 ) ;
        
        *pCarta = NULL ;
        
		if ( condRet != PIL_CondRetOK )
		{
			return condRet ;
		}

		CAR_ObterNaipe( *pCarta, &naipe );
		CAR_ObterValor( *pCarta, &valor );

		LIS_ExcluirElemento( pPilha->pListaCartas ); 

		/*LIS_ExcluirElemento irá destruir a carta junto do nó.
			 É necessário que ela seja criada novamente*/
		CAR_CriarCarta( pCarta ) ;
		CAR_PreencheCarta( *pCarta , naipe, valor ) ;

		return PIL_CondRetOK ; 	

   }/* Fim função: PIL Pop Carta */
/***************************************************************************
*
*  Função: PIL  &Tornar Carta Invisivel
*  ****/
PIL_tpCondRet PIL_TornarCartaInvisivel( PIL_tpPilha pPilha){

	CAR_tpCarta carta;
	PIL_tpCondRet condRet;

	condRet = PIL_VerCarta( pPilha ,&carta);
	if( condRet == PIL_CondRetOK )
		CAR_TornarInvisivel(carta);
	
	return condRet;
}
Exemplo n.º 4
0
int totalCartasNaSeq( SEQJ_tppSeqJ pSeqJ )
{
  CAR_tppCarta cartaAux ;
  int numCartasSeq = 0 ;

  while( PIL_VerCarta( pSeqJ->pPilha, &cartaAux, numCartasSeq ) == PIL_CondRetOK )
  {
    numCartasSeq++;
  }

  return numCartasSeq ;
}
/***************************************************************************
*
*  Função: PIL  &Imprimir Pilha Cartas
*  ****/
PIL_tpCondRet PIL_ImprimirPilhaCartas (PIL_tpPilha pPilha) {
	
	CAR_tpCondRet condRetCarta = CAR_CondRetOK;
	LIS_tpCondRet condRetLista;
	int qtd = 0;

	if (pPilha == NULL)
		return PIL_CondRetPilhaNaoExiste;

	printf("\n > ");
	
	PIL_QuantidadeCartas(pPilha,&qtd);
	if (qtd == 0 ) {	
		printf("\n");
		return PIL_CondRetPilhaVazia;
	}

	IrFinalLista(pPilha->cabeca);
	while (qtd) {
	
		CAR_tpCarta carta;
		CAR_tpValor valor;
		CAR_tpNaipe naipe;
		PIL_tpCondRet condRetPilha;

		condRetPilha = PIL_VerCarta(pPilha,&carta);
		if (condRetPilha == PIL_CondRetPilhaVazia)
			return condRetPilha;
	
		
		condRetCarta = CAR_ObterValor(carta,&valor);
		CAR_ObterNaipe(carta,&naipe);

	
		if(condRetCarta == CAR_CondRetCartaInvisivel)
			printf("# ");
		else
			printf(" %s%s ",PegarStringValor(valor),PegarStringNaipe(naipe));

			condRetLista = LIS_AvancarElementoCorrente( pPilha->cabeca , -1 );
	qtd--;
	}
	printf("\n");
	return PIL_CondRetOK;
}	/* Fim função: PIL  &Imprimir Pilha Cartas */
Exemplo n.º 6
0
   SEQJ_tpCondRet SEQJ_VerificaSeqCompleta( SEQJ_tppSeqJ pSeqJ )
   {
      int i ;
      int seqComecou ;
      int valor ;
      CAR_tppCarta cartaAux;
      CAR_tppCarta cartaAnterior;

      seqComecou = 0;
      valor = 0;

      if (pSeqJ == NULL)
      {
        return SEQJ_CondRetSequenciaVazia;
      }

      for (i = 0 ; i < 13 ; i++)
      {
        PIL_VerCarta( pSeqJ->pPilha, &cartaAux, i );
        CAR_ObterValor(cartaAux, &valor);
        if( valor != i+1 )
        {
          return SEQJ_CondRetCartasForaDaSequencia;
        }

        if( seqComecou )
        {
          if( !ehSequenciaValor(cartaAux, cartaAnterior) || !ehMesmoNaipe(cartaAux, cartaAnterior))
          {
             return SEQJ_CondRetCartasForaDaSequencia;
          }
        }
        cartaAnterior = cartaAux;
        if( !seqComecou ) seqComecou = 1;
      }

      return SEQJ_CondRetOK;
   }
Exemplo n.º 7
0
   TST_tpCondRet TST_EfetuarComando( char * ComandoTeste )
   {

      PIL_tpCondRet CondRetObtido   = PIL_CondRetOK ;
      PIL_tpCondRet CondRetEsperada = PIL_CondRetFaltouMemoria ;
                                      /* inicializa para qualquer coisa */

	 

      char NaipeEsperado = '?'  ;
      char NaipeObtido   = '!'  ;  
      char NaipeDado     = '\0' ;

      int ValorEsperado = -1  ;
      int ValorObtido   = -2  ;  
      int ValorDado     = 0 ;

      int PosicaoPilha = -1 ;
      int NumPilha = -1 ;
      int  NumLidos = -1 ;

      CAR_tppCarta CartaObtida ;
      CAR_tppCarta CartaDada ;

      TST_tpCondRet Ret ;

      /* Testar PIL Criar Pilha de Cartas */

         if ( strcmp( ComandoTeste , CRIAR_PIL_CMD ) == 0 )
         {

            NumLidos = LER_LerParametros( "ii" , &NumPilha ,
                               &CondRetEsperada ) ;
            if ( NumLidos != 2 || NumPilha >= MAX_PILS || NumPilha < 0 )
            {
               return TST_CondRetParm ;
            } /* if */

            CondRetObtido = PIL_CriarPilhaVazia( &vPilhas[NumPilha] ) ;

            return TST_CompararInt( CondRetEsperada , CondRetObtido ,
                                    "Retorno errado ao criar pilha." );

         } /* fim ativa: Testar PIL Criar Pilha de cartas*/

      /* Testar PIL Push Carta na pilha */

         else if ( strcmp( ComandoTeste , PUSH_CMD ) == 0 )
         {
			
            NumLidos = LER_LerParametros( "icii" ,
                               &NumPilha, &NaipeDado , &ValorDado, &CondRetEsperada ) ;
            if ( NumLidos != 4 || NumPilha >= MAX_PILS || NumPilha < 0 )
            {
               return TST_CondRetParm ;
            } /* if */
			
			CAR_CriarCarta( &CartaDada ) ;
            CAR_PreencheCarta( CartaDada, NaipeDado , ValorDado );
			
            CondRetObtido = PIL_PushCarta( vPilhas[NumPilha] , CartaDada ) ;

            return TST_CompararInt( CondRetEsperada , CondRetObtido ,
                                    "Retorno errado ao operar 'push' na pilha" );

         } /* fim ativa: Testar PIL Push Carta na pilha */

      /* Testar PIL Pop Carta da Pilha */

         else if ( strcmp( ComandoTeste , POP_CMD ) == 0 )
         {			
            NumLidos = LER_LerParametros( "ii" ,
                               &NumPilha , &CondRetEsperada ) ;
            if ( NumLidos != 2 || NumPilha >= MAX_PILS || NumPilha < 0 )
            {
               return TST_CondRetParm ;
            } /* if */

            CondRetObtido = PIL_PopCarta( vPilhas[NumPilha] , &CartaObtida ) ;

			
            return TST_CompararInt( CondRetEsperada , CondRetObtido ,
                                   "Retorno errado ao operar 'pop' na pilha") ;


            } /* Testar PIL Ver Carta da Pilha */

		else if ( strcmp( ComandoTeste , VER_CMD ) == 0 )
         {
			
            NumLidos = LER_LerParametros( "iii" ,
                            &NumPilha , &PosicaoPilha , &CondRetEsperada ) ;
            if ( NumLidos != 3 || NumPilha >= MAX_PILS || NumPilha < 0 )
            {
                return TST_CondRetParm ;
            } /* if */

			 CondRetObtido = PIL_VerCarta( vPilhas[NumPilha] , &CartaObtida , PosicaoPilha ) ;
				
				
			 return TST_CompararInt( CondRetEsperada , CondRetObtido ,
						"Retorno errado ao ver carta da pilha") ;


            } /* Testar PIL Ver Carta da Pilha */

            /* Testar PIL Destruir pilha de cartas */
            else if ( strcmp( ComandoTeste , DESTROI_CMD ) == 0 )
            {

		    NumLidos = LER_LerParametros( "ii" , &NumPilha ,  
		                       &CondRetEsperada ) ;
		    if ( NumLidos != 2 || NumPilha >= MAX_PILS || NumPilha < 0 )
		    {
		       return TST_CondRetParm ;
		    } /* if */

		    CondRetObtido = PIL_DestruirPilha( vPilhas[NumPilha] ) ;

		    return TST_CompararInt( CondRetEsperada , CondRetObtido ,
		                            "Retorno errado destruir pilha." );

	    } /* fim ativa: Testar PIL Destruir Pilha de Cartas */

	    /* Testar PIL Destruir Pilha */

        return TST_CondRetNaoConhec ;

   } /* Fim função: TPIL Efetuar operações de teste específicas para pilha de cartas */