Advertisement
BlueBear

zadanie.c

Dec 1st, 2013
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5.  
  6. typedef struct zbran
  7. {
  8.     unsigned int MUL;
  9.     unsigned int SIZE;
  10.     unsigned int BONUS;
  11. }zbran_t;
  12.  
  13. typedef struct bojovnik
  14. {
  15.     unsigned int STR;
  16.     unsigned int DEX;
  17.     unsigned int ARM;
  18.     unsigned int CON;
  19.     unsigned int level;
  20.     int HP;
  21.     char *meno;
  22.     struct zbran Zbran;
  23. }bojovnik_t;
  24.  
  25. bojovnik_t gWar[1000];
  26. zbran_t gWep[1000];
  27. int i = 1;
  28. int j = 1;
  29.  
  30. void parseInput(bojovnik_t *boj, int id);
  31. unsigned int generator(int a, int b);
  32. int getDamage(zbran_t weapon);
  33. signed int fight(bojovnik_t *boj1, bojovnik_t *boj2);
  34. void init(bojovnik_t *boj, int id);
  35. void vypis(FILE *fp, bojovnik_t *b1);
  36. unsigned int level(bojovnik_t *boj);
  37. zbran_t getWeapon(int id);
  38. bojovnik_t *getFighter(int id);
  39. const char *getText(int id);
  40.  
  41. int main()
  42. {
  43.     int poc;
  44.     srand(time(NULL));
  45.     printf("%s", getText(6));
  46.     scanf("%d", &poc);
  47.     for(poc; poc > 0; poc--)
  48.     {
  49.         init(getFighter(i), i);
  50.         parseInput(getFighter(i), i);
  51.         i++;
  52.     }
  53.     while(fight(getFighter(1), getFighter(2)) == 2);
  54.  
  55.     return 0;
  56. }
  57.  
  58. const char *getText(int id)
  59. {
  60.     char text[1000];
  61.     FILE *fp = fopen("strings.txt", "r");
  62.     while(id > 0)
  63.     {
  64.         fgets(text, 100, fp);
  65.         id--;
  66.     }
  67.     fclose(fp);
  68.     return text;
  69. }
  70.  
  71. zbran_t getWeapon(int id)
  72. {
  73.     return gWep[id - 1];
  74. }
  75.  
  76. bojovnik_t *getFighter(int id)
  77. {
  78.     return &gWar[id - 1];
  79. }
  80.  
  81. unsigned int level(bojovnik_t *boj)
  82. {
  83.     return boj->STR + boj->DEX + boj->ARM + boj->CON;
  84. }
  85.  
  86. void vypis(FILE *fp, bojovnik_t *b1)
  87. {
  88.     fprintf(fp,"\n");
  89.     fprintf(fp,"%s\n", b1->meno);
  90.     fprintf(fp,"%s%d\n", getText(2), b1->ARM);
  91.     fprintf(fp,"%s%d\n", getText(3), b1->DEX);
  92.     fprintf(fp,"%s%d\n", getText(4), b1->STR);
  93.     fprintf(fp,"%s%d\n", getText(5), b1->HP);
  94. }
  95.  
  96. signed int fight(bojovnik_t *boj1, bojovnik_t *boj2)
  97. {
  98.     int dmg = 0, advantage1, advantage2;
  99.  
  100.     dmg = 0;
  101.     advantage1 = generator(0, 10) + boj1->DEX;
  102.     advantage2 = generator(0, 10) + boj2->DEX;
  103.  
  104.     if(advantage1 == advantage2)
  105.     {
  106.         dmg = 0;
  107.         return 2;
  108.     }
  109.     if(advantage1 > advantage2)
  110.     {
  111.         dmg = getDamage(boj1->Zbran) + boj1->STR - boj2->ARM;
  112.         if(dmg <= 0)
  113.         {
  114.             dmg = 1;
  115.         }
  116.         boj2->HP -= dmg;
  117.     }
  118.     if(advantage1 < advantage2)
  119.     {
  120.         dmg = getDamage(boj2->Zbran) + boj1->STR - boj1->ARM;
  121.         if(dmg <= 0)
  122.         {
  123.             dmg = 1;
  124.         }
  125.         boj1->HP -= dmg;
  126.     }
  127.     vypis(stdout, boj1);
  128.     vypis(stdout, boj2);
  129.     if(boj1->HP < 1)
  130.     {
  131.         return 1;
  132.     }
  133.     if(boj2->HP < 1)
  134.     {
  135.         return -1;
  136.     }
  137.     if(boj1->HP == boj2->HP)
  138.     {
  139.         return 0;
  140.     }
  141.     return 2;
  142. }
  143.  
  144. int getDamage(zbran_t weapon)
  145. {
  146.     int i;
  147.     int total = 0;
  148.     for(i = 0; i < weapon.MUL; i++)
  149.     {
  150.         total += generator(1, weapon.SIZE);
  151.     }
  152.     return total + weapon.BONUS;
  153. }
  154.  
  155. unsigned int generator(int a, int b)
  156. {
  157.     return a + rand() % (b-a+1);
  158. }
  159.  
  160. void init(bojovnik_t *boj, int id)
  161. {
  162.     FILE *fp = fopen("fighters.txt", "r");
  163.     int a = 0;
  164.     char meno[100];
  165.     while(id > 0)
  166.     {
  167.         fscanf(fp, "%s", &meno);
  168.         fscanf(fp, "%d", &a);
  169.         boj->STR = a;
  170.         fscanf(fp, "%d", &a);
  171.         boj->DEX = a;
  172.         fscanf(fp, "%d", &a);
  173.         boj->ARM = a;
  174.         fscanf(fp, "%d", &a);
  175.         boj->CON = a;
  176.         boj->HP = 50 + 10 * boj->CON;
  177.         boj->level = level(&boj);
  178.         boj->meno = (char *)malloc(strlen(meno) * sizeof(char));
  179.         strcpy(boj->meno, meno);
  180.         id--;
  181.     }
  182.     fclose(fp);
  183. }
  184.  
  185. void parseInput(bojovnik_t *boj, int id)
  186. {
  187.     unsigned char tempBuf[100];
  188.     FILE *fp = fopen("weapons.txt", "r");
  189.     while(id > 0)
  190.     {
  191.         fscanf(fp, "%s", &tempBuf);
  192.         sscanf(tempBuf, "%d%*c%d%*c%d%[^\n]", &boj->Zbran.MUL, &boj->Zbran.SIZE, &boj->Zbran.BONUS);
  193.         id--;
  194.     }
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement