DES_tpCondRet DES_RetomaUltimoJogoSalvo( void ) { int i, j; int Linhas, Colunas, Dicas; int CondRet; FILE * ArquivoDesenho = fopen( NOME_JOGO_SALVO, "r" ); if( ArquivoDesenho == NULL ) return DES_CondRetPonteiroArquivoNulo; //Se existe uma estrutura desenho definida, destroi ela antes de criar outra if( pDesenho != NULL ) DES_DestroiDesenho( ); if( fscanf(ArquivoDesenho, "%d %d %d", &Linhas, &Colunas, &Dicas) != 3 ) return DES_CondRetArquivoInvalido; //Verifica se a quantidade de linhas e de colunas são válidas if( Linhas < NUM_LINHAS_MINIMO || Colunas < NUM_COLUNAS_MINIMO || Linhas > NUM_LINHAS_MAXIMO || Colunas > NUM_COLUNAS_MAXIMO ) return DES_CondRetTamanhoInvalido; //Aloca a estrutura desenho pDesenho = ( TpDesenho* ) malloc( sizeof( TpDesenho ) ); //Falhou a alocação de memória if( pDesenho == NULL ) return DES_CondRetFaltouMemoria; #ifdef _DEBUG CED_MarcarEspacoAtivo( pDesenho ); #endif pDesenho->iLinhas = Linhas; pDesenho->iColunas = Colunas; pDesenho->iDicas = Dicas; //Chama o módulo de matriz e guarda o ponteiro na estrutura desenho pDesenho->pMatrizJogo = MAT_CriarMatriz( Linhas, Colunas #ifdef _DEBUG , 'c' #endif ); if( pDesenho->pMatrizJogo == NULL ) return DES_CondRetErroForaDoModuloDesenho; //Gera o esquema de forma aleatória PreencheMatrizUltimoJogo( ArquivoDesenho ); CondRet = InicializaListas( ); if( CondRet != DES_CondRetOk ) return ( DES_tpCondRet ) CondRet; return DES_CondRetOk; }
DES_tpCondRet DES_IniciaDesenho( int NumLinhas, int NumColunas ) { int CondRet; //Se existe uma estrutura desenho definida, destroi ela antes de criar outra if( pDesenho != NULL ) DES_DestroiDesenho( ); //Verifica se a quantidade de linhas e de colunas são válidas if( NumLinhas < NUM_LINHAS_MINIMO || NumColunas < NUM_COLUNAS_MINIMO || NumLinhas > NUM_LINHAS_MAXIMO || NumColunas > NUM_COLUNAS_MAXIMO ) return DES_CondRetTamanhoInvalido; //Aloca a estrutura desenho pDesenho = ( TpDesenho* ) malloc( sizeof( TpDesenho ) ); //Falhou a alocação de memória if( pDesenho == NULL ) return DES_CondRetFaltouMemoria; pDesenho->iLinhas = NumLinhas; pDesenho->iColunas = NumColunas; pDesenho->iDicas = NUM_MAX_DICAS; #ifdef _DEBUG CED_MarcarEspacoAtivo( pDesenho ); #endif //Chama o módulo de matriz e guarda o ponteiro na estrutura desenho pDesenho->pMatrizJogo = MAT_CriarMatriz( NumLinhas, NumColunas #ifdef _DEBUG , 'c' #endif ); if( pDesenho->pMatrizJogo == NULL ) return DES_CondRetErroForaDoModuloDesenho; //Gera o esquema de forma aleatória PreencheAleatorioMatriz( ); CondRet = InicializaListas( ); if( CondRet != DES_CondRetOk ) return ( DES_tpCondRet ) CondRet; return DES_CondRetOk; }
DES_tpCondRet DES_IniciaDesenhoProjetado( FILE * ArquivoDesenho ) { int Linhas, Colunas; int CondRet; //Se existe uma estrutura desenho definida, destroi ela antes de criar outra if( pDesenho != NULL ) DES_DestroiDesenho( ); if( ArquivoDesenho == NULL ) return DES_CondRetPonteiroArquivoNulo; if( fscanf(ArquivoDesenho, "%d %d", &Linhas, &Colunas) != 2 ) return DES_CondRetArquivoInvalido; //Verifica se a quantidade de linhas e de colunas são válidas if( Linhas < NUM_LINHAS_MINIMO || Colunas < NUM_COLUNAS_MINIMO || Linhas > NUM_LINHAS_MAXIMO || Colunas > NUM_COLUNAS_MAXIMO ) return DES_CondRetTamanhoInvalido; //Aloca a estrutura desenho pDesenho = ( TpDesenho* ) malloc( sizeof( TpDesenho ) ); //Falhou a alocação de memória if( pDesenho == NULL ) return DES_CondRetFaltouMemoria; pDesenho->iLinhas = Linhas; pDesenho->iColunas = Colunas; pDesenho->iDicas = NUM_MAX_DICAS; //Chama o módulo de matriz e guarda o ponteiro na estrutura desenho pDesenho->pMatrizJogo = MAT_CriarMatriz( Linhas, Colunas ); if( pDesenho->pMatrizJogo == NULL ) return DES_CondRetErroForaDoModuloDesenho; //Gera o esquema de forma aleatória PreencheMatrizProjetada( ArquivoDesenho ); CondRet = InicializaListas( ); if( CondRet != DES_CondRetOk ) return ( DES_tpCondRet ) CondRet; return DES_CondRetOk; }
DES_tpCondRet DES_IniciaDesenhoVazio( int NumLinhas, int NumColunas ) { int CondRet; //Se existe uma estrutura desenho definida, destroi ela antes de criar outra if( pDesenho != NULL ) DES_DestroiDesenho( ); //Verifica se a quantidade de linhas e de colunas são válidas if( NumLinhas < NUM_LINHAS_MINIMO || NumColunas < NUM_COLUNAS_MINIMO || NumLinhas > NUM_LINHAS_MAXIMO || NumColunas > NUM_COLUNAS_MAXIMO ) return DES_CondRetTamanhoInvalido; //Aloca a estrutura desenho pDesenho = ( TpDesenho* ) malloc( sizeof( TpDesenho ) ); //Falhou a alocação de memória if( pDesenho == NULL ) return DES_CondRetFaltouMemoria; pDesenho->iLinhas = NumLinhas; pDesenho->iColunas = NumColunas; pDesenho->iDicas = 0; pDesenho->pMatrizJogo = MAT_CriarMatriz( NumLinhas, NumColunas ); if( pDesenho->pMatrizJogo == NULL ) return DES_CondRetErroForaDoModuloDesenho; //Preenche a matriz com células (0,0) PreencheMatrizZerada( ); CondRet = InicializaListas( ); if( CondRet != DES_CondRetOk ) return ( DES_tpCondRet ) CondRet; return DES_CondRetOk; }
TST_tpCondRet TST_EfetuarComando( char * ComandoTeste ) { int numLidos = -1, indexMat = -1, dimMatriz = -1, CondRetEsperada = -1, direcao = -1 ; char stringDada [ DIM_STR ] = {0}; char *stringObtida; LIS_tppLista listaAuxiliar ; TST_tpCondRet CondRetObtido ; /* Testar MAT Criar Matriz */ if ( strcmp( ComandoTeste , CRIAR_MAT_CMD ) == 0 ) { numLidos = LER_LerParametros( "iii" , &indexMat, &dimMatriz, &CondRetEsperada ) ; if ( numLidos != 3 ) { return TST_CondRetParm ; } /* if */ CondRetObtido = MAT_CriarMatriz( &(vtMatrizes[ indexMat ]), dimMatriz ) ; return TST_CompararInt( CondRetEsperada , CondRetObtido , "Condicao de retorno errada ao criar matriz." ) ; } /* fim ativa: Testar MAT Criar Matriz */ /* Testar MAT andar na matriz */ else if ( strcmp( ComandoTeste , ANDAR_DIR_CMD ) == 0 ) { numLidos = LER_LerParametros( "iii" , &indexMat, &direcao , &CondRetEsperada ) ; if ( numLidos != 3 ) { return TST_CondRetParm ; } /* if */ CondRetObtido = MAT_AndarCorrente( vtMatrizes[indexMat], (MAT_tpDirecao) direcao ) ; return TST_CompararInt( CondRetEsperada , CondRetObtido , "Retorno errado ao percorrer a matriz." ); } /* fim ativa: Testar MAT andar na matriz */ /* Testar MAT atribuir lista a célula corrente */ else if ( strcmp( ComandoTeste , ATRIBUIR_LIS_CMD ) == 0 ) { numLidos = LER_LerParametros( "isi" , &indexMat, stringDada, &CondRetEsperada ) ; if ( numLidos != 3 ) { return TST_CondRetParm ; } /* if */ listaAuxiliar = criarListaAPartirDeString(stringDada); CondRetObtido = MAT_AtribuirValorCorrente( vtMatrizes[ indexMat ], listaAuxiliar ) ; return TST_CompararInt( CondRetEsperada , CondRetObtido , "Retorno errado ao inserir lista no elemento corrente." ); } /* fim ativa: Testar MAT atribuir lista a célula corrente */ /* Testar MAT obter valor da célula corrente */ else if ( strcmp( ComandoTeste , OBTER_LIS_CMD ) == 0 ) { int pEsp; numLidos = LER_LerParametros( "isii" , &indexMat, stringDada, &pEsp, &CondRetEsperada ) ; if ( numLidos != 4 ) { return TST_CondRetParm ; } /* if */ CondRetObtido = MAT_ObterValorCorrente( vtMatrizes[ indexMat ], &listaAuxiliar ) ; if( CondRetObtido != CondRetEsperada || CondRetObtido == MAT_CondRetPonteiroNulo ){ return TST_CompararInt( CondRetEsperada , CondRetObtido , "Retorno errado ao obter lista no elemento corrente." ); } if ( pEsp == 0 ) { return TST_CompararPonteiroNulo( 0 , listaAuxiliar , "Valor não deveria existir." ) ; } /* if */ stringObtida = obterStringAPartirDeLista( listaAuxiliar ); return TST_CompararString(stringDada, stringObtida, "Representação em string da lista obtida diferente do esperado."); } /* fim ativa: Testar MAT obeter valor da célula corrente */ /* Testar MAT destruir matriz */ else if ( strcmp( ComandoTeste , DESTROI_CMD ) == 0 ) { numLidos = LER_LerParametros( "ii" , &indexMat, &CondRetEsperada ) ; if ( numLidos != 2 ) { return TST_CondRetParm ; } /* if */ CondRetObtido = MAT_DestruirMatriz( vtMatrizes[ indexMat ] ) ; return TST_CompararInt( CondRetEsperada , CondRetObtido , "Retorno errado ao destruir matriz" ); } /* fim ativa: Testar MAT destruir matriz */ /* Testar MAT esvaziar matriz */ else if ( strcmp( ComandoTeste , ESVAZIA_CMD ) == 0 ) { numLidos = LER_LerParametros( "ii" , &indexMat, &CondRetEsperada ) ; if ( numLidos != 2 ) { return TST_CondRetParm ; } /* if */ CondRetObtido = MAT_EsvaziarMatriz( vtMatrizes[ indexMat ] ) ; return TST_CompararInt( CondRetEsperada , CondRetObtido , "Retorno errado ao esvaziar matriz" ); } /* fim ativa: MAT esvaziar matriz */ return TST_CondRetNaoConhec ; } /* Fim função: TARV Efetuar operações de teste específicas para árvore */