Integrate panel to partner call

master
En Yi 2019-06-14 00:31:08 +01:00
parent f88b0abda3
commit 5a3c191c12
4 changed files with 57 additions and 16 deletions

View File

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

View File

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

View File

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

View File

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