comparison browser_side/card_game.py @ 36:1d406077b49b

Tarot Game: first draft
author Goffi <goffi@goffi.org>
date Tue, 17 May 2011 01:33:12 +0200
parents
children b306aa090438
comparison
equal deleted inserted replaced
35:d43d6e4b9dc8 36:1d406077b49b
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 """
5 Libervia: a Salut à Toi frontend
6 Copyright (C) 2011 Jérôme Poisson (goffi@goffi.org)
7
8 This program is free software: you can redistribute it and/or modify
9 it under the terms of the GNU Affero General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU Affero General Public License for more details.
17
18 You should have received a copy of the GNU Affero General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 """
21
22 import pyjd # this is dummy in pyjs
23 from pyjamas.ui.AbsolutePanel import AbsolutePanel
24 from pyjamas.ui.Image import Image
25
26 from pyjamas.dnd import makeDraggable
27 from pyjamas.ui.DragWidget import DragWidget, DragContainer
28 from jid import JID
29 from tools import html_sanitize
30 from datetime import datetime
31 from time import time
32 from games import TarotCard
33
34
35
36 CARD_WIDTH = 74
37 CARD_HEIGHT = 136
38 MIN_WIDTH = 950 #Minimum size of the panel
39 MIN_HEIGHT = 500
40
41
42 class CardWidget(TarotCard, Image):
43 """This class is used to represent a card, graphically and logically"""
44
45 def __init__(self, file):
46 """@param file: path of the PNG file"""
47 Image.__init__(self,file)
48 root_name = file[file.rfind("/")+1:-4]
49 suit,value = root_name.split('_')
50 TarotCard.__init__(self, (suit, value))
51 print "Carte:",suit, value #, self.bout
52
53 def draw(self, dc, x, y):
54 """Draw the card on the device context
55 @param dc: device context
56 @param x: abscissa
57 @param y: ordinate"""
58 pass
59 #dc.DrawBitmap(self.bitmap, x, y, True)
60
61 class CardPanel(AbsolutePanel):
62
63 def __init__(self, parent, referee, players, player_nick):
64 self._parent = parent
65 self._autoplay = None #XXX: use 0 to activate fake play, None else
66 self.referee = referee
67 self.players = players
68 self.played = {}
69 for player in players:
70 self.played[player] = None
71 self.player_nick = player_nick
72 self.bottom_nick = self.player_nick
73 idx = self.players.index(self.player_nick)
74 idx = (idx + 1) % len(self.players)
75 self.right_nick = self.players[idx]
76 idx = (idx + 1) % len(self.players)
77 self.top_nick = self.players[idx]
78 idx = (idx + 1) % len(self.players)
79 self.left_nick = self.players[idx]
80 self.bottom_nick = player_nick
81 self.selected = [] #Card choosed by the player (e.g. during ecart)
82 self.hand_size = 13 #number of cards in a hand
83 self.hand = []
84 self.to_show = []
85 self.state = None
86 AbsolutePanel.__init__(self)
87 self.setSize("%spx" % MIN_WIDTH, "%spx" % MIN_HEIGHT)
88 self.setStyleName("cardPanel")
89 self.loadCards()
90 self.mouse_over_card = None #contain the card to highlight
91 self.visible_size = CARD_WIDTH/2 #number of pixels visible for cards
92
93 def _getTarotCardsPathsCb(self, paths):
94 for file in paths:
95 card = CardWidget(file)
96 self.cards[(card.suit, card.value)]=card
97 self.deck.append(card)
98
99 def loadCards(self, dir):
100 """Load all the cards in memory
101 @param dir: directory where the PNG files are"""
102 self.cards={}
103 self.deck=[]
104 self.cards["atout"]={} #As Tarot is a french game, it's more handy & logical to keep french names
105 self.cards["pique"]={} #spade
106 self.cards["coeur"]={} #heart
107 self.cards["carreau"]={} #diamond
108 self.cards["trefle"]={} #club
109 self._parent.host.bridge.call('getTarotCardsPaths', self._getTarotCardsPathsCb)
110