int rollDiceCommand(char* rollString, int verbose) { // Initialize the roll parameters // [0] is number of dice // [1] is size of dice // [2] is die additive // [0]d[1] + [2] int params[3]; // Initialize parameters to standard 1d6+0 params[0] = 1; params[1] = 6; params[2] = 0; // Parse through the roll string, putting it in parameters if (parseRoll(rollString, params)) { rollDice(params[0], params[1], params[2], verbose); } // If parseRoll fails (returns 0), else { printf("Syntax error - please input rolls in forms of #d#+#, no spaces\n"); } return -1; }
int main(int argc, char ** argv) { if (argc < 2) { printf("No.\n"); return 1; } struct Roll * rolls = (struct Roll *) malloc(sizeof(struct Roll) * (argc - 1)); for (int i = 1; i < argc; i++) { rolls[i - 1] = parseRoll(argv[i]); } seedRandom(); int sum = 0; for (int i = 1; i < argc; i++) { int subtotal = 0; struct Roll roll = rolls[i - 1]; int * results = (int *) malloc(sizeof(int) * roll.count); for (int count = 0 ; count < roll.count; count++) { int result = rand() % roll.size + 1; if (result <= roll.reroll) { count--; printf("Got %d; rerolling.\n", result); } else { results[count] = result; // printf("Got %d; continuing.\n", result); } } qsort(results, roll.count, sizeof(int), sortDescCmp); int keep = 0; for ( ; keep < roll.keep; keep++) { printf("%dd%d (%d): %d\n", roll.count, roll.size, keep, results[keep]); subtotal += results[keep]; } for ( ; keep < roll.count; keep++) { printf("%dd%d (%d): %d (discarded)\n", roll.count, roll.size, keep, results[keep]); } if (roll.modifier != 0) { if (roll.modifier > 0) { printf("Subtotal: %d + %d = %d\n", subtotal, roll.modifier, subtotal + roll.modifier); } else { printf("Subtotal: %d - %d = %d\n", subtotal, -roll.modifier, subtotal + roll.modifier); } subtotal += roll.modifier; } else { printf("Subtotal: %d\n", subtotal); } sum += subtotal; } printf("Total %d\n", sum); return 0; }