back to scratko.xyz
aboutsummaryrefslogtreecommitdiff
path: root/client/card_stack.c
diff options
context:
space:
mode:
Diffstat (limited to 'client/card_stack.c')
-rw-r--r--client/card_stack.c39
1 files changed, 32 insertions, 7 deletions
diff --git a/client/card_stack.c b/client/card_stack.c
index 5d0700b..d9dc273 100644
--- a/client/card_stack.c
+++ b/client/card_stack.c
@@ -81,11 +81,32 @@ void add_hint_letters_stack(player_cards deck)
}
}
+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;
+ }
+}
+
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;
while(deck) {
/* is the card already marked? */
@@ -103,12 +124,16 @@ void mark_card_for_attackers_stack(player_cards deck)
}
found_card = search_deck->str;
found_rank = convert_rank_to_int(found_card);
- if(found_rank == target_rank)
+ 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);
}
#if 0
static int is_card_beaten(const char *attack_card, const char *defend_card,
@@ -142,8 +167,8 @@ void mark_card_for_defenders_stack(player_cards deck,
while(deck) {
for(i = 0; i <= cot->card_arr_idx; ++i)
- if((i == 0 || !(i % 3)) && is_card_beaten(cot->card_arr[i],
- deck->str, trump_suit))
+ 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;
@@ -179,15 +204,15 @@ void mark_card_for_tossing_stack(player_cards deck, struct cards_on_table *cot)
deck = deck->next;
}
}
-
-int card_search_by_letter(player_cards deck, int letter)
+/* rename: and_unmarked */
+char* card_search_by_letter(player_cards deck, int letter)
{
while(deck) {
if(deck->tip == letter && deck->is_usable) {
deck->is_usable = 0;
- return 1;
+ return deck->str;
}
deck = deck->next;
}
- return 0;
+ return NULL;
}