From 7e44029c1dc8257d0c63d84f3d5c8c4884695fde Mon Sep 17 00:00:00 2001 From: Sara Date: Wed, 17 Sep 2025 22:45:32 +0200 Subject: [PATCH] feat: work on implementing dice rolls --- src/dice.c | 19 ++++++++++--------- src/dice.h | 17 ++++++++++++----- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/dice.c b/src/dice.c index a2d6053..46d70f9 100644 --- a/src/dice.c +++ b/src/dice.c @@ -1,4 +1,5 @@ #include "dice.h" +#include #include #include @@ -10,6 +11,11 @@ int roll_die(enum die_type die) { static int current_active_count = 0; static enum die_type active_dice_set[MAX_ACTIVE_DICE]; +static struct roll_result_type roll_results[MAX_ACTIVE_DICE]; +static struct roll_result_type roll_total = { + .roll = 0, .string_len = 0 +}; + enum die_type const *get_active_dice_set(size_t *out_length) { if (out_length != nullptr) { *out_length = current_active_count; @@ -30,17 +36,12 @@ void remove_die_from_active(size_t index) { --current_active_count; } -struct roll_result_type roll_active_dice_set(enum die_type die) { - struct roll_result_type results = { - .individual_result_count = MAX_ACTIVE_DICE, - .total = 0 - }; +void roll_active_dice_set(enum die_type die) { for (size_t i = 0; i < current_active_count; ++i) { - results.individual_results[i] = roll_die(active_dice_set[i]); - results.total += results.individual_results[i]; + roll_results[i].roll = roll_die(active_dice_set[i]); + snprintf(roll_results[i].string, MAX_ROLL_STR_LEN, "%d", roll_results[i].roll); + roll_total.roll += roll_results[i].roll; } - - return results; } Clay_String die_to_str(enum die_type die) { diff --git a/src/dice.h b/src/dice.h index 27d19bf..3c6b380 100644 --- a/src/dice.h +++ b/src/dice.h @@ -5,7 +5,11 @@ #include #ifndef MAX_ACTIVE_DICE -#define MAX_ACTIVE_DICE 20 + #define MAX_ACTIVE_DICE 20 +#endif + +#ifndef MAX_ROLL_STR_LEN + #define MAX_ROLL_STR_LEN 5 #endif enum die_type { @@ -20,9 +24,9 @@ enum die_type { }; struct roll_result_type { - size_t individual_result_count; - int individual_results[MAX_ACTIVE_DICE]; - int total; + int roll; + size_t string_len; + char string[MAX_ROLL_STR_LEN]; }; extern int roll_die(enum die_type die); @@ -30,7 +34,10 @@ extern int roll_die(enum die_type die); extern enum die_type const *get_active_dice_set(size_t *out_length); extern size_t add_die_to_active(enum die_type die); extern void remove_die_from_active(size_t index); -extern struct roll_result_type roll_active_dice_set(enum die_type die); + +extern struct roll_result_type *current_state(size_t *out_length); + +extern void roll_active_dice_set(enum die_type die); extern Clay_String die_to_str(enum die_type die);