Buscar

crashRoyale

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);
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando

Outros materiais