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