diff options
author | scratko <m@scratko.xyz> | 2024-08-10 02:46:56 +0300 |
---|---|---|
committer | scratko <m@scratko.xyz> | 2024-08-10 02:46:56 +0300 |
commit | a2d696dea797faaa3157046c8ae89cd70e965bff (patch) | |
tree | 74051e828ec401f399b2316a535c200f3afa95c5 /server/card_stack.c | |
parent | 9e9919b897b00ff23aee6581471b4d7b4567bf4a (diff) | |
download | durak-a2d696dea797faaa3157046c8ae89cd70e965bff.tar.gz durak-a2d696dea797faaa3157046c8ae89cd70e965bff.tar.bz2 durak-a2d696dea797faaa3157046c8ae89cd70e965bff.zip |
Prefinal version
Added client.
Moved files to directories.
Diffstat (limited to 'server/card_stack.c')
-rw-r--r-- | server/card_stack.c | 79 |
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; +} |