Add card playing zone
parent
3068683d3c
commit
fff3a50c99
18
cards.py
18
cards.py
|
@ -183,19 +183,35 @@ class PlayerDeck(Deck):
|
||||||
# TODO: check if card num is selected, set selected, otherwise use it (by removing)
|
# TODO: check if card num is selected, set selected, otherwise use it (by removing)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
DATA_FOLDER = "data"
|
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):
|
class test_screen(view.PygView):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
try: # try to load images from the harddisk
|
try: # try to load images from the harddisk
|
||||||
card_img = pygame.image.load(os.path.join(DATA_FOLDER, 'diamond.jpg'))
|
card_img = pygame.image.load(os.path.join(DATA_FOLDER, 'diamond.jpg'))
|
||||||
except:
|
except:
|
||||||
raise Exception("Cannot load image") # print error message and exit program
|
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_card = Card(50, 0, 50, 75, 111, image_data=card_img)
|
||||||
self.test_deck = Deck(100, 100, 200, 100, 25)
|
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, 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, 210, image_data=card_img))
|
||||||
self.test_deck.add_card(Card(50, 0, 50, 75, 103, image_data=card_img))
|
self.test_deck.add_card(Card(50, 0, 50, 75, 103, image_data=card_img))
|
||||||
|
|
23
main.py
23
main.py
|
@ -1,17 +1,28 @@
|
||||||
import view
|
import view
|
||||||
import pygame
|
import pygame
|
||||||
|
import players
|
||||||
|
|
||||||
|
|
||||||
class GameScreen(view.PygView):
|
class GameScreen(view.PygView):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*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):
|
def load_assets(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def draw_function(self):
|
def draw_table(self, **kwargs):
|
||||||
pass
|
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):
|
def run(self):
|
||||||
running = True
|
running = True
|
||||||
|
@ -29,16 +40,16 @@ class GameScreen(view.PygView):
|
||||||
milliseconds = self.clock.tick(self.fps)
|
milliseconds = self.clock.tick(self.fps)
|
||||||
#self.playtime += milliseconds / 1000.0
|
#self.playtime += milliseconds / 1000.0
|
||||||
|
|
||||||
self.draw_function()
|
#self.draw_function()
|
||||||
|
|
||||||
pygame.display.flip()
|
#pygame.display.flip()
|
||||||
self.screen.blit(self.background, (0, 0))
|
#self.screen.blit(self.background, (0, 0))
|
||||||
|
|
||||||
pygame.quit()
|
pygame.quit()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
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()
|
main_view.run()
|
47
players.py
47
players.py
|
@ -48,6 +48,7 @@ class Table:
|
||||||
self.height = height
|
self.height = height
|
||||||
|
|
||||||
self.players = []
|
self.players = []
|
||||||
|
self.players_playzone = []
|
||||||
self.table_status = {'played cards': [0,0,0,0], 'leading player': 0, 'trump suit': 1,
|
self.table_status = {'played cards': [0,0,0,0], 'leading player': 0, 'trump suit': 1,
|
||||||
'trump broken': False, 'round history': [], 'bid': 0}
|
'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
|
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
|
l_deck = min(self.width, self.height) * 0.6
|
||||||
|
|
||||||
playerx = ((self.width - l_deck)//2,
|
playerx = ((self.width - l_deck)//2,
|
||||||
|
@ -70,11 +71,10 @@ class Table:
|
||||||
(self.height - l_deck)//2)
|
(self.height - l_deck)//2)
|
||||||
|
|
||||||
spacing = 20
|
spacing = 20
|
||||||
offset = 0
|
|
||||||
|
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
if i == 0:
|
if i == 0:
|
||||||
self.players.append(MainPlayer(playerx[i], playery[i]+offset,
|
self.players.append(MainPlayer(playerx[i], playery[i],
|
||||||
l_deck, w_deck,
|
l_deck, w_deck,
|
||||||
spacing))
|
spacing))
|
||||||
else:
|
else:
|
||||||
|
@ -83,13 +83,37 @@ class Table:
|
||||||
l_deck, w_deck,
|
l_deck, w_deck,
|
||||||
spacing, vert_orientation=vert,
|
spacing, vert_orientation=vert,
|
||||||
deck_reveal=cards.DeckReveal.HIDE_ALL))
|
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):
|
def get_pos(self):
|
||||||
return self.x, self.y
|
return self.x, self.y
|
||||||
|
|
||||||
|
|
||||||
class Player(cards.Deck):
|
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.
|
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)
|
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):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.table = Table(0, 0, self.width, self.height, (0, 0, 255))
|
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())
|
self.screen.blit(self.table.background, self.table.get_pos())
|
||||||
for player in self.table.players:
|
for player in self.table.players:
|
||||||
self.screen.blit(player.deck_surface, player.get_pos())
|
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):
|
def run(self):
|
||||||
running = True
|
running = True
|
||||||
|
@ -168,15 +198,12 @@ class TestView(view.PygView):
|
||||||
milliseconds = self.clock.tick(self.fps)
|
milliseconds = self.clock.tick(self.fps)
|
||||||
#self.playtime += milliseconds / 1000.0
|
#self.playtime += milliseconds / 1000.0
|
||||||
|
|
||||||
self.draw_function()
|
#self.draw_function()
|
||||||
|
|
||||||
pygame.display.flip()
|
|
||||||
self.screen.blit(self.background, (0, 0))
|
|
||||||
|
|
||||||
pygame.quit()
|
pygame.quit()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
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()
|
test_view.run()
|
Loading…
Reference in New Issue