Clean up and comment on Table
parent
33fc0b1a5c
commit
1abed6b82a
83
table.py
83
table.py
|
@ -2,7 +2,6 @@ import pygame
|
||||||
import UI
|
import UI
|
||||||
import cards
|
import cards
|
||||||
import players
|
import players
|
||||||
import view
|
|
||||||
import random
|
import random
|
||||||
import copy
|
import copy
|
||||||
import time
|
import time
|
||||||
|
@ -10,7 +9,7 @@ from signalslot import Signal
|
||||||
from ai_comp import ai
|
from ai_comp import ai
|
||||||
from game_consts import GameState, PlayerRole, STARTING_HAND, NUM_OF_PLAYERS, CALL_EVENT
|
from game_consts import GameState, PlayerRole, STARTING_HAND, NUM_OF_PLAYERS, CALL_EVENT
|
||||||
|
|
||||||
VIEW_TRANSPARENT = False # Make the text box not transparent
|
VIEW_TRANSPARENT = False # Make the text box not transparent, DEBUG only
|
||||||
|
|
||||||
|
|
||||||
class Table:
|
class Table:
|
||||||
|
@ -85,7 +84,7 @@ class Table:
|
||||||
# Prepare the card with dimensions
|
# Prepare the card with dimensions
|
||||||
w_deck = min(self.height, self.width) * 0.18
|
w_deck = min(self.height, self.width) * 0.18
|
||||||
l_deck = min(self.width, self.height) * 0.7
|
l_deck = min(self.width, self.height) * 0.7
|
||||||
# This is not a deck as it will never be draw
|
# This is not a deck as it will never be drawn
|
||||||
self.discard_deck = cards.prepare_playing_cards(int(w_deck*0.6), int(w_deck*0.6 *97/71))
|
self.discard_deck = cards.prepare_playing_cards(int(w_deck*0.6), int(w_deck*0.6 *97/71))
|
||||||
game_margins = 5
|
game_margins = 5
|
||||||
|
|
||||||
|
@ -228,6 +227,13 @@ class Table:
|
||||||
return x+self.x, y+self.y
|
return x+self.x, y+self.y
|
||||||
|
|
||||||
def center_text_on_surface(self, surf, rendered_text, clear_colour):
|
def center_text_on_surface(self, surf, rendered_text, clear_colour):
|
||||||
|
"""
|
||||||
|
Blit the text centered in the surface rect box
|
||||||
|
:param surf:
|
||||||
|
:param rendered_text:
|
||||||
|
:param clear_colour:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
line_center = surf.get_rect().center
|
line_center = surf.get_rect().center
|
||||||
text_rect = rendered_text.get_rect(center=line_center)
|
text_rect = rendered_text.get_rect(center=line_center)
|
||||||
surf.fill(clear_colour)
|
surf.fill(clear_colour)
|
||||||
|
@ -252,6 +258,12 @@ class Table:
|
||||||
time.sleep(delay_time)
|
time.sleep(delay_time)
|
||||||
|
|
||||||
def update_players_role(self, player_num, update_now=True):
|
def update_players_role(self, player_num, update_now=True):
|
||||||
|
"""
|
||||||
|
Update the display of the player roles. Blank if UNKNOWN
|
||||||
|
:param player_num:
|
||||||
|
:param update_now:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
self.player_stats[player_num][1].fill((255, 255, 255, 255*VIEW_TRANSPARENT))
|
self.player_stats[player_num][1].fill((255, 255, 255, 255*VIEW_TRANSPARENT))
|
||||||
role_text = ''
|
role_text = ''
|
||||||
colour = (128, 64, 192)
|
colour = (128, 64, 192)
|
||||||
|
@ -269,6 +281,13 @@ class Table:
|
||||||
self.update_table.emit()
|
self.update_table.emit()
|
||||||
|
|
||||||
def update_player_wins(self, player_num, update_now=True, clear=False):
|
def update_player_wins(self, player_num, update_now=True, clear=False):
|
||||||
|
"""
|
||||||
|
Update the display of player's number of wins.
|
||||||
|
:param player_num:
|
||||||
|
:param update_now:
|
||||||
|
:param clear:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
self.player_stats[player_num][2].fill((255, 255, 255, 255*VIEW_TRANSPARENT))
|
self.player_stats[player_num][2].fill((255, 255, 255, 255*VIEW_TRANSPARENT))
|
||||||
if not clear:
|
if not clear:
|
||||||
if self.players[player_num].score > 1:
|
if self.players[player_num].score > 1:
|
||||||
|
@ -283,6 +302,13 @@ class Table:
|
||||||
self.update_table.emit()
|
self.update_table.emit()
|
||||||
|
|
||||||
def update_player_bid(self, player_num, bid, update_now=True):
|
def update_player_bid(self, player_num, bid, update_now=True):
|
||||||
|
"""
|
||||||
|
Update the display of the player's last bid.
|
||||||
|
:param player_num:
|
||||||
|
:param update_now:
|
||||||
|
:param clear:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
self.player_stats[player_num][2].fill((255, 255, 255, 255 * VIEW_TRANSPARENT))
|
self.player_stats[player_num][2].fill((255, 255, 255, 255 * VIEW_TRANSPARENT))
|
||||||
if not bid:
|
if not bid:
|
||||||
rendered_text = self.player_font.render("Pass".format(self.players[player_num].score), True,
|
rendered_text = self.player_font.render("Pass".format(self.players[player_num].score), True,
|
||||||
|
@ -473,7 +499,7 @@ class Table:
|
||||||
|
|
||||||
def start_bidding(self, game_events):
|
def start_bidding(self, game_events):
|
||||||
"""
|
"""
|
||||||
The bidding procedure.
|
The bidding procedure. Flag up if player input required
|
||||||
:return: Whether bidding is completed
|
:return: Whether bidding is completed
|
||||||
"""
|
"""
|
||||||
# Highest bid: 7 NoTrump. No further check required
|
# Highest bid: 7 NoTrump. No further check required
|
||||||
|
@ -484,7 +510,7 @@ class Table:
|
||||||
if not self.terminal_play:
|
if not self.terminal_play:
|
||||||
self.calling_panel.visible = True
|
self.calling_panel.visible = True
|
||||||
self.update_table.emit()
|
self.update_table.emit()
|
||||||
return
|
return False
|
||||||
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:
|
||||||
|
@ -684,6 +710,11 @@ class Table:
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
|
|
||||||
def reveal_all_roles(self, partner):
|
def reveal_all_roles(self, partner):
|
||||||
|
"""
|
||||||
|
Update all roles once the partner card is shown
|
||||||
|
:param partner:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
self.players[partner].role = PlayerRole.PARTNER
|
self.players[partner].role = PlayerRole.PARTNER
|
||||||
self.table_status['defender']['wins'] += self.players[partner].score
|
self.table_status['defender']['wins'] += self.players[partner].score
|
||||||
for i in range(NUM_OF_PLAYERS):
|
for i in range(NUM_OF_PLAYERS):
|
||||||
|
@ -692,6 +723,10 @@ class Table:
|
||||||
self.table_status['attacker']['wins'] += self.players[i].score
|
self.table_status['attacker']['wins'] += self.players[i].score
|
||||||
|
|
||||||
def reset_game(self):
|
def reset_game(self):
|
||||||
|
"""
|
||||||
|
Reset all variables for the next game
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
for player in self.players:
|
for player in self.players:
|
||||||
while not player.is_empty():
|
while not player.is_empty():
|
||||||
self.discard_deck.append(player.remove_card())
|
self.discard_deck.append(player.remove_card())
|
||||||
|
@ -712,41 +747,3 @@ class Table:
|
||||||
self.write_message("", line=2)
|
self.write_message("", line=2)
|
||||||
self.display_current_player()
|
self.display_current_player()
|
||||||
self.update_table.emit()
|
self.update_table.emit()
|
||||||
|
|
||||||
|
|
||||||
class TestView(view.PygView):
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
self.table = Table(0, 0, self.width, self.height, (0, 0, 255))
|
|
||||||
self.table.update_table.connect(self.draw_table)
|
|
||||||
self.draw_table()
|
|
||||||
|
|
||||||
def draw_table(self, **kwargs):
|
|
||||||
self.screen.blit(self.background, (0, 0))
|
|
||||||
self.screen.blit(self.table.background, self.table.get_pos())
|
|
||||||
for player in self.table.players:
|
|
||||||
self.screen.blit(player.deck_surface, player.get_pos())
|
|
||||||
for playerzone in self.table.players_playzone:
|
|
||||||
self.screen.blit(playerzone.deck_surface, playerzone.get_pos())
|
|
||||||
pygame.display.flip()
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
running = True
|
|
||||||
while running:
|
|
||||||
for event in pygame.event.get():
|
|
||||||
if event.type == pygame.QUIT:
|
|
||||||
running = False
|
|
||||||
elif event.type == pygame.KEYDOWN:
|
|
||||||
if event.key == pygame.K_ESCAPE:
|
|
||||||
running = False
|
|
||||||
if event.key == pygame.K_p:
|
|
||||||
print('add cards')
|
|
||||||
pass
|
|
||||||
|
|
||||||
pygame.quit()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
test_view = TestView(900, 600, clear_colour=(0, 0, 0))
|
|
||||||
test_view.run()
|
|
||||||
|
|
Loading…
Reference in New Issue