Pra quem gosta de RPG. Um sistema de lutas.

Publicado por Hunz 29/11/2004

[ Hits: 12.403 ]

Homepage: http://tnegri.com/

Download luta.c




Antes de tudo..
* Cada personagem tem o seu arquivo de texto.
* No código explica a estrutura do arquivo e tem um exemplo.

Para compilar:
gcc luta.c -o luta

Para executar:
luta <personagem1> <personagem2>
Os arquivos de cada personagem tem que estar na pasta de onde o arquivo for executado.

Bom divertimento e que isso seja de alguma ajuda.

Abraços,
Fiquem com Deus.

  



Esconder código-fonte

/* Desenvolvido por: Thiago Negri ( hunz ) */
/* Email: tn_negri@hotmail.com */

/* 
-- Estrutura do arquivo --
Linha 1: Dano --> Quantidade maxima de dano que o personagem pode causar.
Linha 2: Defesa --> Quantidade maxima de pontos de dano que o personagem pode defender.
Linha 3: Probabilidade de Defesa --> Com que frequencia ele defende os ataques.
Linha 4: Vida --> A vida do personagem.
Linha 5: Destreza --> Diminui as probabilidades de esquiva do inimigo.
Linha 6: Probabilidade de Esquiva --> Com que frequencia o personagem esquiva os ataques.
Linha 7: Velocidade do Ataque --> Com que frequencia seu personagem ataca, quanto maior, mais rapido.
Linha 8: Penetracao de Armadura/Defesa --> Diminui a defesa total do inimigo.

<-- Exemplo de Arquivo -->
35
25
35
550
25
40
154
10
<-- Obs: Todos os atributos devem ser numeros inteiros. -->
*/

#include <stdlib.h>
#include <stdio.h>

FILE   *char1,
   *char2;

int   dmg1,dmg2,dmgx,
   def1,def2,defx,
   der1,der2,
   vit1,vit2,
   acu1,acu2,
   dod1,dod2,dodx,
   asp1,asp2,
   pie1,pie2,
   tua1,tua2,
   per;

int atking(int player, char *play1, char *play2) {
   switch (player) {
      case 1: {
         dodx = dod2 - acu1;
         per = rand() % 100;
         if (per <= dodx) {
            printf("%s esquivou o ataque de %s.\n",play2,play1);
            return 0;
         }
         
         per = rand() % 100;
         if (per <= der2) {
            defx = def2 - pie1;
            dmgx = dmg1 - defx;
            if (dmgx < 1) {
               printf("%s defendeu todo o ataque de %s.\n",play1,play2);
               return 0;
            }
            vit2 = vit2 - dmgx;
            printf("%s sofreu um dano de %d ponto",play2,dmgx);
            if (dmgx > 1)
               printf("s");
            printf(" (defendeu %d ponto",defx);
            if (defx > 1)
               printf("s");
            printf(").\n");
            return 0;
         }
         
         printf("%s sofreu um dano de %d ponto",play2,dmg1);
         if (dmg1 > 1)
            printf("s");
         printf("\n");
         vit2 = vit2 - dmg1;
         return 0;
      }
      
      case 2: {
         dodx = dod1 - acu2;
         per = rand() % 100;
         if (per <= dodx) {
            printf("%s esquivou o ataque de %s.\n",play1,play2);
            return 0;
         }
         
         per = rand() % 100;
         if (per <= der1) {
            defx = def1 - pie2;
            dmgx = dmg2 - defx;
            if (dmgx < 1) {
               printf("%s defendeu todo o ataque de %s.\n",play2,play1);
               return 0;
            }
            vit1 = vit1 - dmgx;
            printf("%s sofreu um dano de %d ponto",play1,dmgx);
            if (dmgx > 1)
               printf("s");
            printf(" (defendeu %d ponto",defx);
            if (defx > 1)
               printf("s");
            printf(").\n");
            return 0;
         }
         
         printf("%s sofreu um dano de %d ponto",play1,dmg2);
         if (dmg2 > 1)
            printf("s");
         printf("\n");
         vit1 = vit1 - dmg2;
         return 0;
      }
   }
}

int main(int argc, char *argv[])
{
   srand(time(NULL));
   
   if (argc != 3) {
      printf("Modo de uso incorreto.n");
      return 0;
   }
   
   if ((char1=fopen(argv[1],"r"))==NULL) {
      printf("%s, personagem não encontrado.\n",argv[1]);
      return 0;
   }
   
   if ((char2=fopen(argv[2],"r"))==NULL) {
      printf("%s, personagem não encontrado.\n",argv[2]);
      return 0;
   }
   
   /* Carrega atributos do Personagem1 */
   fscanf(char1,"%d\n",&dmg1);
   fscanf(char1,"%d\n",&def1);
   fscanf(char1,"%d\n",&der1);
   fscanf(char1,"%d\n",&vit1);
   fscanf(char1,"%d\n",&acu1);
   fscanf(char1,"%d\n",&dod1);
   fscanf(char1,"%d\n",&asp1);
   fscanf(char1,"%d\n",&pie1);
   printf("-%s- [Dmg: %d][Def: %d][Def\%: %d][Vit: %d][Acu: %d][Dod\%: %d][Atkspd: %d][PA: %d]\n",argv[1],dmg1,def1,der1,vit1,acu1,dod1,asp1,pie1);
   
   /* Carrega atributos do Personagem2 */
   fscanf(char2,"%d\n",&dmg2);
   fscanf(char2,"%d\n",&def2);
   fscanf(char2,"%d\n",&der2);
   fscanf(char2,"%d\n",&vit2);
   fscanf(char2,"%d\n",&acu2);
   fscanf(char2,"%d\n",&dod2);
   fscanf(char2,"%d\n",&asp2);
   fscanf(char2,"%d\n",&pie2);
   printf("-%s- [Dmg: %d][Def: %d][Def\%: %d][Vit: %d][Acu: %d][Dod\%: %d][Atkspd: %d][PA: %d]\n",argv[2],dmg2,def2,der2,vit2,acu2,dod2,asp2,pie2);
   
   printf("Iniciando batalha.. %s VS %s\n",argv[1],argv[2]);
   
   tua1 = 100000;
   tua2 = 100000;
   
   while ((vit1 > 0) || (vit2 > 0)) {
      tua1 = tua1 - asp1;
      if (tua1 < 1) {
         atking(1,argv[1],argv[2]);
         tua1 = 100000;
      }
      if (vit2 < 1)
         break;
      
      tua2 = tua2 - asp2;
      if (tua2 < 1) {
         atking(2,argv[1],argv[2]);
         tua2 = 100000;
      }
      if (vit1 < 1)
         break;
   }
   
   if (vit2 < 1) {
      printf("%s ganhou a luta!\n",argv[1]);
      return 0;
   }
   
   if (vit1 < 1) {
      printf("%s ganhou a luta!\n",argv[2]);
      return 0;
   }
}

Scripts recomendados

Strspn

Preloader.c - Adaptação do Tarik Ahmad (Thiago Alexandre) para linux

Comando switch

Rand_bg

Binário para Decimal, Hexa, Char


  

Comentários
[1] Comentário enviado por hck_linux em 30/01/2006 - 20:03h

ei mto interessante princaipalmente pra qm qr aprender

[2] Comentário enviado por gedarius em 08/10/2009 - 10:57h

interessante


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts