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;
}
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Quebra de linha na data e hora no Linux Mint
Organizando seus PDF com o Zotero
tentando instalar em um notebook antigo o Linux LegacyOS_2023... [RESO... (8)
Problema com Conexão Outlook via Firewall (OpenSUSE) com Internet Fibr... (5)