back to scratko.xyz
aboutsummaryrefslogtreecommitdiff
path: root/server/card_stack.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/card_stack.c')
-rw-r--r--server/card_stack.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/server/card_stack.c b/server/card_stack.c
new file mode 100644
index 0000000..aa8af71
--- /dev/null
+++ b/server/card_stack.c
@@ -0,0 +1,79 @@
+#include "card_stack.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+void init_stack(player_cards *deck)
+{
+ *deck = NULL;
+}
+
+void push_stack(player_cards *deck, const char *str)
+{
+ struct card_stack_item *new_card = malloc(sizeof(struct card_stack_item));
+ new_card->str = str;
+ new_card->next = *deck;
+ if(new_card->next)
+ new_card->next->prev = new_card;
+ new_card->prev = NULL;
+ *deck = new_card;
+}
+
+int is_empty_stack(const player_cards deck)
+{
+ return !deck;
+}
+
+int find_out_card_quantity_in_deck(player_cards deck)
+{
+ int counter = 0;
+
+ while(deck) {
+ ++counter;
+ deck = deck->next;
+ }
+ return counter;
+}
+
+const char* remove_card_from_stack(player_cards *deck, const char *str)
+{
+ struct card_stack_item *tmp = NULL;
+ struct card_stack_item *first_tmp = *deck;
+ const char *card = NULL;
+
+ while(first_tmp) {
+ if(!strcmp(first_tmp->str, str)) {
+ tmp = first_tmp;
+ if(first_tmp->prev)
+ first_tmp->prev->next = first_tmp->next;
+ else
+ *deck = first_tmp->next;
+ if(first_tmp->next)
+ first_tmp->next->prev = first_tmp->prev;
+ card = tmp->str;
+ free(tmp);
+ return card;
+ }
+ first_tmp = first_tmp->next;
+ }
+ return 0;
+}
+
+struct card_stack_item* get_next_card_from_stack(player_cards deck,
+ player_cards prev)
+{
+ if(prev == NULL)
+ return deck;
+ else
+ return prev->next;
+}
+
+int find_card_in_stack(player_cards involved_cards, const char *str)
+{
+ while(involved_cards) {
+ if(!strcmp(involved_cards->str, str))
+ return 1;
+ involved_cards = involved_cards->next;
+ }
+ return 0;
+}