wix: tarot game preparation step
This commit is contained in:
parent
732b19c517
commit
028ecc8915
1 changed files with 59 additions and 8 deletions
|
|
@ -30,6 +30,9 @@ from tools.jid import JID
|
|||
from quick_frontend.quick_chat import QuickChat
|
||||
from contact_list import ContactList
|
||||
|
||||
CARD_WIDTH = 74
|
||||
CARD_HEIGHT = 136
|
||||
|
||||
class Card():
|
||||
"""This class is used to represent a card, graphically and logically"""
|
||||
|
||||
|
|
@ -42,6 +45,7 @@ class Card():
|
|||
|
||||
print "Carte:",self.family, self.value, self.bout
|
||||
|
||||
|
||||
def draw(self, dc, x, y):
|
||||
"""Draw the card on the device context
|
||||
@param dc: device context
|
||||
|
|
@ -55,9 +59,16 @@ class CardPanel(wx.Panel):
|
|||
|
||||
def __init__(self, parent):
|
||||
wx.Panel.__init__(self, parent)
|
||||
self.SetBackgroundColour(wx.GREEN)
|
||||
self.Bind(wx.EVT_PAINT, self.onPaint)
|
||||
self.load_cards("/home/goffi/dev/divers/images/cards/")
|
||||
self.selected = None #contain the card to highlight
|
||||
self.hand_size = 13 #number of cards in a hand
|
||||
self.visible_size = CARD_WIDTH/2 #number of pixels visible for cards
|
||||
self.hand = random.sample(self.deck, self.hand_size)
|
||||
self.SetBackgroundColour(wx.GREEN)
|
||||
self.Bind(wx.EVT_SIZE, self.onResize)
|
||||
self.Bind(wx.EVT_PAINT, self.onPaint)
|
||||
self.Bind(wx.EVT_MOTION, self.onMouseMove)
|
||||
self.Bind(wx.EVT_LEFT_UP, self.onMouseClick)
|
||||
|
||||
def load_cards(self, dir):
|
||||
"""Load all the cards in memory
|
||||
|
|
@ -79,19 +90,59 @@ class CardPanel(wx.Panel):
|
|||
for value in map(str,range(1,11))+["valet","cavalier","dame","roi"]:
|
||||
self.idx_cards.append(self.cards[family, value])""" #XXX: no need to sort the cards !
|
||||
|
||||
def _is_on_hand(self, pos_x, pos_y):
|
||||
"""Return True if the coordinate are on the hand cards"""
|
||||
if pos_x > self.orig_x and pos_y > self.orig_y \
|
||||
and pos_x < self.orig_x + (len(self.hand)+1) * self.visible_size \
|
||||
and pos_y < self.end_y:
|
||||
return True
|
||||
return False
|
||||
|
||||
def onResize(self, event):
|
||||
self._recalc_ori()
|
||||
|
||||
def _recalc_ori(self):
|
||||
"""Recalculate origines, must be call when size change"""
|
||||
self.orig_x = (self.GetSizeTuple()[0]-(len(self.hand)+1)*self.visible_size)/2 #where we start to draw cards
|
||||
self.orig_y = self.GetSizeTuple()[1] - CARD_HEIGHT - 20
|
||||
self.end_y = self.orig_y + CARD_HEIGHT
|
||||
|
||||
def onPaint(self, event):
|
||||
print "toto", event
|
||||
dc = wx.PaintDC(self)
|
||||
x=0
|
||||
for card in random.sample(self.deck,13):
|
||||
card.draw(dc,x,0)
|
||||
x+=37
|
||||
x=self.orig_x
|
||||
for card in self.hand:
|
||||
card.draw(dc,x,self.orig_y - 30 if card == self.selected else self.orig_y)
|
||||
x+=self.visible_size
|
||||
|
||||
def onMouseMove(self, event):
|
||||
pos_x,pos_y = event.GetPosition()
|
||||
if self._is_on_hand(pos_x, pos_y):
|
||||
try:
|
||||
self.selected = self.hand[(pos_x-self.orig_x)/self.visible_size]
|
||||
except IndexError:
|
||||
self.selected = self.hand[-1]
|
||||
self.Refresh()
|
||||
else:
|
||||
self.selected = None
|
||||
self.Refresh()
|
||||
|
||||
def onMouseClick(self, event):
|
||||
print "mouse click:",event.GetPosition()
|
||||
pos_x,pos_y = event.GetPosition()
|
||||
if self._is_on_hand(pos_x, pos_y):
|
||||
idx = (pos_x-self.orig_x)/self.visible_size
|
||||
if idx == len(self.hand):
|
||||
idx-=1
|
||||
if self.hand[idx] == self.selected:
|
||||
del self.hand[idx]
|
||||
self._recalc_ori()
|
||||
self.Refresh()
|
||||
|
||||
class CardGame(wx.Frame, QuickChat):
|
||||
"""The chat Window for one to one conversations"""
|
||||
"""The window used to play all kind of card games"""
|
||||
|
||||
def __init__(self, host):
|
||||
wx.Frame.__init__(self, None, pos=(0,0), size=(800,550))
|
||||
wx.Frame.__init__(self, None, pos=(0,0), size=(950,500))
|
||||
|
||||
self.host = host
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue