summaryrefslogtreecommitdiff
path: root/src/main_stack.c
diff options
context:
space:
mode:
authorMario Kilies <MarioKilies@GMX.net>2011-01-25 11:11:47 +0100
committerMario Kilies <MarioKilies@GMX.net>2011-01-25 11:11:47 +0100
commit3fc586325f8fc8fb4f1990bf87ad4c37e722f381 (patch)
treec6e5dfcb251eddc3cc7a413c562849cb14fccedc /src/main_stack.c
parent6dad43a768646ef0d8f06958446761eb8a1b3f93 (diff)
Created a mainstack datatype. Refactored server game states into separate functions.
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;
+}