From 831f9f01fbe4088eb6bd378c0e417d9996b676fd Mon Sep 17 00:00:00 2001 From: scratko Date: Fri, 30 Aug 2024 12:46:56 +0300 Subject: Final version v2.0 Added windows client. SIGPIPE signal was being sent to the server when the client was disconnected. Now there is handling of this signal. Added a delay when displaying some informational messages. --- client/card_stack.c | 173 ---------------------------------------------------- 1 file changed, 173 deletions(-) delete mode 100644 client/card_stack.c (limited to 'client/card_stack.c') diff --git a/client/card_stack.c b/client/card_stack.c deleted file mode 100644 index fc4057c..0000000 --- a/client/card_stack.c +++ /dev/null @@ -1,173 +0,0 @@ -#include "card_stack.h" -#include "card_handling.h" -#include "client.h" - -#include -#include - -void init_stack(player_cards *deck) -{ - *deck = NULL; -} - -void push_stack(player_cards *deck, char *str) -{ - struct card_stack_item *tmp = malloc(sizeof(struct card_stack_item)); - tmp->str = str; - tmp->tip = ' '; - tmp->is_usable = 0; - tmp->next = *deck; - *deck = tmp; -} - -void clear_stack(player_cards *deck) -{ - struct card_stack_item *tmp; - - while(*deck) { - tmp = *deck; - *deck = tmp->next; - if(tmp->str) - free(tmp->str); - free(tmp); - } -} - -int is_empty_stack(player_cards deck) -{ - return deck == NULL; -} - -void add_hint_letters_stack(player_cards deck) -{ - unsigned char letter = 'a'; - - while(deck) { - deck->tip = letter; - ++letter; - if(letter > 'z') - letter = 'A'; - deck = deck->next; - } -} - -static int check_no_attackers_cards_marked(player_cards deck) -{ - while(deck) { - if(deck->is_usable) - return 0; - deck = deck->next; - } - return 1; -} - -static void mark_all_card_stack(player_cards deck) -{ - player_cards tmp_deck = deck; - - while(tmp_deck) { - tmp_deck->is_usable = 1; - tmp_deck = tmp_deck->next; - } -} - -static void clear_is_usable_status(player_cards deck) -{ - while(deck) { - if(deck->is_usable) - deck->is_usable = 0; - deck = deck->next; - } -} - -void mark_card_for_attackers_stack(player_cards deck) -{ - char *card = NULL, *found_card; - struct card_stack_item *search_deck = NULL; - int target_rank, found_rank; - player_cards tmp_begin_deck = deck; - - clear_is_usable_status(deck); - while(deck) { - /* is the card already marked? */ - if(deck->is_usable) { - deck = deck->next; - continue; - } - card = deck->str; - target_rank = convert_rank_to_int(card); - search_deck = deck->next; - while(search_deck) { - if(search_deck->is_usable) { - search_deck = search_deck->next; - continue; - } - found_card = search_deck->str; - found_rank = convert_rank_to_int(found_card); - if(found_rank == target_rank) { - deck->is_usable = 1; - search_deck->is_usable = 1; - } - search_deck = search_deck->next; - } - deck = deck->next; - } - if(check_no_attackers_cards_marked(tmp_begin_deck)) - mark_all_card_stack(tmp_begin_deck); -} - -void mark_card_for_defenders_stack(player_cards deck, - struct cards_on_table *cot, char *trump_suit) -{ - int i; - - while(deck) { - for(i = 0; i <= cot->card_arr_idx; ++i) - if(((i == 0 || !(i % 3)) && cot->card_arr[i+2][0] == '-') && - is_card_beaten(cot->card_arr[i], deck->str, trump_suit)) - { - deck->is_usable = 1; - break; - } - deck = deck->next; - } -} - -void mark_card_for_tossing_stack(player_cards deck, struct cards_on_table *cot) -{ - int i; - - while(deck) { - for(i = 0; i <= cot->card_arr_idx; ++i) { - if(cot->card_arr[i][0] == '-' || cot->card_arr[i][0] == '\\') - continue; - if(check_matched_ranks(cot->card_arr[i], deck->str)) { - deck->is_usable = 1; - break; - } - } - deck = deck->next; - } -} - -char* card_search_by_marked_letter(player_cards deck, int letter) -{ - while(deck) { - if(deck->tip == letter && deck->is_usable) { - deck->is_usable = 0; - return deck->str; - } - deck = deck->next; - } - return NULL; -} - -char* card_search_by_unmarked_letter(player_cards deck, int letter) -{ - while(deck) { - if(deck->tip == letter) - return deck->str; - deck = deck->next; - } - return NULL; -} -- cgit v1.2.3