예제 #1
0
int main(){

	colocaAcentos();
	
  Pilha* pilhasNormais[MAX_PILHAS_NORMAIS];

  Pilha* pilhasSuperiorDireita[MAX_PILHAS_SUPERIOR_DIREITA];

  Carta cartasSuperiorEsquerda[MAX_CARTAS_SUPERIOR_ESQUERDA];
  inicializaCartasComValorPadrao(cartasSuperiorEsquerda);

  criaPilhas(pilhasNormais, MAX_PILHAS_NORMAIS);

  criaPilhas(pilhasSuperiorDireita, MAX_PILHAS_SUPERIOR_DIREITA);

  leArquivo(pilhasNormais);

  unsigned short int jogadorVenceu = 0;

  char mensagemErro[100] = "";
  
  unsigned short int jogadaJogador = 0;

  unsigned short int colunasFormadas = 0;
  
  while(!jogadorVenceu){
		
    imprimeFreecell(pilhasNormais, pilhasSuperiorDireita, cartasSuperiorEsquerda);
    
		imprimeQuantidadeJogadasFeitas(jogadaJogador);
  
    char coluna_origem;
    char coluna_destino;
    mostraMensagemErro(mensagemErro);
    pedeMovimentoParaUsuario(&coluna_origem, &coluna_destino);

    Carta cartaColunaOrigem;
    short int indiceColunaOrigem = indiceLetra(coluna_origem);
    short int corCartaColunaOrigem;

    Carta cartaColunaDestino;
    short int indiceColunaDestino = indiceLetra(coluna_destino); 
    short int corCartaColunaDestino;

    if(indiceColunaOrigem == -1 || indiceColunaDestino == -1){
      strcpy(mensagemErro, "Voce inseriu uma coluna fora dos limites. Lembre-se: de [0 - 3], [X - Z], [A - H]");
    } 
    else {

      short int ondeColunaOrigemEsta = checaQualPilhaColunaEsta(coluna_origem);
      short int ondeColunaDestinoEsta = checaQualPilhaColunaEsta(coluna_destino);

      // [A-H] => [W-Z]
      if(ondeColunaOrigemEsta == 1 && ondeColunaDestinoEsta == 0){
        movimentaNormalParaSuperiorEsquerda(cartasSuperiorEsquerda, pilhasNormais, indiceColunaOrigem, indiceColunaDestino, mensagemErro, &jogadaJogador);
      }

      // [A-H] => [A-H]
      else if(ondeColunaDestinoEsta == 1 && ondeColunaOrigemEsta == 1){
      	movimentaNormalParaNormal(pilhasNormais, indiceColunaOrigem, indiceColunaDestino, mensagemErro, &jogadaJogador);
      }

      // [W-Z] => [A-H]
      else if(ondeColunaOrigemEsta == 0 && ondeColunaDestinoEsta == 1){
        movimentaSuperiorEsquerdaParaNormal(cartasSuperiorEsquerda, pilhasNormais, indiceColunaOrigem, indiceColunaDestino, mensagemErro, &jogadaJogador);
			}

			// [W-Z] => [W-Z]
			else if(ondeColunaDestinoEsta == 0 && ondeColunaOrigemEsta == 0){
        movimentaSuperiorEsquerdaParaSuperiorEsquerda(cartasSuperiorEsquerda, indiceColunaOrigem, indiceColunaDestino, mensagemErro, &jogadaJogador);
			}
			
      // [W-Z] => [0-3]
			else if(ondeColunaOrigemEsta == 0 && ondeColunaDestinoEsta == 2){
        movimentaSuperiorEsquerdaParaSuperiorDireita(cartasSuperiorEsquerda, pilhasSuperiorDireita, indiceColunaOrigem, indiceColunaDestino, mensagemErro, &jogadaJogador, &colunasFormadas);
      }

      // [A-H] => [0-3]
      else if(ondeColunaOrigemEsta == 1 && ondeColunaDestinoEsta == 2){
        movimentaNormalParaSuperiorDireita(pilhasNormais, pilhasSuperiorDireita, indiceColunaOrigem, indiceColunaDestino, mensagemErro, &jogadaJogador, &colunasFormadas);
      }

      // Checa se o jogador formou as quatro pilhas do canto superior direito
      if(checaJogadorFormouTodasPilhas(colunasFormadas)){
        jogadorVenceu = 1;
      }

    }
  }

  imprimeFreecell(pilhasNormais, pilhasSuperiorDireita, cartasSuperiorEsquerda);

  imprimeMensagemVencedor(jogadaJogador);
  
  pausaTela();

  liberaPilhas(pilhasNormais, MAX_PILHAS_NORMAIS);
  liberaPilhas(pilhasSuperiorDireita, MAX_PILHAS_SUPERIOR_DIREITA);

  return 0;
}
예제 #2
0
int main(){
	lista *li;
	li = criaLista();
	int opcao;
	
	while(1){
		limpaTela();
		colocaAcentos();
		
		printf("[1] Adicionar Telefone \n[2] Imprimir Lista de telefones\n[3] Quantidade de telefones na lista\n[4] Remover ultimos\n[99] Sair\n\n");
		limpaBuffer();
		printf("Digite a opção desejada: ");
		scanf("%d",&opcao);
		
		if(opcao == 1){
			int qntdTelefones,i;
			
			printf("Digite a quantidade de telefones que deseja inserir: ");
			limpaBuffer();
			scanf("%d",&qntdTelefones);
			
			Telefone tel[qntdTelefones];
			
			for(i=0; i<qntdTelefones; i++){
				limpaBuffer();
				printf("Digite o nome: ");
				gets(tel[i].nome);
				limpaBuffer();
				printf("Digite a marca: ");
				gets(tel[i].marca);
			
			insereNaListaPrimeiro(li,tel[i]);
			}
			limpaTela();
		}else if(opcao == 2){
			limpaTela();
			imprimeLista(li);
			pausaTela();
		}else if(opcao == 3){
			limpaTela();
			int qntd;
			qntd = quantidadeElementosLista(li);
			printf("Quantidade de telefones cadastrados: %d\n",qntd);
			pausaTela();
		}else if(opcao == 4){
			int qntdRemocao,i;
			limpaBuffer();
			printf("Digite a quantidade de telefones que deseja remover: ");
			scanf("%d",&qntdRemocao);
			for(i=0; i<qntdRemocao; i++){
				removerNaListaPrimeiro(li);
			}
		}else if(opcao == 99){
			char confirmacao[4];
			limpaBuffer();
			printf("Deseja mesmo sair? (sim ou nao): ");
			gets(confirmacao);
			if(strcmp(confirmacao,"sim")==0){
				return 0;
			}
		}
	}
	destroiLista(li);
	
	return 0;
}