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();
}
Question
Aprendiz2
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:
Quem puder me ajudar ficarei muito grato
Abraço a todosssss!!!!!!
Edited by kuroiAdicionar tag CODE
Link to comment
Share on other sites
0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.