Enviado em 31/05/2019 - 22:22h
Fala pessoal. Primeira vez aqui.#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<locale.h>
#include<conio.h>
typedef struct Noh{
char nome[15];
struct No *prox;
}no;
typedef struct Lista
{
no *inicio;
no *fim;
no *atual;
no *anterior;
}lista;
typedef struct Rodada
{
no *atual;
no *ant;
}rodada;
void inicia_lista(lista *lista)
{
lista->inicio = NULL;
lista->fim = NULL;
lista->atual = NULL;
lista->anterior = NULL;
}
/*função para inserir o nó jogador na lista*/
int inserir_jogador(lista *lista, int i)
{
i++;
no *novo;
novo = (no *)malloc(sizeof(no));
char nome[15];
printf("\n Informe o nome do %dº Player: ", i);
scanf("%s", &novo->nome);
novo->prox = lista->inicio;
if (lista->inicio == NULL)
{
lista->inicio = novo;
lista->fim = novo;
}
else
{
//encadeamento da lista
lista->fim->prox = novo;
lista->fim = lista->fim->prox;
}
}
/*função que imprime a lista*/
void imprimir_jogadores(lista *lista)
{
no *aux, *ant;
aux = lista->inicio;
ant = NULL;
if (aux == NULL)
{
printf("\n Lista Vazia!");
}
else
{
do{
printf("%s ", aux->nome);
aux = aux->prox;
}while (aux != lista->inicio);
}
}
void remover_jogador(lista *lista)
{
char nome_remove[15];
no *ant, *atual;
printf("\nInforme o Player a ser removido: ");
scanf("%s", &nome_remove);
if(lista->inicio == NULL)
{
printf("\nLista Vazia!");
}
else
{
ant = NULL;
atual = lista->inicio;
do
{
if(strcmp(atual->nome, nome_remove) == 0)
{
if (atual->nome == lista->inicio)
{
lista->inicio = lista->inicio->prox;
free(atual);
lista->fim->prox = lista->inicio;
break;
}
else
{
if(atual == lista->fim)
{
lista->fim = ant;
free(atual);
}
/*refazendo encadeamento*/
ant->prox = atual->prox;
free(atual);
break;
}
}
else
{
ant = atual;
atual = atual->prox;
}
}while (atual != lista->inicio);
}
}
int tirar_carta()
{
int i, num;
/* inicializar o gerador de números aleatórios */
srand(time(NULL));
for (i=0; i<8; i++)
{
/* para gerar números aleatórios de 0 a 7 e verificar se é primo. Retorna o primeiro num primo encontrado */
num = rand() % 8;
if((num == 2) || (num % 2 == 1 && num != 1))
{
// printf("O número tirado foi: %d", num);
return num;
break;
}
}
}
void jogar(lista *lista)
{
int num_carta = 5;//tirar_carta();
printf(" ");
printf("\n\n\t\tA carta tirada foi: %d", num_carta);
switch(num_carta)
{
case 2: /*Pula o próximo jogador e passa a vez para o seguinte.*/
{
no *atual, *ant, *prox;
atual = lista->atual;
ant = lista->anterior;
prox = lista->atual->prox;
lista->anterior = atual;
lista->atual = prox->prox;
/*printf("Carta de numero 2...\n");*/
printf("\nDescrição da carta: ''Pula o próximo jogador e passa a vez para o seguinte.''\n");
printf("\n\n");
printf("%s não jogará essa rodada\n", prox->nome);
printf("Agora é a vez do(a) Player >>>>> %s !\n\n", lista->atual->nome);
printf("\nlista inicio é: %s", lista->inicio->nome);
printf("\nlista fim é: %s", lista->fim->nome);
printf("\nLista Atual é: %s", lista->atual->nome);
printf("\nlista anterior é: %s\n", lista->anterior->nome);
}break;
case 3:/*Elimina o jogador atual.*/
{
no *remove, *atual, *ant, *prox;
remove = lista->atual;
prox = lista->atual->prox;
atual = lista->atual;
ant = lista->anterior;
printf("\nDescrição da carta: ''Elimina o jogador atual''\n");
printf("\n\n");
do
{
if(lista->atual == lista->inicio)
{
printf("O Player %s foi eliminado do jogo! \n", atual->nome);
lista->inicio = lista->atual->prox;
lista->atual = lista->atual->prox;
free(atual);
lista->fim->prox = lista->inicio;
}
else if(lista->atual == lista->fim)
{
ant->prox = lista->inicio;
lista->anterior = lista->atual;
lista->atual = lista->atual->prox;
free(atual);
lista->fim = ant;
lista->fim->prox = lista->inicio;
}
else
{
printf("O Player %s foi eliminado do jogo! \n", atual->nome);
ant->prox = atual->prox;
lista->anterior = lista->atual;
lista->atual = atual->prox;
free(atual);
}
printf("\n");
printf("\t\tAgora é a vez do Player >>> %s \n\n", prox->nome);
printf("\nlista inicio é: %s", lista->inicio->nome);
printf("\nlista fim é: %s", lista->fim->nome);
printf("\nLista Atual é: %s", lista->atual->nome);
if (lista->anterior == NULL)
{
printf("\nO Player anterior foi eliminado ou esta é a primeira rodada");
}else{
printf("\nlista anterior é: %s\n", lista->anterior->nome);
}
ant = atual;
atual = atual->prox;
}while(atual =! lista->inicio);
}break;
case 5: /*Elimina o terceiro jogador contado a partir do jogador atual.*/
{
no *atual, *ant, *proximo, *eliminado, *aux;
/*atual = (no *)malloc(sizeof(no));
ant = (no *)malloc(sizeof(no));
proximo = (no *)malloc(sizeof(no));
eliminado = (no *)malloc(sizeof(no));*/
atual = lista->atual;
ant = NULL;
proximo = lista->atual->prox;
eliminado = proximo->prox;
aux = lista->atual->prox;
//system("cls");
printf("\n\nDescrição da Carta: ''Elimina o terceiro jogador contado a partir do jogador atual.''\n");
printf("\n\nPlayer atual: %s \n", lista->atual->nome);
printf("\n\nPlayer ELIMINADO: %s\n\n", eliminado->nome);
printf("\n");
if (atual == lista->inicio)
{
printf("\nO Player %s foi eliminado do jogo! \n", atual->nome);
lista->inicio = lista->inicio->prox;
lista->atual = lista->atual->prox;
free(eliminado);
break;
}
else
{
if(atual == lista->fim)
{
lista->fim = proximo;
proximo->prox = lista->inicio;
}
/*refazendo encadeamento*/
printf("\nO Player %s foi eliminado do jogo! \n", atual->nome);
proximo->prox = eliminado->prox;
free(eliminado);
lista->anterior = lista->atual;
lista->atual = lista->atual->prox;
break;
}
printf("\n\n\t\tPlayer Atual é >>> %s ", atual->nome);
printf("\nlista Inicio é: %s", lista->inicio->nome);
printf("\nlista Fim é: %s", lista->fim->nome);
printf("\nLista Atual é: %s", lista->atual->nome);
if (lista->anterior == NULL)
{
printf("\nO Player anterior foi eliminado ou esta é a primeira rodada");
}else{
printf("\nlista anterior é: %s\n", lista->anterior->nome);
}
printf("\n\t\tAgora é a vez do Player >>>> %s\n", lista->atual->nome);
}break;
case 7: /*Elimina o jogador da rodada anterior (o jogador que tirou a carta antes).*/
{
no *atual, *ant, *prox, *removido, *aux, *ant_remove, *atual_remove;
atual = lista->atual;
ant = lista->anterior;
prox = lista->atual->prox;
ant_remove = ant;
atual_remove = atual;
printf("\nDescrição da Carta: ''Elimina o jogador da rodada anterior (o jogador que tirou a carta antes)''\n");
printf("\nJogador atual: %s \n\n", atual->nome);
printf("\nJogador anterior: %s \n\n", ant->nome);
if(atual == lista->inicio)
{
printf("\n\nCarta sem valor nesta rodada! \n\nÉ a vez do Jogador >>> %s\n\n", prox);
lista->anterior = atual;
lista->atual = atual->prox;
break;
}
do
{
ant_remove = ant_remove->prox;
}while(ant_remove != ant );
removido = ant_remove;
if(removido == lista->inicio)
{
lista->inicio = lista->inicio->prox;
lista->anterior = atual;
lista->atual = atual->prox;
}
else if(removido == lista->fim)
{
lista->fim = lista->fim->prox;
lista->anterior = atual;
lista->atual = atual->prox;
}
else
{
ant_remove->prox = ant->prox;
}
printf("\nlista inicio é: %s", lista->inicio->nome);
printf("\nlista fim é: %s", lista->fim->nome);
printf("\nLista Atual é: %s", lista->atual->nome);
printf("\nlista anterior é: %s\n", lista->anterior->nome);
}break;
}
}
int main()
{
char nome_remove[15];
int x, i, qtd_jog;
lista lista;
inicia_lista(&lista);
setlocale(LC_ALL, "Portuguese");
no *ini, *fim, *ant, *primeiro;
ini=(no *)malloc(sizeof(no));
fim=ini;
printf("\t\t\t Jogo De Cartas");
printf("\n\t\t\t--- Primo's ---");
printf("\nQuantidade de Player's: ");
scanf("%d", &qtd_jog);
for(i = 0; i<qtd_jog; i++)
{
inserir_jogador(&lista, i);
}
primeiro = (no *)malloc(sizeof(no));
primeiro = lista.inicio;
lista.atual = lista.inicio;
lista.anterior = NULL;
int opcao;
printf("\n\n");
printf("\t\t\--------------- Jogo Iniciado ---------------\n\n");
printf(" \n\t\t O primeiro a Jogar é o(a) player >>> %s <<<\n\n", lista.atual);
do
{
if(lista.inicio == lista.fim)
{
printf("\n\n\t\t\t********* Fim do Jogo !!! *********");
printf("\n\t\tO vencedor foi o Player >>>>>>>>>>> %s <<<<<<<<<<<\n\n", lista.inicio->nome);
}
printf("\t\t\t------------------------\n");
printf("\t\t\t----- MENU DO JOGO -----\n");
printf("\t\t\t------------------------\n");
printf(" \t\t\t6 - Jogar\n");
printf(" \t\t\t2 - Exibir jogadores\n");
printf(" \t\t\t3 - Remover jogadores\n");
printf(" \t\t\t0 - Sair do Jogo\n");
printf(" \t\t\tOpção: ");
scanf("%d", &opcao);
switch (opcao)
{
case 2:
printf("\n\n");
printf("Players: ");
imprimir_jogadores(&lista);
printf("\n\n");
break;
case 3:
remover_jogador(&lista);
break;
case 0:
break;
case 6:
{
/* imprime a lista de jogadores*/
printf("\n\n");
printf("Players: ");
imprimir_jogadores(&lista);
printf("\n\n");
/* executa função jogar que tira uma carta aleatória e realiza oq a carta determina*/
jogar(&lista);
/* imprime a lista de jogadores*/
printf("\n\n");
printf("Players: ");
imprimir_jogadores(&lista);
printf("\n\n");
}break;
default: printf("\t\tOpção invalida\n");
}
}while (opcao != 0);
return 0;
}
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
firefox nao guarda meus logins nos sites (1)
Instalar debian testing (13) "por cima" do debian 12 (2)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (1)