Пример #1
0
int main() {
  int joga;
  inicializa();
  joga=primeiraJogada();//buga quando ninguém tem a primeira peça
  //1 = maquina joga; 0 = Player joga
  do{
    system("clear");
    if (joga == 0){
      joga=jogando();
      if(contaLista(playerHand)==0){
        system("clear");
        printf("\nVocê Ganhou!\n");
        break;
      } 
    }


    else if (joga == 1){
      joga=AI();
      if(contaLista(machineHand)==0){
        system("clear");
        printf("você perdeu!\n");
        break;
      }
    }

  } while (1);
 
 
  return 0;
}
Пример #2
0
void imprimeLista(lista *inicio, int posLista, int posLista2, int enter)
{
	lista *aux;
	int i = 1, numLista;
	aux = inicio;
	numLista = contaLista(inicio);

	printf("\n______________");
	printf("\n|   Lista");
	printf("\n|-------------");
	printf("\n|pos| Valores");
	printf("\n|-------------");
	while (aux != NULL)
	{
		printf("\n| %d | %d", i, aux->valor);
		if ((posLista > 0 && posLista <= numLista) || posLista2 > 0 && posLista2 <= numLista){
			if (i == posLista || i == posLista2){
				printf("   <---");
			}
		}
		printf("\n|-------------");
		aux = aux->prox;
		i++;
	}
	printf("\nSua lista retornou com %d nodos.", numLista);
	if (enter == 1){
		printf("\nPressione ENTER para continuar..");
		getch();
	}
}
Пример #3
0
lista *inserePosN(lista *inicio){
	lista *novo, *anterior, *proximo;
	int num, pos;
	int numLista = contaLista(inicio);

	do{
		printf("\nInsira a posicao da lista na qual voce deseja adicionar um nodo: ");
		scanf("%d", &pos);
		if (pos < 0 || pos > numLista+1){
			printf("\nA lista possui %d posicoes, insira uma posicao compativel para inserir um nodo!");
		}
	} while (pos < 0 || pos > numLista+1);

	if (isPrimeiro(pos)){
		inicio = insereInicio(inicio);
	}
	else if (pos == numLista+1){
		inicio = insereFim(inicio);
	}
	else{
		printf("\nDigite um valor para inserir no novo nodo: ");
		scanf("%d", &num);
		novo = getMallocLista();
		anterior = pegaNodoN(inicio, pos - 1);
		proximo = pegaNodoN(inicio, pos + 1);
		if (novo != 0){
			novo->valor = num;
			novo->prox = anterior->prox;
			anterior->prox = novo;
		}
		imprimeLista(inicio, pos, 0, 1);
	}
	return inicio;
}
Пример #4
0
lista *insereFim(lista *inicio) {
	lista *novo, *aux;
	int num;
	aux = inicio;

	printf("\nDigite um valor para inserir no novo nodo: ");
	scanf("%d", &num);

		novo = getMallocLista();
		if (novo != 0){
			novo->valor = num;
			novo->prox = NULL;

			if (aux == NULL){
				inicio = novo;
			}
			else{
				while (aux->prox != NULL){
					aux = aux->prox;
				}
				aux->prox = novo;
			}
		}
	imprimeLista(inicio,contaLista(inicio), 0, 1);
	return inicio;
}
Пример #5
0
bool isUltimo(lista *inicio, int pos){
	if (pos == contaLista(inicio)){
		return true;
	}
	else {
		return false;
	}
}
Пример #6
0
void imprimeTela (){
  int i;
  system("clear");
  printf("peças da mesa: "); imprimePecas(mesa);
  printf("peças da mão: "); imprimePecas(playerHand);printf("              ");
  for(i=1; i<=contaLista(playerHand); i++)
    if(i<10)printf(" [%d] ", i);else printf(" [%d]  ", i);
  printf("\n//////////////////////\n/  escolha uma peça  /\n//////////////////////\n");
}
Пример #7
0
//Função que copia uma lista duplamente encadeada para um array
//recebe o cabeçalho da lista e o endereço onde vai ser armazenada a quantidade de elementos
  //e retorna o cabeçalho do array
Node *toArray(Node *noh, int *quantidade) {
  Node *pecas, *temp=noh;
  int i=0, tamanhoDaLista;

  *quantidade = contaLista(temp);
  tamanhoDaLista=contaLista(temp);
  if (quantidade == 0)
    return NULL;


  pecas=(Node *) malloc (tamanhoDaLista * sizeof (Node));

  while (temp->right != NULL ) {
    pecas[i]=*temp;
    temp=temp->right;
    i++;
  }
  pecas[i]=*temp;
  return pecas;
}
Пример #8
0
void trocaPos(lista *inicio){
	int pos, pos2, numLista, confirma, aux;

	numLista = contaLista(inicio);

	if (numLista > 1){
		do{
			printf("\nInsira a posicao do nodo que deseja trocar: ");
			scanf("%d", &pos);
			if (pos < 1 || pos > numLista){
				printf("\nA lista possui %d posicoes comecando pelo indice 1, o nodo selecionado não existe!", numLista);
			}
		} while (pos < 1 || pos > numLista);

		do{
			printf("\nInsira a posicao do nodo que deseja trocar pelo primeiro: ");
			scanf("%d", &pos2);
			if (pos2 < 1 || pos2 > numLista){
				printf("\nA lista possui %d posicoes comecando pelo indice 1, o nodo selecionado não existe!", numLista);
			}
			else if (pos2 == pos){
				printf("\nInsira um valor diferente do primeiro!");
			}
		} while ((pos < 1 || pos > numLista) || pos2 == pos);

		do{
			imprimeLista(inicio, pos, pos2, 0);
			printf("\n\nDeseja trocar o nodos selecionados? (1.Sim - 0.Nao)");
			scanf("%d", &confirma);
			if (confirma == 1){
				aux = pegaNodoN(inicio, pos)->valor;
				pegaNodoN(inicio, pos)->valor = pegaNodoN(inicio, pos2)->valor;
				pegaNodoN(inicio, pos2)->valor = aux;
			}
		} while (confirma != 1 && confirma != 0);
	}
	else{
		printf("\nPara trocar nodos de posicao voce precisa ter ao menos 2 nodos na lista!");
		printf("\nPressione ENTER para continuar..");
		getch();
	}
}
Пример #9
0
lista *deletaNodo(lista *inicio){
	lista *anterior, *aux;
	int pos, confirma;
	int numLista = contaLista(inicio);

	if (numLista > 1){
		do{
			printf("\nInsira a posição do nodo que você quer excluir da lista: ");
			scanf("%d", &pos);
			if (pos < 1 || pos > numLista){
				printf("\nA lista possui %d posicoes comecando pelo indice 1, insira uma posicao compativel para deletar um nodo!", numLista);
			}
		} while (pos < 1 || pos > numLista);

		if (isPrimeiro(pos)){
			do{
				imprimeLista(inicio, pos, 0, 0);
				printf("\n\nDeseja deletar o nodo selecionado? (1.Sim - 0.Nao)");
				scanf("%d", &confirma);
				if (confirma == 1){
					aux = pegaNodoN(inicio, 2);
					free(pegaNodoN(inicio, 1));
					inicio = aux;
				}
			} while (confirma != 1 && confirma != 0);
		}
		else if (isUltimo(inicio, pos)){
			do{
				imprimeLista(inicio, pos, 0, 0);
				printf("\n\nDeseja deletar o nodo selecionado? (1.Sim - 0.Nao)");
				scanf("%d", &confirma);
				if (confirma == 1){
                    aux = pegaNodoN(inicio, numLista);       
					pegaNodoN(inicio, numLista - 1)->prox = NULL;
					free(aux);
				}
			} while (confirma != 1 && confirma != 0);
		}
		else{
			do{
				imprimeLista(inicio, pos, 0, 0);
				printf("\n\nDeseja deletar o nodo selecionado? (1.Sim - 0.Nao)");
				scanf("%d", &confirma);
				if (confirma == 1){
					anterior = pegaNodoN(inicio, pos - 1);
					aux = pegaNodoN(inicio, pos);
					anterior->prox = aux->prox;
					free(aux);
				}
			} while (confirma != 1 && confirma != 0);
		}
	}
	else{
		imprimeLista(inicio, 1, 0, 0);
		printf("\n\nA sua lista possui apenas 1 nodo, deseja deletar ele? (1.Sim - 0.Nao)");
		printf("\n(Se for deletado, o programa pedira para voce adicionar o primeiro nodo da lista de novo):\n");
		scanf("%d", &confirma);
		if (confirma == 1){
			inicio = NULL;
		}
	}
	return inicio;
}
Пример #10
0
int jogando(){
  Node *temp=mesa;
  int auxI, auxII,primeiroNumero=temp->numberLeft, ultimoNumero,jogada, i;//joga = 1, pesca = 0;

  //Salva os dois números das extremidades da lista de dominós na mesa.
  while (temp!=NULL){
    ultimoNumero=temp->numberRight;
    temp=temp->right;
  }
  imprimeTela();
//esse loop verifica se existe uma peça compativel para a jogada, caso não, pesca e repete a verificação
  do {

    for(temp=playerHand; temp!=NULL; temp=temp->right) {
      if(temp->numberLeft == primeiroNumero || temp->numberRight == primeiroNumero || temp->numberLeft == ultimoNumero || temp->numberRight == ultimoNumero)
        break;
    }
    if(temp == NULL){
      playerHand=pescaDoMonte(playerHand);
          imprimeTela();
          printf("peça pescada por falta de jogadas possíveis!\n");
          return 1;
      }
      break;
  }while (1);

//esse loop pega a peça selecionada
  do{

    scanf("%d", &jogada);

    if(jogada > 0 && jogada <= contaLista(playerHand)){
      i=1;
      for (temp = playerHand; i<jogada; temp=temp->right)
        i++;

      if (temp->numberLeft == primeiroNumero || temp->numberRight == primeiroNumero || temp->numberLeft == ultimoNumero || temp->numberRight == ultimoNumero)
       break;
      else {
        imprimeTela();
        printf("Jogada inválida! Escolha outra peça: \n");
        continue;
      }
    }
    
    else continue;
    break;
  } while (1);

//essa parte faz os reaponteiramentos para dar um "pull" de uma lista pra outra.
  if (temp->left == NULL && temp->right == NULL){
    playerHand=NULL;
    temp->left=NULL;
    temp->right=NULL;
  }
  else if (temp->left == NULL ){
    playerHand=playerHand->right;
    playerHand->left = NULL;
    temp->right=NULL;
  }
  else if (temp->right==NULL) {
    temp->left->right=NULL;
    temp->left=NULL;
  }
  else {
    temp->left->right= temp->right;
    temp->right->left= temp->left;
    temp->left=NULL;
    temp->right=NULL;
  }
//falta excluir o nó da lista da mão
  do {
    printf("onde jogar?(1 - esquerda (%d); 2 - direita (%d)\n", primeiroNumero, ultimoNumero);
    scanf("%d", &jogada);
    if (jogada == 1) {
      if(temp->numberRight==primeiroNumero) {
        temp->right=mesa;
        mesa=temp;
        break;
      }
      else if (temp->numberLeft==primeiroNumero) {
        auxI=temp->numberLeft;
        auxII=temp->numberRight;
        temp->numberLeft=auxII;
        temp->numberRight=auxI;
        temp->right=mesa;
        mesa=temp;
        break;
      }
      else {
        printf("jogada invalida!\n");
        continue;
      }
    }
    else {
      Node *ultimo;
      for (ultimo=mesa; ultimo->right!=NULL; ultimo=ultimo->right);
      if (temp->numberLeft==ultimoNumero){
        ultimo->right=temp;
        temp->left=ultimo;
        break;
      }
      if (temp->numberRight==ultimoNumero) {
        auxI=temp->numberLeft;
        auxII=temp->numberRight;
        temp->numberLeft=auxII;
        temp->numberRight=auxI;
        ultimo->right=temp;
        temp->left=ultimo;
        break;
      }
      else {
        printf("jogada inválida!\n");
        continue;
      }
    }

  } while (1);
  return 1;
}