Fix mouse clicks and prepare bot implementation

master
En Yi 2019-06-14 13:49:01 +01:00
parent 8ed59d9556
commit 5cd390a09b
3 changed files with 44 additions and 20 deletions

View File

@ -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)

View File

@ -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

View File

@ -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