diff --git a/cards.py b/cards.py index e7f92dd..87d6f49 100644 --- a/cards.py +++ b/cards.py @@ -439,7 +439,7 @@ def convert_input_string(string): def convert_bid_string(string): string = string.lower() try: - if string[0].isdecimal() and string[1].isalpha(): + if len(string)>1 and string[0].isdecimal() and string[1].isalpha(): return int(string[0])*10 + BID_SYMBOLS[string[1]]//100 return -1 except KeyError: diff --git a/main.py b/main.py index 380ae87..a12eda2 100644 --- a/main.py +++ b/main.py @@ -100,7 +100,7 @@ if __name__ == '__main__': with open('last_game_rng.rng', 'wb') as f: pickle.dump(rng_state, f) - main_view = GameScreen(1000, 700, clear_colour=(255, 0, 0), + main_view = GameScreen(900, 600, clear_colour=(255, 0, 0), autoplay=AUTOPLAY, view_all_cards=VIEW_ALL_CARDS) main_view.run() \ No newline at end of file diff --git a/players.py b/players.py index ccf6e4d..ffab80e 100644 --- a/players.py +++ b/players.py @@ -61,7 +61,7 @@ class Player(cards.Deck): else: if self.AI: return self.AI.call_partner() - return self.call_partner() + return self.call_partner(game_events=game_events) if game_state == GameState.PLAYING: if self.AI: play = self.AI.make_a_play(sub_state) @@ -95,7 +95,7 @@ class Player(cards.Deck): else: print("You might need to bid higher") - def call_partner(self): + def call_partner(self, game_events=None): """ The procedure to call a partner :return: A valid card value @@ -220,6 +220,23 @@ class MainPlayer(Player): return -1 return -1 + def call_partner(self, game_events=None): + if game_events: + for event in game_events: + if event.type == CALL_EVENT: + current_card_values = self.get_deck_values() + partner = event.call + partner = cards.convert_input_string(partner) + if partner in current_card_values: + print("Please call a card outside of your hand") + return False + elif cards.card_check(partner): + return partner + else: + print("Invalid card call") + return False + return False + return False def make_a_play(self, substate, game_events=None): card = None diff --git a/table.py b/table.py index b3bdc72..704a628 100644 --- a/table.py +++ b/table.py @@ -192,16 +192,20 @@ class Table: self.ongoing = False self.require_player_input = False - self.calling_panel = UI.CallPanel(playdeckx[0]+w_deck+5,playdecky[0]+w_deck-140, - 250, 140) + self.calling_panel = UI.CallPanel(playdeckx[0]+w_deck+5,playdecky[0]+w_deck-100, + 250, 100) self.calling_panel.parent = self self.calling_panel.visible = False self.parent = None self.calling_panel.confirm_output.connect(self.emit_call) + self.yes_button = UI.Button(playdeckx[0]+w_deck+5,playdecky[0]+w_deck-50, + 100, 50, text='yes') + self.no_button = UI.Button(playdeckx[0] + w_deck + 5, playdecky[0] + w_deck - 50, + 100, 50) + def emit_call(self, output, **kwargs): - print(output) pygame.event.post(pygame.event.Event(CALL_EVENT, call=output)) def get_offset_pos(self): @@ -396,8 +400,6 @@ class Table: self.calling_panel.cancel_button.visible = True self.calling_panel.redraw() - self.update_table.emit() - def start_bidding(self, game_events): """ The bidding procedure. @@ -417,7 +419,7 @@ class Table: player_bid = self.players[self.current_player].make_decision(self.game_state, 0, game_events) if player_bid < 0: - return + return False self.require_player_input = False self.calling_panel.visible = False self.update_table.emit() @@ -441,14 +443,36 @@ class Table: if self.first_player: self.first_player = False time.sleep(0.5) + if self.passes == NUM_OF_PLAYERS - 1 or self.table_status["bid"] == 75: + self.calling_panel.list1.replace_list(['2','3','4','5','6','7','8','9','10','J','Q','K','A']) + self.calling_panel.list2.replace_list(['Clubs', 'Diamonds', 'Hearts', 'Spades']) + self.calling_panel.cancel_button.visible = False + self.calling_panel.redraw() return False else: - self.write_message("Player {0:d} is the bid winner!".format(self.current_player), delay_time=1) - msg = "Player {0:d} is calling a partner...".format(self.current_player) - self.write_message(msg, delay_time=1) - self.display_current_player(self.current_player) - # Ask for the partner card - self.table_status["partner"] = self.players[self.current_player].make_decision(self.game_state, 1) + if not self.require_player_input: + self.write_message("Player {0:d} is the bid winner!".format(self.current_player), delay_time=1) + msg = "Player {0:d} is calling a partner...".format(self.current_player) + self.write_message(msg, delay_time=1) + self.display_current_player(self.current_player) + if not self.players[self.current_player].AI: + self.require_player_input = True + self.calling_panel.visible = True + self.update_table.emit() + return False + else: + # Ask for the partner card + self.table_status["partner"] = self.players[self.current_player].make_decision(self.game_state, 1) + else: + partner = self.players[self.current_player].make_decision(self.game_state, 1, + game_events) + + if not partner: + return False + self.table_status["partner"] = partner + self.require_player_input = False + self.calling_panel.visible = False + self.update_table.emit() # Setup the table status before the play starts self.table_status['partner reveal'] = False