Add more status messages

master
En Yi 2019-06-15 13:42:57 +01:00
parent d6c7b77f21
commit 8e89c163c5
2 changed files with 42 additions and 40 deletions

View File

@ -73,13 +73,14 @@ class Player(cards.Deck):
The procedure to make a bid The procedure to make a bid
:return: A valid bid number :return: A valid bid number
""" """
msg = ''
while True: while True:
bid = input("Please input a bid in the format 'number' + 'suit' \n" bid = input("Please input a bid in the format 'number' + 'suit' \n"
"To pass, enter nothing. \n" "To pass, enter nothing. \n"
"e.g 4d is 4 Diamond, 6n is 6 No Trump \n") "e.g 4d is 4 Diamond, 6n is 6 No Trump \n")
if not bid: if not bid:
return 0 return 0, msg
bid = cards.convert_bid_string(bid) bid = cards.convert_bid_string(bid)
if bid < 0: if bid < 0:
@ -87,7 +88,7 @@ class Player(cards.Deck):
continue continue
if self._table_status["bid"] < bid: if self._table_status["bid"] < bid:
return bid return bid, msg
else: else:
if bid > 75: if bid > 75:
print("You cannot bid beyond 7 No Trump") print("You cannot bid beyond 7 No Trump")
@ -100,6 +101,7 @@ class Player(cards.Deck):
:return: A valid card value :return: A valid card value
""" """
current_card_values = self.get_deck_values() current_card_values = self.get_deck_values()
msg = ''
while True: while True:
partner = input("Please call your partner card. Enter card number + suit number \n" partner = input("Please call your partner card. Enter card number + suit number \n"
"e.g. qs is Queen Spade, 8c is 8 Clubs, ah is Ace Hearts\n") "e.g. qs is Queen Spade, 8c is 8 Clubs, ah is Ace Hearts\n")
@ -108,7 +110,7 @@ class Player(cards.Deck):
if partner in current_card_values: if partner in current_card_values:
print("Please call a card outside of your hand") print("Please call a card outside of your hand")
elif cards.card_check(partner): elif cards.card_check(partner):
return partner return partner, msg
else: else:
print("Invalid card call") print("Invalid card call")
@ -117,19 +119,20 @@ class Player(cards.Deck):
The procedure to make a play in a round The procedure to make a play in a round
:return: A valid Card :return: A valid Card
""" """
msg = ''
while True: while True:
play = input("Please play a card.Enter card number + suit number \n" play = input("Please play a card.Enter card number + suit number \n"
"e.g. qs is Queen Spade, 8c is 8 Clubs, ah is Ace Hearts\n") "e.g. qs is Queen Spade, 8c is 8 Clubs, ah is Ace Hearts\n")
if play == "v": #if play == "v":
pprint.pprint(self._table_status) # pprint.pprint(self._table_status)
else: #else:
play = cards.convert_input_string(play) play = cards.convert_input_string(play)
if play > 0: if play > 0:
valid = self.check_for_valid_plays(play, substate == 0) valid = self.check_for_valid_plays(play, substate == 0)
if valid: if valid:
[_, pos] = self.check_card_in(play) [_, pos] = self.check_card_in(play)
return self.remove_card(pos) return self.remove_card(pos), msg
print("Invalid play") print("Invalid play")
@ -198,25 +201,21 @@ class MainPlayer(Player):
for event in game_events: for event in game_events:
if event.type == CALL_EVENT: if event.type == CALL_EVENT:
bid = event.call bid = event.call
print(bid)
if not bid: if not bid:
return 0 return 0, ''
bid = cards.convert_bid_string(bid) bid = cards.convert_bid_string(bid)
if bid < 0: if bid < 0:
print("Error in processing bid") return -1, "Invalid bid"
return -1
if self._table_status["bid"] >= bid: if self._table_status["bid"] >= bid:
if bid > 75: if bid > 75:
print("You cannot bid beyond 7 No Trump") return -1, "You cannot bid beyond 7 No Trump"
else: else:
print("You might need to bid higher") return -1, "You might need to bid higher"
return -1 return bid, ''
return bid return -1, ''
return -1
return -1
def call_partner(self, game_events=None): def call_partner(self, game_events=None):
if game_events: if game_events:
@ -226,22 +225,19 @@ class MainPlayer(Player):
partner = event.call partner = event.call
partner = cards.convert_input_string(partner) partner = cards.convert_input_string(partner)
if partner in current_card_values: if partner in current_card_values:
print("Please call a card outside of your hand") return False, "Please call a card outside of your hand"
return False
elif cards.card_check(partner): elif cards.card_check(partner):
return partner return partner, ""
else: else:
print("Invalid card call") return False, "Invalid card call"
return False 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
msg = ""
if game_events: if game_events:
for event in game_events: for event in game_events:
if event.type == pygame.MOUSEBUTTONUP and event.button == 1: if event.type == pygame.MOUSEBUTTONUP and event.button == 1:
print('mouse click')
mouse_pos = pygame.mouse.get_pos() mouse_pos = pygame.mouse.get_pos()
if self.rect.collidepoint(mouse_pos): if self.rect.collidepoint(mouse_pos):
reselect = self.get_selected_card(mouse_pos) reselect = self.get_selected_card(mouse_pos)
@ -250,13 +246,13 @@ class MainPlayer(Player):
if self.double_clicking: if self.double_clicking:
pygame.time.set_timer(DOUBLE_CLICK_EVENT, 0) pygame.time.set_timer(DOUBLE_CLICK_EVENT, 0)
print('Double clicked')
if reselect: if reselect:
card_value = self.cards[self.selected_card].value card_value = self.cards[self.selected_card].value
if self.check_for_valid_plays(card_value, substate == 0): if self.check_for_valid_plays(card_value, substate == 0):
card = self.remove_selected_card() card = self.remove_selected_card()
else: else:
card = 1 card = 1
msg = "Invalid card play"
self.deselect_card() self.deselect_card()
self.double_clicking = False self.double_clicking = False
else: else:
@ -269,9 +265,8 @@ class MainPlayer(Player):
if event.type == DOUBLE_CLICK_EVENT: if event.type == DOUBLE_CLICK_EVENT:
pygame.time.set_timer(DOUBLE_CLICK_EVENT, 0) pygame.time.set_timer(DOUBLE_CLICK_EVENT, 0)
self.double_clicking = False self.double_clicking = False
print('double click disabled')
return card return card, msg
def request_reshuffle(self, game_events=None): def request_reshuffle(self, game_events=None):
# Players can choose NOT to reshuffle # Players can choose NOT to reshuffle

