Skip to content

Instantly share code, notes, and snippets.

@lamenezes
Last active March 2, 2016 20:27
Show Gist options
  • Save lamenezes/94b813d7e6cec6435b71 to your computer and use it in GitHub Desktop.
Save lamenezes/94b813d7e6cec6435b71 to your computer and use it in GitHub Desktop.
Phynal Phantasm

Phynal Phantasm

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");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment