summaryrefslogtreecommitdiff
path: root/src/main_stack.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main_stack.c')
-rw-r--r--src/main_stack.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/main_stack.c b/src/main_stack.c
new file mode 100644
index 0000000..bae4a88
--- /dev/null
+++ b/src/main_stack.c
@@ -0,0 +1,52 @@
+#include "main_stack.h"
+#include <stdlib.h>
+
+void main_stack_init(main_stack_t *m)
+{
+ assert(m != NULL);
+
+ // assign card values to main stack
+ for(int i = 0; i < MAX_MAIN_STACK_CARDS; i++)
+ m->cards[i] = i + 1;
+
+ // shuffle stack
+ for(int i = 0; i < 3 * MAX_MAIN_STACK_CARDS; i++)
+ {
+ uint32_t x = rand() % MAX_MAIN_STACK_CARDS;
+ uint32_t y = rand() % MAX_MAIN_STACK_CARDS;
+ card tmp = m->cards[x];
+ m->cards[x] = m->cards[y];
+ m->cards[y] = tmp;
+ }
+}
+
+card main_stack_remove_card(main_stack_t *m)
+{
+ assert(m != NULL);
+
+ for(int i = 0; i < MAX_MAIN_STACK_CARDS; i++)
+ {
+ card c = m->cards[i];
+ if(c == 0)
+ continue;
+ m->cards[i] = 0;
+ return c;
+ }
+ return 0; // stack empty
+}
+
+uint8_t main_stack_size(const main_stack_t *m)
+{
+ assert(m != NULL);
+
+ uint8_t count = 0;
+
+ for(uint8_t i = 0; i < MAX_MAIN_STACK_CARDS; i++)
+ {
+ if(m->cards[i] == 0)
+ continue;
+ count++;
+ }
+
+ return count;
+}