From b4b784928cbec4a93c71f3ca1e37a14397929edb Mon Sep 17 00:00:00 2001 From: scratko Date: Sun, 18 Aug 2024 22:24:30 +0300 Subject: Final version v1.0 Fixed stack clearing. Added check for NULL before clearing game parameters. Added refactoring of define_phase_after_attack(). Analyzing game results is organized into several functions. Fixed card limit detection on tossing (line 366 in server_data_processing.c). --- server/server_game_process.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'server/server_game_process.c') diff --git a/server/server_game_process.c b/server/server_game_process.c index 369f3d6..451fce3 100644 --- a/server/server_game_process.c +++ b/server/server_game_process.c @@ -223,8 +223,8 @@ void update_game_info(struct game_info *gi, int players_number, gi->position_whose_turn = position_whose_turn; } -int is_card_bit(const char *attack_card, const char *defend_card, - const char *trump_suit) +int is_card_beat(const char *attack_card, const char *defend_card, + const char *trump_suit) { int length, attack_rank, defend_rank; const char *attack_suit, *defend_suit; @@ -295,9 +295,17 @@ static int trump_cards_left_uncovered(player_cards remaining_cards, return 0; } +static void clean_up_stacks(player_cards *involved_cards, + player_cards *trump_cards, + player_cards *remaining_attack_cards) +{ + clear_stack(involved_cards); + clear_stack(trump_cards); + clear_stack(remaining_attack_cards); +} + /* * analyze that each attacker card can be beat - * TODO: free memory */ int check_defender_can_defend(struct card_queue *cq, player_cards deck, const char *trump_suit) @@ -325,8 +333,8 @@ int check_defender_can_defend(struct card_queue *cq, min_rank = 0; while(next_defend_card) { - if(is_card_bit(next_attack_card->str, next_defend_card->str, - trump_suit)) + if(is_card_beat(next_attack_card->str, next_defend_card->str, + trump_suit)) { if(is_same_suit_and_not_meet(involved_cards, next_defend_card, next_attack_card)) @@ -351,8 +359,10 @@ int check_defender_can_defend(struct card_queue *cq, * there are trump attacking uncovered cards remaining * if the defender also has trump cards, they are of a lower rank */ - if(trump_cards_left_uncovered(remaining_attack_cards, trump_suit)) + if(trump_cards_left_uncovered(remaining_attack_cards, trump_suit)) { + clean_up_stacks(&involved_cards, &trump_cards, &remaining_attack_cards); return 0; + } while(remaining_attack_cards) { if(!is_empty_stack(trump_cards)) { pop_stack(&trump_cards); @@ -360,8 +370,11 @@ int check_defender_can_defend(struct card_queue *cq, } else break; } - if(!is_empty_stack(remaining_attack_cards)) + if(!is_empty_stack(remaining_attack_cards)) { + clean_up_stacks(&involved_cards, &trump_cards, &remaining_attack_cards); return 0; + } + clean_up_stacks(&involved_cards, &trump_cards, &remaining_attack_cards); return 1; } -- cgit v1.2.3