#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
int main()
{
/*
ac: armor class, ba:bonus attack(prof,mods,ecc), bd: bonus damage(str or dex mod),
att: total attack roll, fatt: first attack roll, satt: second attack roll
dmg: damage on hit, tdmg: all damage done during test, t: turn
gwm: great weapon master feat, avg: average, d: number of dice on attack roll,
dd: value of single dice on attack roll
lvl: barbarian level exa: bonus action from extra attack
*/
int ac, ba, bd, att, fatt, satt, dmg, tdmg, gwm, d, dd, lvl, exa;
float avg, t;
tdmg = 0;
srand(time(0));
printf("Assign barbarian level: ");
scanf("%d", &lvl);
printf("Assign number of thrown dice to attack, if 1d12 assign 1, 2d4 assign 2, 3d8 assign 3, ecc.: ");
scanf("%d", &d);
printf("Assign value of a single attack die, if 1d12 assign 12, if 2d4 metti 4, ecc.: ");
scanf("%d", &dd);
printf("Assign enemy AC: ");
scanf("%d", &ac);
printf("Assign sum of all attack modifiers, such as strenght mod., prof.,anything that affects precision. If using GWM remember the -5: ");
scanf("%d", &ba);
printf("Assign sum of all damage modifiers, such as strenght mod. and rage. If using GWM remember the +10: ");
scanf("%d", &bd);
printf("If using GWM assign 1, otherwise assign 0: ");
scanf("%d", &gwm);
if ( lvl==1 )
{
for(t=1; t<=10000; t++)
{
printf("\n\nTurn: %.f", t);
att = ( rand()%20 ) + ba + 1;
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd ;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) );
tdmg = tdmg + dmg;
printf("\nNice, a crit for: %d. Total damage: %d", dmg, tdmg);
if (gwm == 1)
{
att = ( rand()%20 ) + ba + 1;
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d\n", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) );
tdmg = tdmg + dmg;
printf("\nNow it's starting to get ridiculous, twice in a row. You crit for: %d, Total damage: %d", dmg, tdmg);
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
if ( 2<=lvl && lvl<=4 )
{
for(t=1; t<=10000; t++)
{
printf("\n\nTurn: %.f", t);
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) );
tdmg = tdmg + dmg;
printf("\nNice, a crit for: %d. Total damage: %d", dmg, tdmg);
if (gwm == 1)
{
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) );
tdmg = tdmg + dmg;
printf("\nNow it's starting to get ridiculous, twice in a row. You crit for: %d, Total damage: %d", dmg, tdmg);
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
if ( 5<=lvl && lvl<=8 )
{
for(t=1; t<=10000; t++)
{
exa = 0;
printf("\n\nTurn: %.f", t);
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) );
tdmg = tdmg + dmg;
printf("\nNice, a crit for: %d. Total damage: %d", dmg, tdmg);
if (gwm == 1)
{
exa = 1;
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) );
tdmg = tdmg + dmg;
printf("\nNow it's starting to get ridiculous, twice in a row. You crit for: %d, Total damage: %d", dmg, tdmg);
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) );
tdmg = tdmg + dmg;
printf("\nNice, a crit for: %d. Total damage: %d", dmg, tdmg);
if (gwm == 1 && exa == 0)
{
exa = 1;
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) );
tdmg = tdmg + dmg;
printf("\nNow it's starting to get ridiculous, twice in a row. You crit for: %d, Total damage: %d", dmg, tdmg);
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
if ( 9<=lvl && lvl<=12 )
{
for(t=1; t<=10000; t++)
{
exa = 0;
printf("\n\nTurn: %.f", t);
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) )+ bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + ( rand()%dd + 1 );
tdmg = tdmg + dmg;
printf("\nNice, a crit for: %d. Total damage: %d", dmg, tdmg);
if (gwm == 1)
{
exa = 1;
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + ( rand()%dd ) + 1;
tdmg = tdmg + dmg;
printf("\nNow it's starting to get ridiculous, twice in a row. You crit for: %d, Total damage: %d", dmg, tdmg);
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + ( rand()%dd ) + 1;
tdmg = tdmg + dmg;
printf("\nNice, a crit for: %d. Total damage: %d", dmg, tdmg);
if (gwm == 1 && exa == 0)
{
exa = 1;
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + ( rand()%dd ) + 1;
tdmg = tdmg + dmg;
printf("\nNow it's starting to get ridiculous, twice in a row. You crit for: %d, Total damage: %d", dmg, tdmg);
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
if ( 13<=lvl && lvl<=16 )
{
for(t=1; t<=10000; t++)
{
exa = 0;
printf("\n\nTurn: %.f", t);
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + ( rand()%dd ) + 1 + ( rand()%dd ) + 1;
tdmg = tdmg + dmg;
printf("\nNice, a crit for: %d. Total damage: %d", dmg, tdmg);
if (gwm == 1)
{
exa = 1;
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + ( rand()%dd ) + 1 + ( rand()%dd ) + 1;
tdmg = tdmg + dmg;
printf("\nNow it's starting to get ridiculous, twice in a row. You crit for: %d, Total damage: %d", dmg, tdmg);
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + ( rand()%dd ) + 1 + ( rand()%dd ) + 1;
tdmg = tdmg + dmg;
printf("\nNice, a crit for: %d. Total damage: %d", dmg, tdmg);
if (gwm == 1 && exa == 0)
{
exa = 1;
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + ( rand()%dd ) + 1 + ( rand()%dd ) + 1;
tdmg = tdmg + dmg;
printf("\nNow it's starting to get ridiculous, twice in a row. You crit for: %d, Total damage: %d", dmg, tdmg);
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
if ( lvl>=17 )
{
for(t=1; t<=10000; t++)
{
exa = 0;
printf("\n\nTurn: %.f", t);
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + ( rand()%dd ) + 1 + ( rand()%dd ) + 1 + ( rand()%dd ) + 1;
tdmg = tdmg + dmg;
printf("\nNice, a crit for: %d. Total damage: %d", dmg, tdmg);
if (gwm == 1)
{
exa = 1;
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + ( rand()%dd ) + 1 + ( rand()%dd ) + 1 + ( rand()%dd ) + 1;
tdmg = tdmg + dmg;
printf("\nNow it's starting to get ridiculous, twice in a row. You crit for: %d, Total damage: %d", dmg, tdmg);
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + ( rand()%dd ) + 1 + ( rand()%dd ) + 1 + ( rand()%dd ) + 1;
tdmg = tdmg + dmg;
printf("\nNice, a crit for: %d. Total damage: %d", dmg, tdmg);
if (gwm == 1 && exa == 0)
{
exa = 1;
fatt = ( rand()%20 ) + ba + 1;
satt = ( rand()%20 ) + ba + 1;
if (fatt>=satt)
{
att = fatt;
printf("\nThe first die was chosen: %d because the other was: %d", att, satt);
}
else
{
att = satt;
printf("\nThe second die was chosen: %d because the other was: %d", att, fatt);
}
if (att>=ac || att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + bd;
tdmg = tdmg + dmg;
printf("\nHit for: %d. Total damage: %d", dmg, tdmg);
if (att==(20+ba))
{
dmg = ( d * ( rand()%dd + 1 ) ) + ( rand()%dd ) + 1 + ( rand()%dd ) + 1 + ( rand()%dd ) + 1;
tdmg = tdmg + dmg;
printf("\nNow it's starting to get ridiculous, twice in a row. You crit for: %d, Total damage: %d", dmg, tdmg);
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
}
else
{
printf("\nDidn't hit. Total damage: %d", tdmg);
}
}
}
printf("\nTotal damage after 10000 turns: %d", tdmg);
avg = tdmg / t;
printf("\n\nAverage damage per turn: %.2f", avg);
return 0;
}