From 5cd390a09b8010c09fe7780a41a1b226484413c5 Mon Sep 17 00:00:00 2001 From: En Yi Date: Fri, 14 Jun 2019 13:49:01 +0100 Subject: [PATCH] Fix mouse clicks and prepare bot implementation --- ai_comp/ai.py | 54 ++++++++++++++++++++++++++++++++++++--------------- cards.py | 6 ++++-- players.py | 4 ++-- 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/ai_comp/ai.py b/ai_comp/ai.py index d520f2f..043bf65 100644 --- a/ai_comp/ai.py +++ b/ai_comp/ai.py @@ -12,8 +12,10 @@ import random import cards -class RandomAI: - +class BaseAI: + """ + A base class for AI implementation. + """ def __init__(self, table_status, player=None): self.player = player self.table_status = table_status @@ -21,6 +23,36 @@ class RandomAI: def connect_to_player(self, player): self.player = player + def request_reshuffle(self): + pass + + def make_a_bid(self): + pass + + def call_partner(self): + pass + + def make_a_play(self, sub_state): + pass + + def get_valid_plays(self, leading): + all_plays = self.player.get_deck_values() + possible_plays = None + if leading: + if not self.table_status['trump broken']: + possible_plays = [card for card in all_plays + if not cards.get_card_suit(card) == self.table_status['trump suit']] + else: + leading_suit = self.table_status['played cards'][self.table_status["leading player"]].suit() + possible_plays = [card for card in all_plays + if cards.get_card_suit(card) == leading_suit] + + if not possible_plays: + return all_plays + return possible_plays + + +class RandomAI(BaseAI): def request_reshuffle(self): if random.randint(0, 1): return True @@ -57,18 +89,8 @@ class RandomAI: return random.choice(valid_plays) - def get_valid_plays(self, leading): - all_plays = self.player.get_deck_values() - possible_plays = None - if leading: - if not self.table_status['trump broken']: - possible_plays = [card for card in all_plays - if not cards.get_card_suit(card) == self.table_status['trump suit']] - else: - leading_suit = self.table_status['played cards'][self.table_status["leading player"]].suit() - possible_plays = [card for card in all_plays - if cards.get_card_suit(card) == leading_suit] - if not possible_plays: - return all_plays - return possible_plays +class VivianAI(BaseAI): + + def __init__(self, table_status, player=None): + super().__init__(table_status, player=None) diff --git a/cards.py b/cards.py index 87d6f49..9a87949 100644 --- a/cards.py +++ b/cards.py @@ -126,6 +126,7 @@ class Deck(): self.sort_order = sort_order self.selectable = selectable self.selected_card = -1 + self.prev_selected = -1 self.cards = [] self.line_width = 5 @@ -305,7 +306,8 @@ class Deck(): relative_pos_x = pos[0] - self.x relative_pos_y = pos[1] - self.y mouse_pos = (relative_pos_x, relative_pos_y) - prev_selected = self.selected_card + if self.selected_card >= 0: + self.prev_selected = self.selected_card self.selected_card = -1 if not self.draw_from_last: for i, card in enumerate(reversed(self.cards)): @@ -319,7 +321,7 @@ class Deck(): break self.update_deck_display() - return prev_selected == self.selected_card and self.selected_card >= 0 + return (self.prev_selected == self.selected_card)and self.selected_card >= 0 return False diff --git a/players.py b/players.py index 95fecd4..616fc54 100644 --- a/players.py +++ b/players.py @@ -245,7 +245,7 @@ class MainPlayer(Player): mouse_pos = pygame.mouse.get_pos() if self.rect.collidepoint(mouse_pos): reselect = self.get_selected_card(mouse_pos) - if self.selected_card >= 0 and not reselect: + if self.selected_card >= 0: card = 1 if self.double_clicking: @@ -257,7 +257,7 @@ class MainPlayer(Player): card = self.remove_selected_card() else: card = 1 - self.deselect_card() + self.deselect_card() self.double_clicking = False else: self.double_clicking = True