From fff3a50c99e11e58331b75cbef1af328211572a6 Mon Sep 17 00:00:00 2001 From: En Yi Date: Sat, 4 May 2019 16:45:08 +0100 Subject: [PATCH] Add card playing zone --- cards.py | 18 +++++++++++++++++- main.py | 23 +++++++++++++++++------ players.py | 47 +++++++++++++++++++++++++++++++++++++---------- 3 files changed, 71 insertions(+), 17 deletions(-) diff --git a/cards.py b/cards.py index 252032f..2aedf10 100644 --- a/cards.py +++ b/cards.py @@ -183,19 +183,35 @@ class PlayerDeck(Deck): # TODO: check if card num is selected, set selected, otherwise use it (by removing) pass + DATA_FOLDER = "data" + +def prepare_playing_cards(width, height): + try: # try to load images from the harddisk + card_img = pygame.image.load(os.path.join(DATA_FOLDER, 'diamond.jpg')) + except: + raise Exception("Cannot load image") # print error message and exit program + + all_cards = [] + + for i in range(4): + for j in range(13): + all_cards.append(Card(0, 0, width, height, i*100 + j+1, image_data=card_img)) + class test_screen(view.PygView): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + try: # try to load images from the harddisk card_img = pygame.image.load(os.path.join(DATA_FOLDER, 'diamond.jpg')) except: raise Exception("Cannot load image") # print error message and exit program + self.test_card = Card(50, 0, 50, 75, 111, image_data=card_img) self.test_deck = Deck(100, 100, 200, 100, 25) - self.test_deck.add_card(Card(50, 0, 50, 75, 412, image_data=card_img)) + self.test_deck.add_card() self.test_deck.add_card(Card(50, 0, 50, 75, 315, image_data=card_img)) self.test_deck.add_card(Card(50, 0, 50, 75, 210, image_data=card_img)) self.test_deck.add_card(Card(50, 0, 50, 75, 103, image_data=card_img)) diff --git a/main.py b/main.py index 2fc00a8..0edcdf2 100644 --- a/main.py +++ b/main.py @@ -1,17 +1,28 @@ import view import pygame +import players class GameScreen(view.PygView): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self.table = players.Table(0, 0, self.width, self.height, (0, 0, 255)) + self.table.update_table.connect(self.draw_table) + self.draw_table() def load_assets(self): pass - def draw_function(self): - pass + 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 @@ -29,16 +40,16 @@ class GameScreen(view.PygView): milliseconds = self.clock.tick(self.fps) #self.playtime += milliseconds / 1000.0 - self.draw_function() + #self.draw_function() - pygame.display.flip() - self.screen.blit(self.background, (0, 0)) + #pygame.display.flip() + #self.screen.blit(self.background, (0, 0)) pygame.quit() if __name__ == '__main__': - main_view = game_screen(640, 400, clear_colour=(255, 0, 0)) + main_view = GameScreen(640, 400, clear_colour=(255, 0, 0)) main_view.run() \ No newline at end of file diff --git a/players.py b/players.py index baa7bd4..7de7467 100644 --- a/players.py +++ b/players.py @@ -48,6 +48,7 @@ class Table: self.height = height self.players = [] + self.players_playzone = [] self.table_status = {'played cards': [0,0,0,0], 'leading player': 0, 'trump suit': 1, 'trump broken': False, 'round history': [], 'bid': 0} @@ -57,7 +58,7 @@ class Table: self.discard_deck = [] # This is not a deck as it will never be drawn - w_deck = min(self.height, self.width) * 0.2 + w_deck = min(self.height, self.width) * 0.15 l_deck = min(self.width, self.height) * 0.6 playerx = ((self.width - l_deck)//2, @@ -70,11 +71,10 @@ class Table: (self.height - l_deck)//2) spacing = 20 - offset = 0 for i in range(4): if i == 0: - self.players.append(MainPlayer(playerx[i], playery[i]+offset, + self.players.append(MainPlayer(playerx[i], playery[i], l_deck, w_deck, spacing)) else: @@ -83,13 +83,37 @@ class Table: l_deck, w_deck, spacing, vert_orientation=vert, deck_reveal=cards.DeckReveal.HIDE_ALL)) + self.players[i].connect_to_table(self.table_status) + + playfield_margins = 10 + margins_with_w_deck = w_deck + playfield_margins + playfield_x = margins_with_w_deck + playfield_y = margins_with_w_deck + playfield_width = self.width - (margins_with_w_deck)* 2 + playfield_height = self.height - (margins_with_w_deck)* 2 + + playdeckx = (playfield_x + (playfield_width - margins_with_w_deck) // 2, + playfield_x, + playfield_x + (playfield_width - margins_with_w_deck) // 2, + playfield_x + playfield_width - margins_with_w_deck) + playdecky = (playfield_y + playfield_height - margins_with_w_deck, + playfield_y + (playfield_height - margins_with_w_deck) // 2, + playfield_y, + playfield_y + (playfield_height - margins_with_w_deck) // 2) + for i in range(4): + self.players_playzone.append(cards.Deck(playdeckx[i], playdecky[i], + w_deck, w_deck, 0)) + + + def get_pos(self): return self.x, self.y + class Player(cards.Deck): """ - A player is essentiallg a Deck with decision making function or AI component if it is a bot + A player is essentially a Deck with decision making function or AI component if it is a bot that returns a valid action for the Table/Board. The player has the knowledge of Table status in the form of a dictatary (as it is mutable, thus passed by ref) @@ -146,11 +170,17 @@ 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_function(self): + 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 @@ -168,15 +198,12 @@ class TestView(view.PygView): milliseconds = self.clock.tick(self.fps) #self.playtime += milliseconds / 1000.0 - self.draw_function() - - pygame.display.flip() - self.screen.blit(self.background, (0, 0)) + #self.draw_function() pygame.quit() if __name__ == '__main__': - test_view = TestView(640, 400, clear_colour=(0, 0, 0)) + test_view = TestView(900, 600, clear_colour=(0, 0, 0)) test_view.run() \ No newline at end of file