View File

@ -514,15 +514,16 @@ class Table:
else: else:
player_bid = self.players[self.current_player].make_decision(self.game_state, 0) player_bid = self.players[self.current_player].make_decision(self.game_state, 0)
else: else:
player_bid = self.players[self.current_player].make_decision(self.game_state, 0, game_events) player_bid, msg = self.players[self.current_player].make_decision(self.game_state, 0, game_events)
if msg:
self.write_message(msg, delay_time=0, update_now=True)
if player_bid < 0: if player_bid < 0:
return False return False
self.require_player_input = False self.require_player_input = False
self.write_message("", delay_time=0, update_now=True)
if not self.terminal_play: if not self.terminal_play:
self.calling_panel.visible = False self.calling_panel.visible = False
self.update_table.emit() self.update_table.emit()
if not player_bid: if not player_bid:
if not self.first_player: # Starting bidder pass do not count at the start if not self.first_player: # Starting bidder pass do not count at the start
self.passes += 1 self.passes += 1
@ -571,10 +572,13 @@ class Table:
# 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: else:
partner = self.players[self.current_player].make_decision(self.game_state, 1, game_events) partner, msg = self.players[self.current_player].make_decision(self.game_state, 1, game_events)
if msg:
self.write_message(msg, delay_time=0, update_now=True)
if not partner: if not partner:
return False return False
self.table_status["partner"] = partner self.table_status["partner"] = partner
self.require_player_input = False self.require_player_input = False
if not self.terminal_play: if not self.terminal_play:
@ -623,8 +627,9 @@ class Table:
else: else:
card = self.players[self.current_player].make_decision(self.game_state, 0) card = self.players[self.current_player].make_decision(self.game_state, 0)
else: else:
card = self.players[self.current_player].make_decision(self.game_state, 0, game_events) card, msg = self.players[self.current_player].make_decision(self.game_state, 0, game_events)
if msg:
self.write_message(msg, delay_time=0, update_now=True)
if not type(card) is cards.Card: if not type(card) is cards.Card:
if card: if card:
self.update_table.emit() self.update_table.emit()
@ -643,7 +648,9 @@ class Table:
else: else:
card = self.players[self.current_player].make_decision(self.game_state, 1) card = self.players[self.current_player].make_decision(self.game_state, 1)
else: else:
card = self.players[self.current_player].make_decision(self.game_state, 1, game_events) card, msg = self.players[self.current_player].make_decision(self.game_state, 1, game_events)
if msg:
self.write_message(msg, delay_time=0, update_now=False)
if not type(card) is cards.Card: if not type(card) is cards.Card:
if card: if card:
self.update_table.emit() self.update_table.emit()