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):
|
def convert_bid_string(string):
|
||||||
string = string.lower()
|
string = string.lower()
|
||||||
try:
|
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 int(string[0])*10 + BID_SYMBOLS[string[1]]//100
|
||||||
return -1
|
return -1
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
|
2
main.py
2
main.py
|
@ -100,7 +100,7 @@ if __name__ == '__main__':
|
||||||
with open('last_game_rng.rng', 'wb') as f:
|
with open('last_game_rng.rng', 'wb') as f:
|
||||||
pickle.dump(rng_state, 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)
|
autoplay=AUTOPLAY, view_all_cards=VIEW_ALL_CARDS)
|
||||||
|
|
||||||
main_view.run()
|
main_view.run()
|
21
players.py
21
players.py
|
@ -61,7 +61,7 @@ class Player(cards.Deck):
|
||||||
else:
|
else:
|
||||||
if self.AI:
|
if self.AI:
|
||||||
return self.AI.call_partner()
|
return self.AI.call_partner()
|
||||||
return self.call_partner()
|
return self.call_partner(game_events=game_events)
|
||||||
if game_state == GameState.PLAYING:
|
if game_state == GameState.PLAYING:
|
||||||
if self.AI:
|
if self.AI:
|
||||||
play = self.AI.make_a_play(sub_state)
|
play = self.AI.make_a_play(sub_state)
|
||||||
|
@ -95,7 +95,7 @@ class Player(cards.Deck):
|
||||||
else:
|
else:
|
||||||
print("You might need to bid higher")
|
print("You might need to bid higher")
|
||||||
|
|
||||||
def call_partner(self):
|
def call_partner(self, game_events=None):
|
||||||
"""
|
"""
|
||||||
The procedure to call a partner
|
The procedure to call a partner
|
||||||
:return: A valid card value
|
:return: A valid card value
|
||||||
|
@ -220,6 +220,23 @@ class MainPlayer(Player):
|
||||||
return -1
|
return -1
|
||||||
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):
|
def make_a_play(self, substate, game_events=None):
|
||||||
card = None
|
card = None
|
||||||
|
|
36
table.py
36
table.py
|
@ -192,16 +192,20 @@ class Table:
|
||||||
self.ongoing = False
|
self.ongoing = False
|
||||||
self.require_player_input = False
|
self.require_player_input = False
|
||||||
|
|
||||||
self.calling_panel = UI.CallPanel(playdeckx[0]+w_deck+5,playdecky[0]+w_deck-140,
|
self.calling_panel = UI.CallPanel(playdeckx[0]+w_deck+5,playdecky[0]+w_deck-100,
|
||||||
250, 140)
|
250, 100)
|
||||||
self.calling_panel.parent = self
|
self.calling_panel.parent = self
|
||||||
self.calling_panel.visible = False
|
self.calling_panel.visible = False
|
||||||
self.parent = None
|
self.parent = None
|
||||||
|
|
||||||
self.calling_panel.confirm_output.connect(self.emit_call)
|
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):
|
def emit_call(self, output, **kwargs):
|
||||||
print(output)
|
|
||||||
pygame.event.post(pygame.event.Event(CALL_EVENT, call=output))
|
pygame.event.post(pygame.event.Event(CALL_EVENT, call=output))
|
||||||
|
|
||||||
def get_offset_pos(self):
|
def get_offset_pos(self):
|
||||||
|
@ -396,8 +400,6 @@ class Table:
|
||||||
self.calling_panel.cancel_button.visible = True
|
self.calling_panel.cancel_button.visible = True
|
||||||
self.calling_panel.redraw()
|
self.calling_panel.redraw()
|
||||||
|
|
||||||
self.update_table.emit()
|
|
||||||
|
|
||||||
def start_bidding(self, game_events):
|
def start_bidding(self, game_events):
|
||||||
"""
|
"""
|
||||||
The bidding procedure.
|
The bidding procedure.
|
||||||
|
@ -417,7 +419,7 @@ class Table:
|
||||||
player_bid = self.players[self.current_player].make_decision(self.game_state, 0, game_events)
|
player_bid = self.players[self.current_player].make_decision(self.game_state, 0, game_events)
|
||||||
|
|
||||||
if player_bid < 0:
|
if player_bid < 0:
|
||||||
return
|
return False
|
||||||
self.require_player_input = False
|
self.require_player_input = False
|
||||||
self.calling_panel.visible = False
|
self.calling_panel.visible = False
|
||||||
self.update_table.emit()
|
self.update_table.emit()
|
||||||
|
@ -441,14 +443,36 @@ class Table:
|
||||||
if self.first_player:
|
if self.first_player:
|
||||||
self.first_player = False
|
self.first_player = False
|
||||||
time.sleep(0.5)
|
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
|
return False
|
||||||
else:
|
else:
|
||||||
|
if not self.require_player_input:
|
||||||
self.write_message("Player {0:d} is the bid winner!".format(self.current_player), delay_time=1)
|
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)
|
msg = "Player {0:d} is calling a partner...".format(self.current_player)
|
||||||
self.write_message(msg, delay_time=1)
|
self.write_message(msg, delay_time=1)
|
||||||
self.display_current_player(self.current_player)
|
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
|
# Ask for the partner card
|
||||||
self.table_status["partner"] = self.players[self.current_player].make_decision(self.game_state, 1)
|
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
|
# Setup the table status before the play starts
|
||||||
self.table_status['partner reveal'] = False
|
self.table_status['partner reveal'] = False
|
||||||
|
|
Loading…
Reference in New Issue