Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h> #include<conio.h> #include<ctype.h> struct lista{ int elixir, cod; //declaração do elixir char carta[25]; //declaração da string carta struct lista *prox; //ponteiro para proximo struct lista *cabeca; //ponteiro para guarda o ponteiro do cabeça }; typedef struct lista Lista; //------------------------------\\------------------------- void *insere(Lista *l, int i, char carta[15], int p){ //função para inserir as cartas na lista encadeada Lista *novo; //variavel aux do tipo lista novo = (Lista*) malloc(sizeof(Lista)); //alocando memoria strcpy(novo->carta, carta); //copiando o nome da carta novo->cod = p; //copiando o codigo da carta novo->elixir = i; //copiando o elixir da carta novo->prox = NULL; //apontando o prox para NULL, indicando o fim da lista novo->prox = l; //atribuindo o valor do cabeça, para novo prox return novo; //retornando aux } //-------------------------------\\-------------------------------- Lista *tiraPrimeiro(Lista* list, int *elixir){ //função para tirar exclusivamente o primeiro da lista Lista* aux = list->cabeca; //auxiliar do tipo Lista int i; //variavel i if(*elixir>=list->elixir){ //condição para verificar se tem elixir disponivel *elixir = *elixir - list->elixir; //reduzindo o elixir for(i=0;i<=8;i++, aux=aux->prox){ //laço para varrer a lista if(aux->prox == NULL){ //condição para achar o ultimo da lista aux->prox = list->cabeca; //apontando o ultimo para o prox do cabeça(primeiro) aux = list->cabeca; //apontando o aux ao cabeça do list list->cabeca = aux->prox; //apontando o cabeça para o prox do "primeiro" aux->prox = NULL; //apontando o "primeiro" para NULL break; } } } else{ //se não tiver elixir suficente entra no else printf("Nao tem elixir suficiente!!\n"); Beep(1000,100); Beep(900,100); getch(); system("cls"); } } //--------------------------------\\------------------------------------ void *tiraCartas(Lista* list, int op, int *elixir){ //função para tirar cartas 2, 3 ,4 Lista* aux = list->cabeca; //auxiliar do tipo Lista Lista* p = list->cabeca; //auxiliar do tipo Lista Lista* k = list->cabeca; //auxiliar do tipo Lista int j=0; op-=3; while(j<=op){ //laço para varrer o laço if(*elixir>=list->elixir){ //condição para verificar se tem elixir disponivel *elixir = *elixir - list->elixir; //reduzindo o elixir p=p->prox; //apontando o p ao prox do proprio p aux=aux->prox; //apontando o aux ao prox do proprio aux } else{ //se não tiver elixir suficente entra no else printf("Nao tem elixir suficiente!!\n"); Beep(1000,100); Beep(900,100); getch(); system("cls"); return; } j++; } aux=aux->prox; //apontando o aux ao prox do proprio aux for(j=0;j<8;j++,k=k->prox){ //laço para varrer a lista if(k->prox == NULL){ //condição para achar o ultimo da lista if(*elixir>=list->elixir){ //condição para verificar se tem elixir disponivel *elixir = *elixir - list->elixir; //reduzindo o elixir k->prox = p->prox; //apontando o prox do k ao prox do p p->prox = aux->prox; //apontando o prox do p ao prox do aux aux->prox = NULL; //apontando aux do prox para NULL, neste momento ele vira o ultimo da lista } else{ //se não tiver elixir suficente entra no else printf("Nao tem elixir suficiente!!\n"); Beep(1000,100); Beep(900,100); getch(); system("cls"); return; } } } } //------------------------------\\-------------------------------------- void imprime (Lista *l){ //função para imprimir a lista system("color e1"); Lista *p; // auxiliar do tipo Lista int i=1; //declaração da varivel i = 1 printf("*********************Cartas*********************\n\n"); for(p=l->cabeca;p!=NULL;p=p->prox){ //laço para varrer a lista if(i<5){ //condição para imprimir as primeiras 4 cartas da lista printf(" Opcao %d: Elixir %d, carta ", i, p->elixir); puts(p->carta); printf("\n"); } else{ //para imprimir os ultimas 4 cartas da lista printf(" Carta em espera: Elixir %d, carta ", p->elixir); puts(p->carta); printf("\n"); } i++; //incremento do i } printf("\n"); } //-------------------------------\\----------------------------------- void recadoInicial(){ printf("***************Bem-vindo ao Crash Royale***************\n\n"); printf(" O jogo funciona da seguinte forma:\n"); //Avisos sobre o jogo printf(" -Voce pode utilizar apenas as quatro primeiras cartas;\n"); printf(" -O total de elixir aumenta toda vez que aumenta o elixir disponivel;\n"); printf(" -Quando o total de elixir chegar a 20 o programa encerra automaticamente;\n"); printf(" -Verefique seu elixir disponivel para poder selecionar uma carta.\n\n"); printf(" -------Bom jogo!-------\n\n"); printf("Aperte 'enter' para comecar o jogo...\n"); getch(); system("cls"); } //-------------------------------\\----------------------------------- void fimJogo(){ //função para encerrar o jogo system("cls"); system("color 47"); //cor de fundo printf("*************************************\n"); printf("*************************************\n"); printf("**********Encerrando o jogo**********\n"); printf("*************************************\n"); printf("*************************************"); Beep(1400,100); //beep para finalizar o jogo Beep(1500,200); Beep(1000,100); Beep(1100,200); Beep(700,100); Beep(800,200); Beep(400,100); Beep(500,200); exit(0); } //-------------------------------\\----------------------------------- void configtela(){ //função que configura o tamanho da tela COORD outbuff; HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleScreenBufferSize(hConsole, outbuff); SMALL_RECT windowSize = {0, 0, 74, 25}; SetConsoleWindowInfo(hConsole, TRUE, &windowSize); } //-------------------------------\\----------------------------------- main(){ //função principal configtela(); //configura o tamanho da tela system("color e1"); //cor de fundo int op; //declaração de op int elixir = 3; //declaração do elixir = 3 int cont=0; recadoInicial(); //tele inicial Beep(800,50); //beep para iniciar o jogo Beep(1000,50); Beep(1200,100); Beep(1000,50); Beep(800,50); Lista *l = NULL; //iniciando o cabeça da lista l = insere(l, 6, "Principe-das-trevas.", 8); //inserindo as cartas na lista l = insere(l, 4, "Arqueiras.", 7); l = insere(l, 5, "Mago de Gelo", 6); l = insere(l, 3, "Mineiro.", 5); l = insere(l, 5, "Gigante-Real.", 4); l = insere(l, 3, "Princesa.", 3); l = insere(l, 4, "Lava Hound.", 2); l = insere(l, 2, "Esqueleto-Gigante.", 1); l->cabeca = l; //copiando o endereço do cabeça da lista for(;;){ //loop infinito imprime(l); //chama função para imprimir a lista if (_kbhit()){ //condição para caso o usuario não digite nada ele fica atualizando char c = _getch(); printf("Digite uma opcao de carta:\n"); scanf("%d", &op); switch(op){ case 1:{ tiraPrimeiro(l, &elixir); //função para tirar exclusivamente o primeiro da lista break; } case 2:{ tiraCartas(l, op, &elixir); //função para mandar a carta para fim da lista break; } case 3:{ tiraCartas(l, op, &elixir); //função para mandar a carta para fim da lista break; } case 4:{ tiraCartas(l, op, &elixir); //função para mandar a carta para fim da lista break; } default:{ //caso o usuario digite algo que não for as opções printf("Opcao invalida!!"); getch(); break; } } } else{ int r; for(r=0;r<1;r++){ printf("\n\n Elixir disponivel: %d\n", elixir); //mostra elixir printf(" Total de elixir: %d\n", cont); printf(" Aperte 'enter' para digitar uma carta...\n"); fflush(stdout); elixir++; //incremento do elixir cont++; //incremento do total de elixir; if(elixir==11){ //condição para manter o elixir sempre em 10 elixir--; } if(cont==20){ //condição para encerramento do jogo fimJogo(); } _sleep(3000); //pausa de 3 segundos Beep(1200,50); //beep para cada elixir incrementado } } system("cls"); //limpa tela } free(l); }
Compartilhar