Integrate panel to partner call
parent
f88b0abda3
commit
5a3c191c12
2
cards.py
2
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:
|
||||
|
|
2
main.py
2
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()
|
21
players.py
21
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
|
||||
|
|
48
table.py
48
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
|
||||
|
|
Loading…
Reference in New Issue