Esse jogo foi feito em 2009 durante a disciplina de Introdução a Ciência da Computação I.
Foi feito usando Windows e Dev-C++.
Não há garantia de que funcione. Se funcionar provavelmente deve estar muito bugado.
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <time.h> | |
| #include "phynal.h" | |
| void novojogo(player *info) | |
| {//procedimento ao se iniciar um novo jogo | |
| system("cls"); | |
| printf("Digite o nome do seu personagem: "); | |
| gets(info->nome); | |
| fflush(stdin); | |
| info->classe = 0; | |
| while(info->classe == 0) | |
| { | |
| printf("\nEscolha a classe que voce deseja ser:\n"); | |
| printf("1. Guerreiro.\n"); | |
| printf("2. Mago.\n"); | |
| printf("3. Gatuno.\n"); | |
| scanf("%d",&info->classe); | |
| if (info->classe > 3 || info->classe <1) | |
| { | |
| printf("\nDigite um numero de 1 a 3!"); | |
| info->classe = 0; | |
| printf("\n\nAperte uma tecla para continuar"); | |
| getch(); | |
| system("cls"); | |
| } | |
| } | |
| fflush(stdin); | |
| printf("\nAperte uma tecla para continuar"); | |
| getch(); | |
| variaveis_inicio(info);//ver header | |
| system("cls"); | |
| } | |
| void salvar_jogo(player info) | |
| { | |
| FILE *arq; | |
| system("cls"); | |
| arq = fopen("player.pp","a+"); | |
| if (!fwrite(&info, sizeof(player), 1, arq)) | |
| printf("O jogo nao pode ser salvo!"); | |
| else | |
| printf("Jogo salvo!"); | |
| fclose(arq); | |
| printf("\n\nAperte uma tecla para voltar ao menu!"); | |
| getch(); | |
| system("cls"); | |
| } | |
| int itens(player *info, item tnfo, monster mnfo,int *hp,int *mp,int hpm,int mpm) | |
| { | |
| FILE *arq; | |
| int i, len, aux, j=1, opcao, cura; | |
| len = strlen(info->nome); | |
| arq = fopen("itens.pp","r"); | |
| system("cls"); | |
| printf("%s:",info->nome); | |
| for(i=0;i<35-len;i++) | |
| printf(" "); | |
| printf("%s:\n",mnfo.nome); | |
| printf("HP: %d HP: %d\n",hp, hpm); | |
| printf("MP: %d MP: %d\n",mp, mpm); | |
| printf("Level: %d Level: %d\n",info->level, mnfo.level); | |
| printf("Seu turno!!!\n\n"); | |
| printf("Escolha o que voce vai fazer:\n"); | |
| printf("Atacar\n"); | |
| printf("Usar magia/tecnica\n"); | |
| printf("Usar itens\n"); | |
| while(fread(&tnfo, sizeof(item),1,arq) != 0) | |
| { | |
| for(i=5;i<6;i++) | |
| { | |
| if(info->equip[i] == tnfo.codigo) | |
| { | |
| printf(" -%d. %s\n",j,tnfo.nome); | |
| j++; | |
| aux = 1; | |
| } | |
| } | |
| } | |
| printf(" -%d. Voltar.",j+1); | |
| printf("Defender\n"); | |
| printf("Fugir\n"); | |
| if(opcao = j+1) | |
| return 0; | |
| if(aux == 1) | |
| scanf("%d",&opcao); | |
| else | |
| { | |
| printf("Voce nao possui itens!\n"); | |
| printf("Aperte uma tecla para escolher outra acao."); | |
| getch(); | |
| system("cls"); | |
| return 0; | |
| } | |
| system("cls"); | |
| printf("%s:",info->nome); | |
| for(i=0;i<35-len;i++) | |
| printf(" "); | |
| printf("%s:\n",mnfo.nome); | |
| printf("HP: %d HP: %d\n",hp, hpm); | |
| printf("MP: %d MP: %d\n",mp, mpm); | |
| printf("Level: %d Level: %d\n",info->level, mnfo.level); | |
| printf("Seu turno!!!\n\n"); | |
| while(fread(&tnfo,sizeof(item),1,arq) != 0) | |
| { | |
| if(info->equip[5] > 0) | |
| { | |
| if(info->equip[5] == tnfo.codigo) | |
| { | |
| if(opcao == 1 && info[0].quantidade > 0) | |
| { | |
| if(*hp+tnfo.hpreg > info->hp) | |
| { | |
| cura = info->hp-*hp; | |
| *hp = info->hp; | |
| } | |
| else | |
| { | |
| *hp+=tnfo.hpreg; | |
| cura = tnfo.hpreg; | |
| } | |
| info->quantidade[0] -= 1; | |
| printf("Voce usou uma pocao e se curou em %d de vida\n",cura); | |
| } | |
| } | |
| if(info->equip[6] == tnfo.codigo) | |
| { | |
| if(opcao == 2 && info[1].quantidade > 0) | |
| { | |
| if(*mp+tnfo.mpreg > info->mp) | |
| { | |
| cura = info->mp-*mp; | |
| *mp = info->mp; | |
| } | |
| else | |
| { | |
| *mp+=tnfo.mpreg; | |
| cura = tnfo.mpreg; | |
| } | |
| info->quantidade[1] -= 1; | |
| printf("Voce usou uma pocao e recuperou %d de mana\n",cura); | |
| } | |
| } | |
| } | |
| else if(info->equip[5] == 0) | |
| { | |
| if(info->equip[6] == tnfo.codigo) | |
| { | |
| if(opcao == 1 && info[1].quantidade > 0) | |
| { | |
| if(*mp+tnfo.mpreg > info->mp) | |
| { | |
| cura = info->mp-*mp; | |
| *mp = info->mp; | |
| } | |
| else | |
| { | |
| *mp+=tnfo.mpreg; | |
| cura = tnfo.mpreg; | |
| } | |
| info->quantidade[1] -= 1; | |
| printf("Voce usou uma pocao e recuperou %d de mana\n",cura); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| void menuluta(player *info, skill snfo, monster mnfo, item tnfo) | |
| { | |
| char opcao; | |
| int dano=0,luta = 1, len,i, turno=0, danomonstro=0, hp, mp, hpm, mpm, defesa=0; | |
| FILE*arq; | |
| arq = fopen("monstros.pp","r"); | |
| len = strlen(info->nome); | |
| hp = info->hp; | |
| mp = info->mp; | |
| while (fread(&mnfo,sizeof(monster),1,arq) != 0) | |
| { | |
| if(info->luta == mnfo.codigo) | |
| break; | |
| } | |
| fclose(arq); | |
| hpm = mnfo.hp; | |
| mpm = mnfo.mp; | |
| if(info->vel > mnfo.vel) | |
| turno = 1; | |
| system("cls"); | |
| while(luta == 1) | |
| { | |
| while(turno == 1){ | |
| printf("%s:",info->nome); | |
| for(i=0;i<35-len;i++) | |
| printf(" "); | |
| printf("%s:\n",mnfo.nome); | |
| printf("HP: %d HP: %d\n",hp, hpm); | |
| printf("MP: %d MP: %d\n",mp, mpm); | |
| printf("Level: %d Level: %d\n",info->level, mnfo.level); | |
| printf("Seu turno!!!\n\n"); | |
| printf("Escolha o que voce vai fazer:\n"); | |
| printf("1. Atacar\n"); | |
| printf("2. Usar magia/tecnica\n"); | |
| printf("3. Usar itens\n"); | |
| printf("4. Defender\n"); | |
| printf("5. Fugir\n"); | |
| opcao = getch(); | |
| switch(opcao) | |
| { | |
| case '1': | |
| dano = danofisico(info, &mnfo); | |
| if(dano>=0) | |
| printf("Voce causou %d de dano no inimigo!\n",dano); | |
| getch(); | |
| turno--; | |
| system("cls"); | |
| break; | |
| case '2': | |
| dano = danotecnica(info,snfo,&hp,&mp,mnfo,hpm,mpm); | |
| if(dano>0) | |
| turno--; | |
| getch(); | |
| system("cls"); | |
| break; | |
| case '3': | |
| itens(info, tnfo, mnfo, &hp, &mp, hpm, mpm); | |
| break; | |
| case '4': | |
| defesa = defesaf(*info); | |
| printf("Voce defendeu!\n"); | |
| turno--; | |
| getch(); | |
| system("cls"); | |
| break; | |
| case '5': | |
| luta = fuga(*info, mnfo); | |
| turno--; | |
| break; | |
| default: system("cls");break; | |
| } | |
| if(dano>=0) | |
| hpm -= dano; | |
| } | |
| if(hpm<=0) | |
| { | |
| printf("Parabens! Voce ganhou a luta!\n"); | |
| printf("Ganhou %d de experiencia!\n",mnfo.exp); | |
| luta == 0; | |
| info->xp+=mnfo.exp; | |
| levelup(info); | |
| printf("Aperte uma tecla para voltar ao menu do jogo"); | |
| info->luta++; | |
| getch(); | |
| system("cls"); | |
| break; | |
| } | |
| if(turno == 0) | |
| { | |
| printf("%s:",info->nome); | |
| for(i=0;i<35-len;i++) | |
| printf(" "); | |
| printf("%s:\n",mnfo.nome); | |
| printf("HP: %d HP: %d\n",hp, hpm); | |
| printf("MP: %d MP: %d\n",mp, mpm); | |
| printf("Level: %d Level: %d\n",info->level, mnfo.level); | |
| printf("Turno do %s!\n\n",mnfo.nome); | |
| danomonstro = monstro(&mnfo, info, defesa, &hpm, &mpm); | |
| if(danomonstro>=0) | |
| { | |
| printf("Voce perdeu %d de vida!!!\n",danomonstro); | |
| hp-=danomonstro; | |
| } | |
| turno++; | |
| printf("\nAperte uma tecla para comecar sua vez!"); | |
| getch(); | |
| system("cls"); | |
| } | |
| if(hp<=0) | |
| { | |
| luta == 0; | |
| printf("Voce morreu!!!!!!!!! MORRAO!\n"); | |
| printf("Aperte uma tecla para voltar ao menu principal"); | |
| info->vida = 0; | |
| getch(); | |
| system("cls"); | |
| break; | |
| } | |
| } | |
| } | |
| void menujogo(skill snfo, player *info, monster mnfo, item tnfo)//menu que \E9 exibido antes de cada batalha | |
| { | |
| int opcao; | |
| system("cls"); | |
| while (info->vida == 1){ | |
| printf("Ola %s!\nVoce esta na luta %d!\nO que voce deseja fazer!?\n\n",info->nome,info->luta); | |
| printf("1. Lutar!!!\n"); | |
| printf("2. Verificar atributos.\n"); | |
| printf("3. Verificar tecnicas/magias.\n"); | |
| printf("4. Verificar itens/equipamentos.\n"); | |
| printf("5. Loja de itens/equipamentos.\n"); | |
| printf("6. Salvar jogo.\n"); | |
| printf("7. Voltar para o menu principal.\n"); | |
| printf("8. Sair.\n"); | |
| scanf("%d",&opcao); | |
| calcula_atributos(info);//ver header | |
| switch(opcao) | |
| { | |
| case 1: menuluta(info, snfo, mnfo, tnfo);break; | |
| case 2: exibe_atributos(*info);break;//ver header | |
| case 3: exibe_tecnicas(snfo, info);break;//ver header | |
| case 4: exibe_item(*info, tnfo);break; | |
| case 5: compra(info, tnfo);break; | |
| case 6: salvar_jogo(*info);break;//ver header | |
| case 7: info->vida = 0;system("cls");break;//gambiarra para sair do menu | |
| case 8: exit(1); | |
| default: system("cls");break; | |
| } | |
| } | |
| } | |
| void carregar_jogo(skill snfo, player info, monster mnfo, item tnfo) | |
| { | |
| FILE *arq; | |
| int i=1, aux=0; | |
| char opcao='a'; | |
| arq = fopen("player.pp","r"); | |
| system("cls"); | |
| while(fread(&info, sizeof(player), 1, arq) != 0) | |
| {//exibe a lista de todos os jogos salvos | |
| printf("Opcao %d:\n",i); | |
| printf("Nome do personagem: %s.\n", info.nome); | |
| i++; | |
| switch (info.classe) | |
| { | |
| case 1: printf("Classe: Guerreiro.\n");break; | |
| case 2: printf("Classe: Mago.\n");break; | |
| case 3: printf("Classe: Gatuno.\n");break; | |
| } | |
| printf("Level do personagem: %d.\n", info.level); | |
| while(opcao != 's' && opcao != 'n'){ | |
| printf("Voce deseja carregar este? (Tecle S, para sim, N para nao)\n\n"); | |
| opcao = getch(); | |
| if(opcao == 's') | |
| { | |
| aux = 1; | |
| break; | |
| } | |
| else if(opcao != 'n' && opcao != 's') | |
| printf("Aperte S ou N.\n"); | |
| } | |
| } | |
| if(aux == 0) | |
| { | |
| printf("Nao ha nenhum jogo para ser carregado!\n"); | |
| printf("\nAperte uma tecla para voltar ao menu"); | |
| } | |
| else if(aux == 1) | |
| { | |
| printf("Jogo carregado!!!\n\n"); | |
| printf("Aperte uma tecla para jogar"); | |
| } | |
| getch(); | |
| system("cls"); | |
| if(aux==1) | |
| menujogo(snfo, &info, mnfo, tnfo); | |
| //caso carregue ele vai para o menu do jogo, caso ocorra o contr\E1rio ele volta para o menu principal | |
| } | |
| void adiciona_tecnicas(skill snfo) | |
| {//fun\E7ao que adiciona as informa\E7\F5ess de t\E9cnicas para um arquivo (n\E3o dispon\EDvel para os usuarios) | |
| FILE *arq; | |
| system("cls"); | |
| arq = fopen("skills.pp", "a+"); | |
| printf("Digite o nome da skill: "); | |
| gets(snfo.nome); | |
| printf("Digite a descricao: "); | |
| gets(snfo.descricao); | |
| fflush(stdin); | |
| printf("Digite o codigo: "); | |
| scanf("%d", &snfo.codigo); | |
| printf("Digite o dano fisico: "); | |
| scanf("%d", &snfo.df); | |
| printf("Digite o dano magico: "); | |
| scanf("%d", &snfo.dm); | |
| printf("Digite o multiplicador: "); | |
| scanf("%f", &snfo.md); | |
| printf("Digite o custo de mana: "); | |
| scanf("%d", &snfo.mp); | |
| fflush(stdin); | |
| fwrite(&snfo, sizeof(skill), 1, arq); | |
| fclose(arq); | |
| printf("Apertai"); | |
| getch(); | |
| system("cls"); | |
| } | |
| void adiciona_monstros(monster mnfo) | |
| {//fun\E7ao que adiciona as informa\E7\F5es do monstro para um arquivo (n\E3o dispon\EDvel para os usuarios) | |
| FILE *arq; | |
| system("cls"); | |
| arq = fopen("monstros.pp", "a+"); | |
| printf("Digite o nome do monstro: "); | |
| gets(mnfo.nome); | |
| fflush(stdin); | |
| printf("Digite o codigo: "); | |
| scanf("%d", &mnfo.codigo); | |
| printf("Digite a experiencia dada em sua morte: "); | |
| scanf("%d",&mnfo.exp); | |
| printf("Digite o gold dado em sua morte: "); | |
| scanf("%d",&mnfo.gold); | |
| printf("Digite o HP: "); | |
| scanf("%d", &mnfo.hp); | |
| printf("Digite o MP: "); | |
| scanf("%d", &mnfo.mp); | |
| printf("Digite o level: "); | |
| scanf("%d", &mnfo.level); | |
| printf("Digite o ataque fisico: "); | |
| scanf("%f", &mnfo.ataf); | |
| printf("Digite o ataque magico: "); | |
| scanf("%f", &mnfo.atam); | |
| printf("Digite a defesa fisica: "); | |
| scanf("%f", &mnfo.deff); | |
| printf("Digite a defesa magica: "); | |
| scanf("%f", &mnfo.defm); | |
| printf("Digite a evasao: "); | |
| scanf("%f", &mnfo.eva); | |
| printf("Digite a precisao: "); | |
| scanf("%f", &mnfo.prec); | |
| printf("Digite a velocidade: "); | |
| scanf("%f", &mnfo.vel); | |
| fflush(stdin); | |
| fwrite(&mnfo, sizeof(monster), 1, arq); | |
| fclose(arq); | |
| printf("Apertai"); | |
| getch(); | |
| system("cls"); | |
| } | |
| void adiciona_item(item tnfo) | |
| {//fun\E7ao que adiciona as informa\E7\F5es do item para um arquivo (n\E3o dispon\EDvel para os usuarios) | |
| FILE *arq; | |
| system("cls"); | |
| arq = fopen("itens.pp", "a+"); | |
| printf("Digite o nome do item: "); | |
| gets(tnfo.nome); | |
| fflush(stdin); | |
| printf("Digite o codigo: "); | |
| scanf("%d", &tnfo.codigo); | |
| printf("Digite o preco do item: "); | |
| scanf("%d",&tnfo.custo); | |
| printf("Digite o HP que aumenta: "); | |
| scanf("%d", &tnfo.hp); | |
| printf("Digite o MP que aumenta: "); | |
| scanf("%d", &tnfo.mp); | |
| printf("Digite o HP que regenera: "); | |
| scanf("%d", &tnfo.hpreg); | |
| printf("Digite o MP que regenera: "); | |
| scanf("%d", &tnfo.mpreg); | |
| printf("Digite o ataque fisico: "); | |
| scanf("%d", &tnfo.ataf); | |
| printf("Digite o ataque magico: "); | |
| scanf("%d", &tnfo.atam); | |
| printf("Digite a defesa fisica: "); | |
| scanf("%d", &tnfo.deff); | |
| printf("Digite a defesa magica: "); | |
| scanf("%d", &tnfo.defm); | |
| printf("Digite a precisao: "); | |
| scanf("%d", &tnfo.prec); | |
| printf("Digite a velocidade: "); | |
| scanf("%d", &tnfo.vel); | |
| fflush(stdin); | |
| fwrite(&tnfo, sizeof(item), 1, arq); | |
| fclose(arq); | |
| printf("Apertai"); | |
| getch(); | |
| system("cls"); | |
| } | |
| void todas_tecnicas(skill snfo) | |
| {//exibe todas as informa\E7\F5ess de t\E9cnicas do arquivo (n\E3o dispon\EDvel para os usuarios) | |
| FILE *arq; | |
| int j=1; | |
| system("cls"); | |
| arq = fopen("skills.pp","r"); | |
| while(fread(&snfo, sizeof(skill), 1, arq) != 0) | |
| { | |
| printf("Tecnica %d:\n\n", j); | |
| printf("Nome: %s.\n", snfo.nome); | |
| printf("Codigo: %d.\n", snfo.codigo); | |
| printf("Descricao: %s.\n", snfo.descricao); | |
| printf("Multiplica o atributo principal em dano em %.2f vezes\n", snfo.md); | |
| printf("Adiciona de dano fisico: %d.\n", snfo.df); | |
| printf("Adiciona de dano magico: %d.\n", snfo.dm); | |
| printf("Custo de MP: %d.\n\n",snfo.mp); | |
| j++; | |
| } | |
| fclose(arq); | |
| getch(); | |
| system("cls"); | |
| } | |
| void todos_monstros(monster mnfo) | |
| {//exibe todas as informa\E7\F5es dos monstros do arquivo (n\E3o dispon\EDvel para os usuarios) | |
| FILE *arq; | |
| int j=1, dados; | |
| system("cls"); | |
| arq = fopen("monstros.pp","r"); | |
| while(dados = fread(&mnfo, sizeof(monster), 1, arq) != 0) | |
| { | |
| printf("Monstro %d:\n", j); | |
| printf("Nome: %s.\n", mnfo.nome); | |
| printf("Codigo: %d.\n", mnfo.codigo); | |
| printf("Experiencia: %d.\n",mnfo.exp); | |
| printf("HP: %d.\n", mnfo.hp); | |
| printf("MP: %d.\n", mnfo.mp); | |
| printf("Level: %d.\n", mnfo.level); | |
| printf("Ataque fisico: %.0f.\n", mnfo.ataf); | |
| printf("Ataque magico: %.0f.\n", mnfo.atam); | |
| printf("Defesa fisica: %.0f.\n", mnfo.deff); | |
| printf("Defesa magica: %.0f.\n", mnfo.defm); | |
| printf("Evasao: %.0f.\n", mnfo.eva); | |
| printf("Precisao: %.0f.\n", mnfo.prec); | |
| printf("Velocidade: %.0f.\n\n", mnfo.vel); | |
| j++; | |
| } | |
| fclose(arq); | |
| getch(); | |
| system("cls"); | |
| } | |
| void todos_item(item tnfo) | |
| {//exibe todas as informa\E7\F5es dos itens do arquivo (n\E3o dispon\EDvel para os usuarios) | |
| FILE *arq; | |
| int j=1, dados; | |
| system("cls"); | |
| arq = fopen("itens.pp","r"); | |
| while(dados = fread(&tnfo, sizeof(item), 1, arq) != 0) | |
| { | |
| printf("Item %d:\n", j); | |
| printf("Nome: %s.\n", tnfo.nome); | |
| printf("Codigo: %d.\n", tnfo.codigo); | |
| printf("Custo: %d.\n",tnfo.custo); | |
| printf("HP++: %d.\n", tnfo.hp); | |
| printf("MP++: %d.\n", tnfo.mp); | |
| printf("HP reg: %d.\n", tnfo.hpreg); | |
| printf("MP reg: %d.\n", tnfo.mpreg); | |
| printf("Ataque fisico: %.0f.\n", tnfo.ataf); | |
| printf("Ataque magico: %.0f.\n", tnfo.atam); | |
| printf("Defesa fisica: %.0f.\n", tnfo.deff); | |
| printf("Defesa magica: %.0f.\n", tnfo.defm); | |
| printf("Precisao: %.0f.\n", tnfo.prec); | |
| printf("Velocidade: %.0f.\n\n", tnfo.vel); | |
| j++; | |
| } | |
| fclose(arq); | |
| getch(); | |
| system("cls"); | |
| } | |
| int main() | |
| { | |
| char opcao; | |
| player info; | |
| monster mnfo; | |
| skill snfo; | |
| item tnfo; | |
| while(1)//menu pricipal | |
| { | |
| printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>vvvvvvvvvvvvvvv<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); | |
| printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Phynal Phantasm<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); | |
| printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>^^^^^^92^^^^^^^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); | |
| printf(" Menu principal\n\n"); | |
| printf(" 1. Comecar um novo jogo.\n"); | |
| printf(" 2. Carregar um jogo salvo.\n"); | |
| printf(" 3. Instrucoes do jogo.\n"); | |
| printf(" 4. Sair.\n"); | |
| //printf(" 5. Adicionar tecnicas.\n"); | |
| //printf(" 6. Adicionar monstros.\n"); | |
| //printf(" 7. Adicionar item.\n"); | |
| //printf(" 8. Exibir todos os monstros."); | |
| opcao = getch(); | |
| switch(opcao) | |
| { | |
| default: system("cls");break; | |
| case '1': novojogo(&info); menujogo(snfo, &info, mnfo, tnfo); break; | |
| case '2': carregar_jogo(snfo, info, mnfo, tnfo); break; | |
| case '4': exit(1); | |
| case '5': adiciona_tecnicas(snfo);break; | |
| case '6': adiciona_monstros(mnfo);break; | |
| case '7': adiciona_item(tnfo);break; | |
| case '8': todas_tecnicas(snfo);break; | |
| case '9': todos_monstros(mnfo);break; | |
| case '0': todos_item(tnfo);break; | |
| } | |
| } | |
| system("PAUSE"); | |
| return 0; | |
| } |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| typedef struct jogador | |
| { | |
| char nome[30];//nome do personagem | |
| int classe; //1: guerreiro. 2: mago. 3: gatuno. | |
| int luta;//ultima luta que o personagem parou! | |
| int gold;//dinheiro do personagem! | |
| int hp;//quantidade máxima de vida | |
| int mp;//quanidade máxima de energia, mana, o que seja. | |
| int vida;//1: vivo. 0: morto | |
| int level;//'nível' do personagem | |
| int xp;//experiência do personagem | |
| int skills[20]; //vetor que armazena o código de cada magia/técnica | |
| int forca;//força... | |
| int intel;//inteligência | |
| int agi; //agilidade | |
| int equip[10];//codigo dos equipamentos | |
| int quantidade[2];//quantidade de poções | |
| int equiphp;//começo dos bônus dos equipamentos | |
| int equipmp; | |
| int equipdeff; | |
| int equipdefm; | |
| int equipataf; | |
| int equipatam; | |
| int equipprec; | |
| int equipvel;//fim dos bônus dos equipamentos | |
| float deff; //defesa física | |
| float defm; //defesa mágico | |
| float ataf; //ataque físico | |
| float atam; //ataque mágico | |
| float eva; //evasão, causa o adversario errar seus ataques | |
| float prec; //precisão, evita erros de ataques em adversarios | |
| float vel; //velocidade com que passa o turno do jogador | |
| }player; | |
| typedef struct monstro | |
| { | |
| char nome[30]; | |
| int codigo;//código do monstro que corresponde a 'luta' do personagem | |
| int exp;//experiência que o monstro dá ao jogador quando morre | |
| int gold;//dinheiro que o monstro dá ao jogador quando morre | |
| int hp; | |
| int mp; | |
| int level; | |
| float deff; | |
| float defm; | |
| float ataf; | |
| float atam; | |
| float eva; | |
| float prec; | |
| float vel; | |
| }monster; | |
| typedef struct tecnicas | |
| { | |
| char nome[30]; | |
| char descricao[100]; | |
| int codigo;//código de cada tencica | |
| int df; //dano físico (para tecnicas) | |
| int dm; //dano mágico (para magias) | |
| float md; //multiplicador de dano | |
| int mp; //custo de mp para usar tal técnica | |
| }skill; | |
| typedef struct itens | |
| { | |
| char nome[30]; | |
| int codigo; | |
| int custo; | |
| int hp; | |
| int mp; | |
| int hpreg; | |
| int mpreg; | |
| int quantidade; | |
| int ataf; | |
| int atam; | |
| int deff; | |
| int defm; | |
| int prec; | |
| int vel; | |
| }item; | |
| void calcula_atributos(player *info)//calcula os atributos | |
| { | |
| if(info->level >= 10)//após o lvl 10 os personagens ganham atributos mais rapidamente | |
| { | |
| info->ataf = (0.53*info->forca + 0.42*info->agi + 0.05*info->intel)*(info->level/9); | |
| info->atam = (0.05*info->forca + 0.05*info->agi + 0.9*info->intel)*(info->level/10); | |
| info->deff = (0.88*info->forca + 0.1*info->agi + 0.02*info->intel)*(info->level/10); | |
| info->defm = (0.1*info->forca + 0.1*info->agi + 0.8*info->intel)*(info->level/11); | |
| info->prec = (5*info->forca + 80*info->agi + 15*info->intel)*(info->level/10)/10; | |
| info->eva = (85*info->agi + 15*info->intel)*(info->level/11)/10; | |
| info->vel = (0.9*info->agi + 0.1*info->intel)*(info->level/5); | |
| } | |
| else | |
| { | |
| info->ataf = (0.65*info->forca + 0.30*info->agi + 0.05*info->intel); | |
| info->atam = (0.05*info->forca + 0.05*info->agi + 0.9*info->intel); | |
| info->deff = (0.88*info->forca + 0.1*info->agi + 0.02*info->intel); | |
| info->defm = (0.1*info->forca + 0.1*info->agi + 0.8*info->intel); | |
| info->prec = (5*info->forca + 80*info->agi + 15*info->intel)/10; | |
| info->eva = (85*info->agi + 15*info->intel)/10; | |
| info->vel = (0.9*info->agi + 0.1*info->intel); | |
| } | |
| if(info->vel > 250) | |
| info->vel = 250;//velocidade máxima | |
| } | |
| void variaveis_inicio(player *info) | |
| {//inicia as variáveis no caso de começo do jogo sem carregamento | |
| int i; | |
| for(i=0;i<20;i++)//zerando os códigos das técnicas | |
| { | |
| if(i<10) | |
| info->equip[i] = 0; | |
| if(i<2) | |
| info->quantidade[i] = 0; | |
| info->skills[i] = 0; | |
| } | |
| if(info->classe == 1)//'informações' dos guerreiros | |
| { | |
| info->forca = 5; | |
| info->intel = 2; | |
| info->agi = 3; | |
| info->hp = 35; | |
| info->mp = 10; | |
| } | |
| else if(info->classe == 2)//'informações' dos magos | |
| { | |
| info->forca = 2; | |
| info->intel = 5; | |
| info->agi = 2; | |
| info->hp = 25; | |
| info->mp = 20; | |
| info->skills[0] = 201;//magos são os únicos que começam com magia! | |
| } | |
| else if(info->classe == 3)//'informações' dos gatunos | |
| { | |
| info->forca = 3; | |
| info->intel = 2; | |
| info->agi = 5; | |
| info->hp = 30; | |
| info->mp = 15; | |
| } | |
| info->xp = 0; | |
| info->level = 1; | |
| info->vida = 1; | |
| info->luta =1; | |
| info->gold = 50; | |
| //inicializado experiência, nível e 'vida', 'luta' e dinheiro | |
| info->equiphp=0; | |
| info->equipmp=0; | |
| info->equipdeff=0; | |
| info->equipdefm=0; | |
| info->equipataf=0; | |
| info->equipatam=0; | |
| info->equipvel=0; | |
| info->equipprec=0; | |
| //inicializado os bonus de equipamento | |
| } | |
| void exibe_atributos(player info) | |
| //presente no menu do jogo, que exibe as características do personagem apos cada batalha | |
| { | |
| system("cls"); | |
| switch (info.classe) | |
| { | |
| case 1: printf("Classe: Guerreiro\n");break; | |
| case 2: printf("Classe: Mago\n");break; | |
| case 3: printf("Classe: Gatuno\n");break; | |
| } | |
| printf("Level: %d.\n", info.level); | |
| printf("Experiencia: %d.\n", info.xp); | |
| printf("Gold: %d.\n",info.gold); | |
| printf("HP: %d + %d.\n", info.hp,info.equiphp); | |
| printf("MP: %d + %d.\n", info.mp,info.equipmp); | |
| printf("Forca: %d.\n", info.forca); | |
| printf("Inteligencia: %d.\n", info.intel); | |
| printf("Agilidade: %d.\n", info.agi); | |
| printf("Ataque fisico: %.0f. + %d\n", info.ataf, info.equipataf); | |
| printf("Ataque magico: %.0f. + %d\n", info.atam, info.equipatam); | |
| printf("Defesa fisica: %.0f. + %d\n", info.deff, info.equipdeff); | |
| printf("Defesa magica: %.0f. + %d\n", info.defm, info.equipdefm); | |
| printf("Precisao: %.0f + %d.\n", info.prec, info.equipprec); | |
| printf("Evasao: %.0f.\n", info.eva); | |
| printf("Velocidade: %.0f. + %d\n", info.vel, info.equipvel); | |
| printf("\n\nAperte uma tecla para voltar ao menu."); | |
| getch(); | |
| system("cls"); | |
| } | |
| void exibe_tecnicas(skill snfo, player *info) | |
| {//exibe as técnicas que o personagem possui | |
| FILE *arq; | |
| int dados, i, j=1, aux = 0; | |
| arq = fopen("skills.pp","r");//arquivo que possui todas as técnicas | |
| system("cls"); | |
| printf("Lista de tecnicas:\n\n"); | |
| while (dados = fread(&snfo, sizeof(skill), 1, arq) != 0) | |
| { | |
| for(i=0;i<20;i++) | |
| { | |
| if(info->skills[i] == snfo.codigo) | |
| { | |
| printf("Tecnica %d:\n\n", j); | |
| printf("Nome da tecnica: %s.\n", snfo.nome); | |
| printf("Descricao: %s.\n", snfo.descricao); | |
| printf("Multiplica o atributo principal em dano em: %.2f vezes.\n", snfo.md); | |
| printf("Adiciona de dano fisico: %d.\n", snfo.df); | |
| printf("Adiciona de dano magico: %d.\n", snfo.dm); | |
| printf("Custo de MP: %d.\n\n",snfo.mp); | |
| aux=1; | |
| j++; | |
| } | |
| } | |
| } | |
| if(aux==0) | |
| printf("Voce nao possui tecnicas ainda!\n\n"); | |
| printf("Aperte uma tecla para voltar ao menu"); | |
| getch(); | |
| fclose(arq); | |
| system("cls"); | |
| } | |
| void levelup(player *info) | |
| { | |
| int exp[100], i; | |
| exp[0] = 15; | |
| exp[1] = 40; | |
| exp[2] = 70; | |
| exp[3] = 110; | |
| exp[4] = 160; | |
| exp[5] = 220; | |
| exp[6] = 300; | |
| exp[7] = 350; | |
| exp[8] = 420; | |
| exp[9] = 500; | |
| exp[10] = 600; | |
| exp[11] = 750; | |
| exp[12] = 900; | |
| exp[13] = 1050; | |
| exp[14] = 1300; | |
| exp[15] = 1650; | |
| exp[16] = 2100; | |
| exp[17] = 2600; | |
| exp[18] = 3500; | |
| exp[19] = 4500; | |
| exp[20] = 6000; | |
| exp[21] = 7000; | |
| exp[22] = 10000; | |
| exp[23] = 13500; | |
| exp[24] = 17000; | |
| exp[25] = 25000; | |
| exp[26] = 35000; | |
| exp[27] = 50000; | |
| exp[28] = 70000; | |
| exp[29] = 100000; | |
| //'tabela' de experiência | |
| if(info->xp >= exp[info->level-1]) | |
| { | |
| info->level++; | |
| printf("\nAgora voce esta no level %d!\n\n",info->level); | |
| switch(info->classe) | |
| { | |
| case 1: | |
| if(info->level%10 == 0) | |
| info->forca+=10; | |
| else | |
| info->forca+=5; | |
| info->agi+=2; | |
| if(info->level%2 == 0) | |
| { | |
| info->intel+=2; | |
| info->mp+=10; | |
| } | |
| else | |
| { | |
| info->intel++; | |
| info->mp+=5; | |
| } | |
| info->hp+=20; | |
| //começo da adição de novas skills | |
| for(i=0;i<20;i++) | |
| { | |
| if(info->skills[i] == 0) | |
| break; | |
| } | |
| if(info->level%5 == 0) | |
| info->skills[i] = info->classe*100 + (i+1); | |
| //final da adiçãode novas skills | |
| break; | |
| case 2: | |
| if(info->level%2 == 0) | |
| info->forca+=2; | |
| else | |
| info->forca +=1; | |
| info->agi+=2; | |
| if(info->level%10 == 0) | |
| { | |
| info->intel+=10; | |
| info->mp+=40; | |
| } | |
| else | |
| { | |
| info->intel+=5; | |
| info->mp+=20; | |
| } | |
| info->hp+=10; | |
| for(i=0;i<20;i++) | |
| { | |
| if(info->skills[i] == 0) | |
| break; | |
| } | |
| if(info->level%4 == 0) | |
| info->skills[i] = info->classe*100 + (i+1); | |
| break; | |
| case 3: | |
| if(info->level%2 == 0) | |
| info->forca+=3; | |
| else | |
| info->forca +=2; | |
| if(info->level%10 == 0) | |
| info->agi+=10; | |
| else | |
| info->agi+=5; | |
| if(info->level%2 == 0) | |
| { | |
| info->intel++; | |
| info->mp+=10; | |
| } | |
| else | |
| { | |
| info->intel+=2; | |
| info->mp+=5; | |
| } | |
| for(i=0;i<20;i++) | |
| { | |
| if(info->skills[i] == 0) | |
| break; | |
| } | |
| info->hp+=15; | |
| if(info->level%5 == 0) | |
| info->skills[i] = info->classe*100 + (i+1); | |
| break; | |
| } | |
| } | |
| } | |
| int danotecnica(player *info, skill snfo, int *hp, int *mp, monster mnfo, int hpm, int mpm) | |
| { | |
| int dano=0,i,aux=0,codigo,j=1,cura=0,danof=0,ataque, len; | |
| FILE *arq; | |
| len = strlen(info->nome); | |
| arq = fopen("skills.pp","r"); | |
| system("cls"); | |
| switch(info->classe) | |
| { | |
| case 1: ataque = info->ataf;break; | |
| case 2: ataque = info->ataf;break; | |
| case 3: ataque = info->atam;break; | |
| } | |
| printf("%s:",info->nome); | |
| for(i=0;i<35-len;i++) | |
| printf(" "); | |
| printf("%s:\n",mnfo.nome); | |
| printf("HP: %d HP: %d\n",hp, hpm); | |
| printf("MP: %d MP: %d\n",mp, mpm); | |
| printf("Level: %d Level: %d\n",info->level, mnfo.level); | |
| printf("Seu turno!!!\n\n"); | |
| printf("Escolha o que voce vai fazer:\n"); | |
| printf("Atacar\n"); | |
| printf("Usar magia/tecnica\n"); | |
| while(fread(&snfo, sizeof(skill),1,arq) != 0) | |
| { | |
| for(i=0;i<20;i++) | |
| { | |
| if(info->skills[i] == snfo.codigo) | |
| { | |
| printf(" -%d. %s.\n",j,snfo.nome); | |
| j++; | |
| aux = 1; | |
| } | |
| } | |
| } | |
| printf(" -%d. Voltar.\n", j+1); | |
| printf("Usar itens\n"); | |
| printf("Defender\n"); | |
| printf("Fugir\n"); | |
| if(codigo == j+1) | |
| return 0; | |
| if(aux==1) | |
| scanf("%d",&codigo); | |
| else | |
| { | |
| printf("Voce ainda nao possui magias!\n"); | |
| printf("Aperte uma tecla para escolher outra acao"); | |
| getch(); | |
| system("cls"); | |
| return 0; | |
| } | |
| system("cls"); | |
| fseek(arq,0,SEEK_SET); | |
| while(fread(&snfo,sizeof(skill),1,arq) != 0) | |
| { | |
| if ((info->classe*100) + codigo == 203) | |
| { | |
| if(*hp+85 > info->hp) | |
| { | |
| cura = info->hp-*hp; | |
| *hp = info->hp; | |
| } | |
| else | |
| { | |
| *hp+=85; | |
| cura = 85; | |
| } | |
| printf("%s:",info->nome); | |
| for(i=0;i<35-len;i++) | |
| printf(" "); | |
| printf("%s:\n",mnfo.nome); | |
| printf("HP: %d HP: %d\n",hp, hpm); | |
| printf("MP: %d MP: %d\n",mp, mpm); | |
| printf("Level: %d Level: %d\n",info->level, mnfo.level); | |
| printf("Seu turno!!!\n\n"); | |
| printf("Voce se curou! Ganhou %d de vida!\n",cura); | |
| } | |
| else if((info->classe*100) + codigo == 307) | |
| { | |
| dano = 1000; | |
| *hp -= 0.15*info->hp; | |
| printf("%s:",info->nome); | |
| for(i=0;i<35-len;i++) | |
| printf(" "); | |
| printf("%s:\n",mnfo.nome); | |
| printf("HP: %d HP: %d\n",hp, hpm); | |
| printf("MP: %d MP: %d\n",mp, mpm); | |
| printf("Level: %d Level: %d\n",info->level, mnfo.level); | |
| printf("Seu turno!!!\n\n"); | |
| printf("Voce perde %d de vida, mas causa %d de dano no inimigo.\n",0.15*info->hp,dano); | |
| } | |
| else if( ( (info->classe*100) + codigo) == snfo.codigo) | |
| { | |
| if(*mp >= snfo.mp) | |
| { | |
| danof = snfo.df + snfo.dm + ataque*snfo.md; | |
| danof = ((100-0.1*info->defm)/100)*danof; | |
| dano = danof; | |
| printf("%s:",info->nome); | |
| for(i=0;i<35-len;i++) | |
| printf(" "); | |
| printf("%s:\n",mnfo.nome); | |
| printf("HP: %d HP: %d\n",hp, hpm); | |
| printf("MP: %d MP: %d\n",mp, mpm); | |
| printf("Level: %d Level: %d\n",info->level, mnfo.level); | |
| printf("Seu turno!!!\n\n"); | |
| printf("Voce usou o %s!",snfo.nome); | |
| printf("Voce causou %d de dano no inimigo!\n",dano); | |
| printf("Gastou %d de mana!\n",snfo.mp); | |
| *mp-=snfo.mp; | |
| } | |
| else | |
| { | |
| printf("Voce nao possui mp suficiente!\n"); | |
| printf("Aperte uma tecla para continuar com otra opção"); | |
| getch(); | |
| system("cls"); | |
| return 0; | |
| } | |
| } | |
| } | |
| return dano; | |
| fclose(arq); | |
| } | |
| int fuga(player info, monster mnfo) | |
| { | |
| float chance,r; | |
| int luta = 1; | |
| srand(time(0)); | |
| r = rand() % 10; | |
| r++; | |
| chance = ((info.level/mnfo.level)*(info.eva/mnfo.eva)*((info.agi/100) + 1)*(r/2))/(0.15*info.level + 1); | |
| if(chance > 15) | |
| { | |
| printf("Voce conseguiu escapar!\n"); | |
| printf("Aperte uma tecla para voltar ao menu do jogo!"); | |
| luta = 0; | |
| getch(); | |
| system("cls"); | |
| } | |
| else{ | |
| printf("Voce perdeu o turno tentando escapar!\n"); | |
| printf("Aperte uma tecla para continuar a batalha!"); | |
| getch(); | |
| system("cls"); | |
| } | |
| return luta; | |
| } | |
| int defesaf(player info) | |
| { | |
| int defesa=0, r; | |
| srand(time(0)); | |
| r = rand() % 10; | |
| r++; | |
| defesa = (info.deff/r); | |
| return defesa; | |
| } | |
| int danofisico(player *info, monster *mnfo) | |
| { | |
| int dano,r,re,critico=0; | |
| float danof; | |
| srand(time(0)); | |
| r = rand()%5; | |
| r++; | |
| re = rand()%6; | |
| re++; | |
| if((r*info->prec)/info->level >200 && r>2) | |
| { | |
| critico = info->agi/(info->level*((r+1)/2)); | |
| printf("Golpe critico!\n"); | |
| } | |
| if(0.1*mnfo->eva > info->prec) | |
| printf("Voce errou o ataque!\n"); | |
| else if(mnfo->eva > info->prec && mnfo->eva/(mnfo->level*mnfo->level*re) > 1.3) | |
| printf("Voce errou o ataque!\n"); | |
| else | |
| { | |
| danof = 0.8*info->ataf + 0.2*r*info->ataf + critico; | |
| if((r*info->prec)/info->level < 200 && r<2)//golpe critico passa pela defesa | |
| danof = ((100-0.1*info->defm)/100)*danof;//do adversario | |
| dano = danof; | |
| } | |
| return dano; | |
| } | |
| int danofisicomonstro(player info, monster mnfo) | |
| { | |
| int dano=0,r,re,critico=0; | |
| float danof=0; | |
| srand(time(0)); | |
| r = rand()%5; | |
| r++; | |
| re = rand()%10; | |
| re++; | |
| if(0.1*info.eva > mnfo.prec) | |
| { | |
| printf("%s errou o ataque!\n",mnfo.nome); | |
| dano = -1; | |
| } | |
| else if(info.eva > mnfo.prec && info.eva/(info.level*info.level*re) > 1.3) | |
| { | |
| printf("%s errou o ataque!\n",mnfo.nome); | |
| dano = -1; | |
| } | |
| else | |
| { | |
| danof = 0.8*mnfo.ataf + 0.2*r*mnfo.ataf; | |
| danof = ((100-0.1*mnfo.defm)/100)*danof;//do adversario | |
| dano = danof; | |
| } | |
| return dano; | |
| } | |
| int monstro(monster *mnfo, player *info, int defesa, int *hp, int *mp) | |
| { | |
| int dano=0,r; | |
| float danof; | |
| srand(time(0)); | |
| r = rand()%5; | |
| r++; | |
| if(mnfo->codigo == 1) | |
| { | |
| printf("Pardal usa: BANZAI.\n"); | |
| dano = danofisicomonstro(*info, *mnfo); | |
| } | |
| else if(mnfo->codigo == 2) | |
| { | |
| printf("A pomba caga na sua cabeca!\n"); | |
| dano = danofisicomonstro(*info, *mnfo); | |
| } | |
| else if(mnfo->codigo == 3) | |
| { | |
| printf("O bambi sai correndo, dificultando que voce o ataque.\n"); | |
| printf("Reduz o dano em %d%\n",r*10); | |
| } | |
| else if(mnfo->codigo == 4) | |
| { | |
| if(*mp>=7) | |
| { | |
| printf("A %s usa: Ferrao do inferno\n",mnfo->nome); | |
| danof = 10 + 0.2*mnfo->atam*r; | |
| danof = ((100-0.1*info->defm)/100)*danof; | |
| dano = danof; | |
| *mp-=7; | |
| } | |
| else | |
| { | |
| printf("A %s usa: Golpe Moscal do Mal\n",mnfo->nome); | |
| dano = danofisicomonstro(*info, *mnfo); | |
| } | |
| } | |
| else if(mnfo->codigo == 5) | |
| { | |
| printf("Isso e pelo meu filho!!!\n"); | |
| printf("A %s usa: Ferrao Mortal da Vinganca!\n",mnfo->nome); | |
| dano = danofisicomonstro(*info, *mnfo); | |
| dano = danof; | |
| } | |
| else if(mnfo->codigo == 6) | |
| { | |
| printf("%s: Asdgubiopolsadfuybgs!\n",mnfo->nome); | |
| dano = danofisicomonstro(*info, *mnfo); | |
| dano = danof; | |
| } | |
| return dano; | |
| } | |
| void compra(player *info, item tnfo) | |
| { | |
| FILE *arq; | |
| char opcao; | |
| int arma,i=1,codigo,aux=0, p, quantidade=0; | |
| arq = fopen("itens.pp","r+"); | |
| system("cls"); | |
| printf("Voce tem %d de gold\n",info->gold); | |
| printf("Escolha qual desses voce quer comprar:\n"); | |
| switch(info->classe) | |
| { | |
| case 1: printf("1. Espadas.\n");arma = 1;break; | |
| case 2: printf("1. Cajados.\n");arma = 2;break; | |
| case 3: printf("1. Adagas.\n");arma = 3;break; | |
| } | |
| printf("2. Armaduras.\n"); | |
| printf("3. Botas.\n"); | |
| printf("4. Luvas.\n"); | |
| printf("5. Amuletos.\n"); | |
| printf("6. Pocoes.\n"); | |
| printf("\n>>>>>AVISO: Caso seja efetuada uma compra de um item e ja houver um do mesmo equipado, este sera removido e voce nao recebera nada em volta. Por isso venda seus itens, depois compre um novo.\n"); | |
| opcao = scanf("%d",&opcao); | |
| p = opcao-1; | |
| if(opcao>=1 && opcao <= 6) | |
| { | |
| while(fread(&tnfo, sizeof(item), 1, arq) != 0) | |
| { | |
| if(tnfo.codigo >= arma*opcao*100 && tnfo.codigo < (arma*opcao*100)+80) | |
| { | |
| printf("Item %d:\n",i); | |
| printf("Codigo do item: %d.\n",tnfo.codigo); | |
| if(tnfo.hp>0) | |
| printf("Adiciona %d de HP.\n",tnfo.hp); | |
| if(tnfo.mp>0) | |
| printf("Adiciona %d de MP.\n",tnfo.mp); | |
| if(tnfo.hpreg>0) | |
| printf("Cura %d de hp.\n",tnfo.hpreg); | |
| if(tnfo.mpreg>0) | |
| printf("Cura %d de hp.\n",tnfo.mpreg); | |
| if(tnfo.ataf>0) | |
| printf("Adiciona %d de ataque fisico.\n",tnfo.ataf); | |
| if(tnfo.atam>0) | |
| printf("Adiciona %d de ataque magico.\n",tnfo.atam); | |
| if(tnfo.deff>0) | |
| printf("Adiciona %d de defesa fisica.\n",tnfo.deff); | |
| if(tnfo.defm>0) | |
| printf("Adiciona %d de defesa magica.\n",tnfo.defm); | |
| if(tnfo.prec>0) | |
| printf("Adiciona %d de precisa.\n",tnfo.prec); | |
| if(tnfo.vel>0) | |
| printf("Adiciona %d de velocidade.\n",tnfo.vel); | |
| aux = 1; | |
| } | |
| } | |
| if(aux == 1) | |
| { | |
| printf("\nDigite o codigo do item que voce deseja comprar: "); | |
| scanf("%d",&codigo); | |
| if(codigo>=600 && codigo <= 700) | |
| { | |
| printf("Digite a quantidade que voce quer comprar: "); | |
| scanf("%d",&quantidade); | |
| } | |
| } | |
| aux = 0; | |
| while(fread(&tnfo, sizeof(item), 1, arq) != 0) | |
| { | |
| if(tnfo.codigo == codigo) | |
| { | |
| if(info->gold >= tnfo.custo) | |
| { | |
| if(codigo >=610 && codigo <= 619) | |
| p = 6; | |
| info->gold -= tnfo.custo; | |
| info->equip[p] = tnfo.codigo; | |
| if(opcao == 6) | |
| info->quantidade[p-6] = quantidade; | |
| info->equiphp = tnfo.hp; | |
| info->equipmp = tnfo.mp; | |
| info->equipataf = tnfo.ataf; | |
| info->equipatam = tnfo.atam; | |
| info->equipdeff = tnfo.deff; | |
| info->equipdefm = tnfo.defm; | |
| info->equipprec = tnfo.prec; | |
| info->equipvel = tnfo.vel; | |
| aux = 1; | |
| printf("Voce comprou o %s por %d gold!\n",tnfo.nome, tnfo.custo); | |
| } | |
| else | |
| printf("Voce nao tem gold suficiente para comprar esse item!\n"); | |
| } | |
| } | |
| } | |
| else | |
| printf("Digite a opcao correta!\n"); | |
| fclose(arq); | |
| if(aux == 0) | |
| printf("A compra nao pode se efetuada\n"); | |
| printf("Aperte uma tecla para voltar ao menu da loja.\n"); | |
| getch(); | |
| system("cls"); | |
| } | |
| void venda(player *info, item tnfo) | |
| { | |
| int codigo, aux = 0, quantidade, i; | |
| FILE *arq; | |
| arq = fopen("itens.pp","r"); | |
| printf("Escolha o item que voce deseja vender:\n"); | |
| while(fread(&tnfo, sizeof(item), 1, arq) != 0) | |
| { | |
| for(i=0;i<10;i++) | |
| if(info->equip[i] == tnfo.codigo) | |
| { | |
| printf("Item: %s.\n",tnfo.nome); | |
| printf("Codigo: %d.\n",tnfo.codigo); | |
| printf("Preco de venda: %d.\n\n",tnfo.custo/3); | |
| } | |
| } | |
| printf("Digite o codigo do item que voce quer vender:\n"); | |
| scanf("%d",&codigo); | |
| for(i=0;i<10;i++) | |
| if(codigo == info->equip[i]) | |
| { | |
| aux = 1; | |
| break; | |
| } | |
| if(aux == 0) | |
| printf("Item nao encontrado no personagem.\n"); | |
| else if(aux == 1) | |
| { | |
| while(fread(&tnfo, sizeof(item), 1, arq) != 0) | |
| { | |
| if(codigo == tnfo.codigo) | |
| { | |
| if(codigo > 600 && codigo < 620) | |
| { | |
| printf("Digite a quantidade de pocao que voce quer vender:\n"); | |
| scanf("%d",&quantidade); | |
| if(quantidade <= info->quantidade[0]) | |
| { | |
| info->quantidade[0]-=quantidade; | |
| info->gold += quantidade*(tnfo.custo/3); | |
| info->equip[i] = 0; | |
| } | |
| else | |
| printf("Voce ta querendo vender mais pocoes do que voce tem...\n"); | |
| } | |
| else | |
| { | |
| info->equip[i] = 0; | |
| info->equiphp -= tnfo.hp; | |
| info->equipmp -= tnfo.mp; | |
| info->equipataf -= tnfo.ataf; | |
| info->equipatam -= tnfo.atam; | |
| info->equipdeff -= tnfo.deff; | |
| info->equipdefm -= tnfo.defm; | |
| info->equipprec -= tnfo.prec; | |
| info->equipvel -= tnfo.vel; | |
| info->gold += tnfo.custo/3; | |
| } | |
| } | |
| } | |
| } | |
| fclose(arq); | |
| printf("Aperte uma tecla para voltar ao menu da loja.\n"); | |
| getch(); | |
| } | |
| void loja(player info, item tnfo) | |
| { | |
| char opcao; | |
| printf("Bem-vindo a loja %s!\n",info.nome); | |
| printf("O que voce deseja fazer?\n"); | |
| printf("1. Comprar itens.\n"); | |
| printf("2. Vender itens.\n"); | |
| printf("3. Voltar ao menu.\n"); | |
| opcao = getch(); | |
| switch(opcao) | |
| { | |
| case '1':compra(&info, tnfo);break; | |
| case '2':break; | |
| case '3':break; | |
| default: break; | |
| } | |
| } | |
| void exibe_item(player info, item tnfo) | |
| { | |
| FILE *arq; | |
| int i, aux = 0; | |
| arq = fopen("itens.pp","r"); | |
| system("cls"); | |
| printf("Seus itens:\n\n"); | |
| while( fread(&tnfo, sizeof(item), 1, arq) != 0) | |
| { | |
| for(i=0;i<10;i++) | |
| { | |
| if(tnfo.codigo == info.equip[i]) | |
| { | |
| printf("%s\n",tnfo.nome); | |
| if(tnfo.hp>0) | |
| printf("Adiciona HP: %d.\n",tnfo.hp); | |
| if(tnfo.mp>0) | |
| printf("Adiciona MP: %d.\n",tnfo.mp); | |
| if(tnfo.hpreg>0) | |
| printf("Cura HP: %d.\n",tnfo.hpreg); | |
| if(tnfo.mpreg>0) | |
| printf("Regenera MP: %d.\n",tnfo.mpreg); | |
| if(tnfo.ataf>0) | |
| printf("Adiciona Ataque Fisico: %d.\n",tnfo.ataf); | |
| if(tnfo.atam>0) | |
| printf("Adiciona Ataque Magico: %d.\n",tnfo.atam); | |
| if(tnfo.deff>0) | |
| printf("Adiciona Defesa Fisica: %d.\n",tnfo.deff); | |
| if(tnfo.defm>0) | |
| printf("Adiciona Defesa Magica: %d.\n",tnfo.defm); | |
| if(tnfo.prec>0) | |
| printf("Adiciona Precisao: %d.\n",tnfo.prec); | |
| if(tnfo.vel>0) | |
| printf("Adiciona Velocidade: %d.\n",tnfo.vel); | |
| if(info.quantidade[i] > 0) | |
| printf("Quantidade: %d.\n",info.quantidade[i]); | |
| aux = 1; | |
| } | |
| } | |
| } | |
| if(aux == 0) | |
| printf("Voce ainda nao possui itens!\n"); | |
| printf("Aperte uma tecla para voltar ao menu.\n"); | |
| getch(); | |
| system("cls"); | |
| } |