Implement hidden cards
parent
6b8d3ba3b6
commit
9a9f52185e
41
cards.py
41
cards.py
|
@ -22,6 +22,7 @@ INPUT_SYMBOLS = {"c": 100, "d": 200, "h": 300, "s": 400, "n":500, "a": 14,
|
||||||
"8": 8, "9": 9, "10": 10, "j": 11, "q": 12, "k": 13,
|
"8": 8, "9": 9, "10": 10, "j": 11, "q": 12, "k": 13,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class DeckReveal(Enum):
|
class DeckReveal(Enum):
|
||||||
SHOW_ALL = 1
|
SHOW_ALL = 1
|
||||||
HIDE_ALL = 2
|
HIDE_ALL = 2
|
||||||
|
@ -36,7 +37,7 @@ class DeckSort(Enum):
|
||||||
|
|
||||||
class Card(pygame.sprite.Sprite):
|
class Card(pygame.sprite.Sprite):
|
||||||
|
|
||||||
def __init__(self, x, y, width, height, value, hidden=False, image_data=None, parent=None):
|
def __init__(self, x, y, width, height, value, hidden=False, image_data=None, backimage_data=None, parent=None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.x = x
|
self.x = x
|
||||||
self.y = y
|
self.y = y
|
||||||
|
@ -48,10 +49,16 @@ class Card(pygame.sprite.Sprite):
|
||||||
self.hidden = hidden
|
self.hidden = hidden
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
|
|
||||||
|
self.image = None
|
||||||
|
self.backimage = None
|
||||||
|
|
||||||
if image_data:
|
if image_data:
|
||||||
self.image = image_data
|
self.image = image_data
|
||||||
self.image = pygame.transform.scale(self.image, (self.width, self.height))
|
self.image = pygame.transform.scale(self.image, (self.width, self.height))
|
||||||
|
|
||||||
|
if backimage_data:
|
||||||
|
self.backimage = backimage_data
|
||||||
|
self.backimage = pygame.transform.scale(self.backimage, (self.width, self.height))
|
||||||
# Display Value for Debug Purposes
|
# Display Value for Debug Purposes
|
||||||
#myfont = pygame.font.SysFont("None", 16)
|
#myfont = pygame.font.SysFont("None", 16)
|
||||||
#mytext = myfont.render(str(self.value), True, (0, 0, 0))
|
#mytext = myfont.render(str(self.value), True, (0, 0, 0))
|
||||||
|
@ -147,7 +154,11 @@ class Deck():
|
||||||
self.set_card_positions()
|
self.set_card_positions()
|
||||||
|
|
||||||
def set_card_positions(self):
|
def set_card_positions(self):
|
||||||
# TODO: Fix vertical card positioning
|
"""
|
||||||
|
Calculate the card positions, given the spacing.
|
||||||
|
If there is too many cards for the given spacing, the spacing is adjusted to fit.
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
number_of_cards = len(self.cards)
|
number_of_cards = len(self.cards)
|
||||||
|
|
||||||
if number_of_cards > 0:
|
if number_of_cards > 0:
|
||||||
|
@ -159,7 +170,6 @@ class Deck():
|
||||||
card.x = start_point + self.default_spacing * i
|
card.x = start_point + self.default_spacing * i
|
||||||
card.y = (self.width - self.cards[0].height) / 2
|
card.y = (self.width - self.cards[0].height) / 2
|
||||||
else:
|
else:
|
||||||
# TODO: make sure that deck length is always longer than card width
|
|
||||||
adjusted_spacing = (self.length - self.cards[0].width)/(number_of_cards-1)
|
adjusted_spacing = (self.length - self.cards[0].width)/(number_of_cards-1)
|
||||||
|
|
||||||
start_point = 0
|
start_point = 0
|
||||||
|
@ -171,7 +181,6 @@ class Deck():
|
||||||
|
|
||||||
if total_card_length <= self.length:
|
if total_card_length <= self.length:
|
||||||
start_point = (self.length - total_card_length)/2
|
start_point = (self.length - total_card_length)/2
|
||||||
#start_point = 0
|
|
||||||
for (i, card) in enumerate(self.cards):
|
for (i, card) in enumerate(self.cards):
|
||||||
card.y = start_point + self.default_spacing * i
|
card.y = start_point + self.default_spacing * i
|
||||||
card.x = (self.width - self.cards[0].width) / 2
|
card.x = (self.width - self.cards[0].width) / 2
|
||||||
|
@ -186,17 +195,33 @@ class Deck():
|
||||||
self.update_deck_display()
|
self.update_deck_display()
|
||||||
|
|
||||||
def update_deck_display(self):
|
def update_deck_display(self):
|
||||||
|
"""
|
||||||
|
Blits the cards onto the deck surface. Called when the deck is modified.
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
self.deck_surface.fill(CLEARCOLOUR)
|
self.deck_surface.fill(CLEARCOLOUR)
|
||||||
self.deck_surface.blit(self.background, (0, 0))
|
self.deck_surface.blit(self.background, (0, 0))
|
||||||
if not self.is_empty():
|
if not self.is_empty():
|
||||||
if self.draw_from_last:
|
if self.draw_from_last:
|
||||||
for card in reversed(self.cards):
|
for card in reversed(self.cards):
|
||||||
self.deck_surface.blit(card.image, (card.x, card.y))
|
if self.deck_reveal == DeckReveal.SHOW_ALL:
|
||||||
|
self.deck_surface.blit(card.image, (card.x, card.y))
|
||||||
|
elif self.deck_reveal == DeckReveal.HIDE_ALL:
|
||||||
|
self.deck_surface.blit(card.backimage, (card.x, card.y))
|
||||||
else:
|
else:
|
||||||
for card in self.cards:
|
for card in self.cards:
|
||||||
self.deck_surface.blit(card.image, (card.x, card.y))
|
if self.deck_reveal == DeckReveal.SHOW_ALL:
|
||||||
|
self.deck_surface.blit(card.image, (card.x, card.y))
|
||||||
|
elif self.deck_reveal == DeckReveal.HIDE_ALL:
|
||||||
|
self.deck_surface.blit(card.backimage, (card.x, card.y))
|
||||||
|
|
||||||
def remove_card(self, pos=-1):
|
def remove_card(self, pos=-1):
|
||||||
|
"""
|
||||||
|
Remove a card from the deck.
|
||||||
|
Check first if the card is in deck to get the position
|
||||||
|
:param pos: Position of the card to be removed
|
||||||
|
:return: Card
|
||||||
|
"""
|
||||||
if not self.is_empty():
|
if not self.is_empty():
|
||||||
if pos < 0:
|
if pos < 0:
|
||||||
card = self.cards.pop()
|
card = self.cards.pop()
|
||||||
|
@ -289,6 +314,7 @@ def prepare_playing_cards(display_w, display_h):
|
||||||
width = 71
|
width = 71
|
||||||
height = 96
|
height = 96
|
||||||
suits_position = [2, 3, 1, 0]
|
suits_position = [2, 3, 1, 0]
|
||||||
|
card_backimg = card_sprites.image_at((offset + (width+spacing)*3, 5*(height+spacing) + offset, width, height))
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
y = suits_position[i] * (height+spacing) + offset
|
y = suits_position[i] * (height+spacing) + offset
|
||||||
for j in range(13):
|
for j in range(13):
|
||||||
|
@ -297,7 +323,8 @@ def prepare_playing_cards(display_w, display_h):
|
||||||
else:
|
else:
|
||||||
x = offset
|
x = offset
|
||||||
card_img = card_sprites.image_at((x, y, width, height))
|
card_img = card_sprites.image_at((x, y, width, height))
|
||||||
all_cards.append(Card(0, 0, display_w, display_h, (i+1)*100 + j+2, image_data=card_img))
|
all_cards.append(Card(0, 0, display_w, display_h, (i+1)*100 + j+2,
|
||||||
|
image_data=card_img, backimage_data=card_backimg))
|
||||||
|
|
||||||
return all_cards
|
return all_cards
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ STARTING_HAND = 13
|
||||||
HIGHEST_CARD = 414
|
HIGHEST_CARD = 414
|
||||||
LOWEST_CARD = 102
|
LOWEST_CARD = 102
|
||||||
VIEW_TRANSPARENT = False
|
VIEW_TRANSPARENT = False
|
||||||
|
VIEW_ALL_CARDS = False
|
||||||
|
|
||||||
class GameState(Enum):
|
class GameState(Enum):
|
||||||
DEALING = 0
|
DEALING = 0
|
||||||
|
@ -145,10 +146,14 @@ class Table:
|
||||||
spacing = h_spacing
|
spacing = h_spacing
|
||||||
if vert:
|
if vert:
|
||||||
spacing = v_spacing
|
spacing = v_spacing
|
||||||
|
|
||||||
|
reveal_mode = cards.DeckReveal.HIDE_ALL
|
||||||
|
if i == 0 or VIEW_ALL_CARDS:
|
||||||
|
reveal_mode = cards.DeckReveal.SHOW_ALL
|
||||||
self.players.append(Player(playerx[i], playery[i],
|
self.players.append(Player(playerx[i], playery[i],
|
||||||
l_deck, w_deck,
|
l_deck, w_deck,
|
||||||
spacing, vert_orientation=vert,
|
spacing, vert_orientation=vert,
|
||||||
deck_reveal=cards.DeckReveal.HIDE_ALL))
|
deck_reveal=reveal_mode))
|
||||||
self.players[i].connect_to_table(self.table_status)
|
self.players[i].connect_to_table(self.table_status)
|
||||||
if i > 0:
|
if i > 0:
|
||||||
self.players[i].add_ai(ai.RandomAI(self.table_status))
|
self.players[i].add_ai(ai.RandomAI(self.table_status))
|
||||||
|
|
Loading…
Reference in New Issue