Ir para conteúdo
Fórum Script Brasil

eusouthalles

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre eusouthalles

eusouthalles's Achievements

0

Reputação

  1. Bom Dia Companheiros. Estou fazendo um trabalho para a faculdade cujo o objetivo é simular o jogo pokemon Go em C. No desenvolvimento do código eu criei uma função transfere dados que tem como objetivo ler do arquivo um numero inteiro que corresponde ao golpe desse pokémon em outro arquivo. Porém essa função esta me gerando problemas pois ela esta dando erro de segmentação, save me pls. Segue o código: #include <stdio.h> #include <math.h> #define numPokemon 151 // 151 Pokemons, criada para o ler os status dos respectivos Pokemons no laço for void asterisco() { printf("\n"); for (int i = 0; i < 50 ; i++) printf("*"); printf("\n"); } typedef struct{ int t_golpe[16]; // tipo de golpe (fire, grass...) float g_energia; // ganho de energia char nomeGolpe[210], modoGolpe[210]; // modo: rápido ou carregado float f_golpe; int numGolpe[206]; }Golpes; //struct criada para armazenar os dados dos Golpes: força, tipo, ganho de energia, nome do golpe e modo do Golpe (rápido ou carregado) typedef struct { float lvl; char nome[51]; int num,speed,tipo1[20],tipo2[20]; float ataque, defesa, stamina,hp; int numAtk[6]; Golpes fGolpe[2]; }Pokemon; typedef struct { Pokemon poke[3]; Golpes TmodoGolpe; }treinador; Pokemon monstro[numPokemon]; Golpes ataque[207]; void Read_Data() { //função para ler os dados dos pokèmons FILE *status; // arquivo "Pokemon.txt" com os dados dos pokèmons status = fopen("pokemon.txt", "r"); if (status == NULL) { printf("Erro na abertura de Pokemóns\n"); } for (int i = 1 ; i < numPokemon ; i++) { // loop para pegar os dados dos 151 pokèmons %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% fscanf(status, "%d %s %f %f %f %d %d", &monstro.num, monstro.nome, &monstro.stamina, &monstro.ataque, &monstro.defesa, monstro.tipo1, monstro.tipo2); } fclose(status); } void Battle(Pokemon p1[], Pokemon p2[]) // não terminado { int i = 0, j = 0; while (i < 3 && j < 3) { int bate = (p1.speed > p2[j].speed) ? 0 : 1; while (p1.hp > 0 && p2[j].hp > 0) { if (bate == 0) { // P2[j] sofre dano p2.hp -= ((2 * p1.lvl / 5 + 2) * p1.fGolpe.f_golpe * (p1.ataque / p2[j].defesa)) / 50 + 2; bate = 1; } else { // P1 sofre dano p1.hp -= ((2 * p2[j].lvl / 5 + 2) * p2[j].fGolpe.f_golpe * (p2[j].ataque / p1.defesa)) / 50 + 2; bate = 0; } } if (p1.hp > 0) { // p1 sobreviveu printf("Pokemon %d (Player %d) ganhou de %d com %f de hp restante\n", p1.num, 1, p2[j].num, p1.hp); j++; } else { // p2[j] sobreviveu printf("Pokemon %d (Player %d) ganhou de %d com %f de hp restante\n", p2[j].num, 2, p1.num, p2[j].hp); i++; } } } void LerGolpe() { FILE *polgues; // arquivo Golpes polgues = fopen("ataques.txt", "r"); //recebe os dados do golpe if(polgues == NULL) { printf("Erro na abertura do arquivo\n"); } for(int i = 0 ; i < 207 ; i++) { fscanf(polgues, "%d", ataque.t_golpe); fscanf(polgues,"%c",ataque.modoGolpe); fgets(ataque.nomeGolpe, 23, polgues); fscanf(polgues, "%f %f", &ataque.f_golpe, &ataque.g_energia); fscanf(polgues,"%d",ataque.numGolpe); } fclose(polgues); } Pokemon EscolhePokemon() { Pokemon p; int num; scanf("%d", &num); // numero correspondente ao pokèmon escolhido e lvl do pokèmon if (num < 0 || num > 151) // para controlar a escolha de pokèmon { printf("Pokemon invalido\n"); } scanf ("%f", &monstro[num].lvl); monstro[num].hp = (monstro[num].stamina * 2 * monstro[num].lvl)/100 + monstro[num].lvl + 10; // cálculo do hp p=monstro[num]; return p; } void TransfereDados() { FILE *dadosPoke; dadosPoke = fopen("ataque_cada_Pokemon_1", "r"); if(dadosPoke == NULL){ printf("Erro na abertura dos dados de cada pokémon"); } for(int i = 0 ; i < 151 ; i++) { // 150 pois o meu é diferente dos demais fscanf(dadosPoke, "%d %d %d %d %d %d %d", &monstro.numAtk[0], &monstro.numAtk[1], &monstro.numAtk[2], &monstro.numAtk[3], &monstro.numAtk[4], &monstro.numAtk[5], &monstro.numAtk[6]); } } void EscolheGolpe(Pokemon escolhido) { Golpes GolpesPossiveis[7]; printf("Escolha o Golpe: \n"); for(int i=0; i<7;i++){ for(int j=0; j<207;j++){ if(escolhido.numAtk == *ataque[j].numGolpe){ GolpesPossiveis = ataque[j]; } } printf("%s\n",GolpesPossiveis.nomeGolpe); } } int main () { Pokemon A[3]; Read_Data(); LerGolpe(); TransfereDados(); printf("Escolha 3 pokemons\n"); printf("Digite o valor correspondente ao Pokemon e o seu nivel: "); for(int i=0;i<3;i++){ A = EscolhePokemon(); EscolheGolpe(A); } return 0; }
×
×
  • Criar Novo...