Ir para conteúdo
Fórum Script Brasil

Aprendiz2

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre Aprendiz2

Aprendiz2's Achievements

0

Reputação

  1. Boa Noite a todos , Sou novo nessa comunidade e também com programação, e gostaria de saber se alguém pode me da uma ajuda porque estou desesperado e não consigo achar o erro o enunciado é esse,é um jogo que utiliza uma lista duplamente cadiada e circular: Faça um programa que simule esse jogo de acordo com as seguintes instruções: – Crie uma lista duplamente encadeada circular. – Insira 10 nós nesta lista, representado os jogadores, onde a chave de cada nó é o número do jogador. – Imprima na tela a configuração inicial da roda. – O jogo deve começar pelo jogador 1. – Peça ao usuário que digite na tela a carta a ser tirada, como se o usuário fosse o baralho. – Após ler a carta, execute o que a carta representa. – Se for a carta 1, pule o jogador ao lado e vá para o próximo, sendo que este será o próximo jogador a jogar. Por exemplo, na configuração inicial, começando-se pelo jogador 1, a carta 1 faria com que o jogador 2 fosse pulado e o próximo jogador a jogar fosse o 3. – Se for a carta 3, elimine o terceiro jogador contado a partir do atual. Por exemplo, na configuração inicial, começando-se pelo jogador 1, a carta 3 faria com que o jogador 4 fosse eliminado e o próximo jogador a jogar fosse o 2. – Se for a carta 9, elimine o jogador que vem antes do atual. Por exemplo, na configuração inicial, começando-se pelo jogador 1, a carta 9 faria com que o jogador 10 fosse eliminado e próximo jogador a jogar fosse o 2. – Se for a carta 13, inverta o sentido do jogo. Por exemplo, na configuração inicial, começando-se pelo jogador 1, a carta 13 faria com que o próximo jogador a jogar fosse o 10, ao invés do 2. – Cuidado para não contar a cabeça da lista como jogador. Observe bem a sequência de passos mostrada anteriormente. E lembre-se de manipular corretamente os ponteiros de anterior e próximo de acordo com o sentido atual do jogo. – Depois que a carta for executada, imprima a nova configuração da roda e de qual jogador é a vez. Peça ao usuário para digitar a nova carta a ser tirada. – O jogo deve ficar nesse loop até que só reste um jogador, que será o vencedor. – Imprima o jogador vencedor na tela. até agora eu consegui fazer isso: //lista duplamente encadeada circular com nó cabeça #include<stdio.h> #include<conio.h> #include <stdlib.h> int cont=10; typedef struct no{ int jogador; struct no* prox; struct no* ant; }no; no* cria(void){ no *n; n = (no*) malloc (sizeof (no)); n -> jogador = 1; n -> prox = n; n -> ant = NULL; return n; } no* cria_no(int ch){ no *n; n = (no*) malloc (sizeof (no)); n -> jogador = ch; n -> prox = n; n -> ant = NULL; return n; } void inserir_fim(no *lista, int ch) { no *n; no *aux; n= cria_no(ch); aux=lista; while(aux->prox!=lista) aux = aux->prox; aux->prox = n; n -> prox = lista; n -> ant = aux; } void imprime(no* Lista){ no* aux; aux = Lista->prox; do { printf("%d ",aux-> jogador); aux = aux->prox; }while(aux != Lista); } void imprime_reverso(no* Lista){ no *aux; aux = Lista->prox; while(aux ->prox != Lista) aux = aux -> prox; while(aux !=Lista){ printf("%d ",aux-> jogador); aux = aux->ant; } } void remover(no *L, int ch) { no *aux; aux = L->prox; getch(); while (aux->jogador!=ch && aux!=NULL){ aux = aux -> prox; } if (aux == NULL) printf("não há lista"); else if (aux == L->prox){ //primeiro elemento L->prox = aux->prox; aux -> prox -> ant = L; } else{ aux -> ant -> prox = aux -> prox; aux ->prox -> ant = aux -> ant; } free(aux); } void carta_validar(int carta, no* Lista, no* aux, no *L, int ch){ aux = Lista->prox; switch(carta) { case '1': printf ("Pule o jogador ao lado e passe para o seguinte\n"); aux = aux -> prox; aux = aux -> prox; printf("Nova configuração da roda: \n"); imprime(Lista); printf("\não é? a vez do jogador %d",aux ->jogador); break; case '9': printf ("Elimine o jogador que vem antes do atual\n"); remover(Lista, ch); printf("Nova configuração da roda: \n"); imprime(Lista); cont=cont--; printf("\não é? a vez do jogador %d",aux ->jogador); break; case '3': printf ("Elimine o terceiro jogador contado a partir do jogador atual"); aux = aux -> prox; aux = aux -> prox; remover(Lista, ch); imprime(Lista); cont=cont--; printf("\não é? a vez do jogador %d",aux -> jogador); break; case '13': printf ("Inverta o sentido da roda.\n"); printf("Nova configuração da roda: \n"); imprime_reverso(aux); printf("\não é? a vez do jogador %d",aux -> jogador); break; default: printf("opção inválida\n"); printf("Escolha outra carta: "); scanf("%d ", &carta); carta_validar(carta); } int main(){ int carta,n; no *Lista; no *aux; aux = Lista; Lista = cria(); printf("Jogo de cartas\n\n\n"); printf("Os jogadores são: \n\n"); for(n=1;n<11;n++) { inserir_fim(Lista,n); } imprime(Lista); printf("\n\n\n"); printf("O jogo comeca pelo jogador %d", 1); while(cont != 1) { printf("Digite a carta que o jogador vai tirar: \n"); scanf("%d",&carta); carta_validar(carta,no* aux, no* Lista); } if(cont == 1) printf("O vencedor é o jogador %d", aux -> jogador); getch(); } Quem puder me ajudar ficarei muito grato Abraço a todosssss!!!!!!
×
×
  • Criar Novo...