Fix mouse clicks and prepare bot implementation
parent
8ed59d9556
commit
5cd390a09b
|
@ -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)
|
||||
|
|
6
cards.py
6
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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue