#include #include #include #include typedef struct zbran { unsigned int MUL; unsigned int SIZE; unsigned int BONUS; }zbran_t; typedef struct bojovnik { unsigned int STR; unsigned int DEX; unsigned int ARM; unsigned int CON; unsigned int level; int HP; char *meno; struct zbran Zbran; }bojovnik_t; bojovnik_t gWar[1000]; zbran_t gWep[1000]; int i = 1; int j = 1; void parseInput(bojovnik_t *boj, int id); unsigned int generator(int a, int b); int getDamage(zbran_t weapon); signed int fight(bojovnik_t *boj1, bojovnik_t *boj2); void init(bojovnik_t *boj, int id); void vypis(FILE *fp, bojovnik_t *b1); unsigned int level(bojovnik_t *boj); zbran_t getWeapon(int id); bojovnik_t *getFighter(int id); const char *getText(int id); int main() { int poc; srand(time(NULL)); printf("%s", getText(6)); scanf("%d", &poc); for(poc; poc > 0; poc--) { init(getFighter(i), i); parseInput(getFighter(i), i); i++; } while(fight(getFighter(1), getFighter(2)) == 2); return 0; } const char *getText(int id) { char text[1000]; FILE *fp = fopen("strings.txt", "r"); while(id > 0) { fgets(text, 100, fp); id--; } fclose(fp); return text; } zbran_t getWeapon(int id) { return gWep[id - 1]; } bojovnik_t *getFighter(int id) { return &gWar[id - 1]; } unsigned int level(bojovnik_t *boj) { return boj->STR + boj->DEX + boj->ARM + boj->CON; } void vypis(FILE *fp, bojovnik_t *b1) { fprintf(fp,"\n"); fprintf(fp,"%s\n", b1->meno); fprintf(fp,"%s%d\n", getText(2), b1->ARM); fprintf(fp,"%s%d\n", getText(3), b1->DEX); fprintf(fp,"%s%d\n", getText(4), b1->STR); fprintf(fp,"%s%d\n", getText(5), b1->HP); } signed int fight(bojovnik_t *boj1, bojovnik_t *boj2) { int dmg = 0, advantage1, advantage2; dmg = 0; advantage1 = generator(0, 10) + boj1->DEX; advantage2 = generator(0, 10) + boj2->DEX; if(advantage1 == advantage2) { dmg = 0; return 2; } if(advantage1 > advantage2) { dmg = getDamage(boj1->Zbran) + boj1->STR - boj2->ARM; if(dmg <= 0) { dmg = 1; } boj2->HP -= dmg; } if(advantage1 < advantage2) { dmg = getDamage(boj2->Zbran) + boj1->STR - boj1->ARM; if(dmg <= 0) { dmg = 1; } boj1->HP -= dmg; } vypis(stdout, boj1); vypis(stdout, boj2); if(boj1->HP < 1) { return 1; } if(boj2->HP < 1) { return -1; } if(boj1->HP == boj2->HP) { return 0; } return 2; } int getDamage(zbran_t weapon) { int i; int total = 0; for(i = 0; i < weapon.MUL; i++) { total += generator(1, weapon.SIZE); } return total + weapon.BONUS; } unsigned int generator(int a, int b) { return a + rand() % (b-a+1); } void init(bojovnik_t *boj, int id) { FILE *fp = fopen("fighters.txt", "r"); int a = 0; char meno[100]; while(id > 0) { fscanf(fp, "%s", &meno); fscanf(fp, "%d", &a); boj->STR = a; fscanf(fp, "%d", &a); boj->DEX = a; fscanf(fp, "%d", &a); boj->ARM = a; fscanf(fp, "%d", &a); boj->CON = a; boj->HP = 50 + 10 * boj->CON; boj->level = level(&boj); boj->meno = (char *)malloc(strlen(meno) * sizeof(char)); strcpy(boj->meno, meno); id--; } fclose(fp); } void parseInput(bojovnik_t *boj, int id) { unsigned char tempBuf[100]; FILE *fp = fopen("weapons.txt", "r"); while(id > 0) { fscanf(fp, "%s", &tempBuf); sscanf(tempBuf, "%d%*c%d%*c%d%[^\n]", &boj->Zbran.MUL, &boj->Zbran.SIZE, &boj->Zbran.BONUS); id--; } }