back to scratko.xyz
aboutsummaryrefslogtreecommitdiff
path: root/server/server_game_process.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/server_game_process.c')
-rw-r--r--server/server_game_process.c27
1 files changed, 20 insertions, 7 deletions
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;
}