Skip to content

Commit 7ca39a4

Browse files
committed
solitaire: fix bouncing and animation.
1 parent 6553479 commit 7ca39a4

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

solitaire/solitaire.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121
SIDE_FACE = 0
2222
SIDE_BACK = 1
2323

24-
SLIPPING_OFFSET = 20
25-
DEAL_N = 3
24+
BOUNCE_ENERGY = 0.8
2625

2726
# We store cards as numbers 1-13, since we only need
2827
# to know their order for solitaire.
@@ -187,14 +186,6 @@ def remove_all_cards(self):
187186
card.stack = None
188187
self.cards = []
189188

190-
def take_top_card(self):
191-
try:
192-
card = self.cards[-1]
193-
self.remove_card(card)
194-
return card
195-
except IndexError:
196-
pass
197-
198189
def is_valid_drop(self, card):
199190
return True
200191

@@ -239,6 +230,14 @@ def restack(self, fromstack):
239230
self.add_card(card)
240231
card.turn_back_up()
241232

233+
def take_top_card(self):
234+
try:
235+
card = self.cards[-1]
236+
self.remove_card(card)
237+
return card
238+
except IndexError:
239+
pass
240+
242241
def set_color(self, color):
243242
color = QColor(color)
244243
color.setAlpha(50)
@@ -636,18 +635,20 @@ def check_win_condition(self):
636635
def win_animation(self):
637636
# Start off a new card
638637
for drop in self.drops:
639-
card = drop.take_top_card()
640-
if card and card.vector is None:
641-
card.vector = QPoint(-random.randint(1, 10), 0)
642-
break
638+
if drop.cards:
639+
card = drop.cards.pop()
640+
if card.vector is None:
641+
card.vector = QPoint(-random.randint(1, 10), 0)
642+
break
643643

644644
for card in self.deck:
645645
if card.vector is not None:
646646
card.setPos(card.pos() + card.vector)
647647
card.vector += QPoint(0, 1) # Gravity
648648

649649
if card.pos().y() > WINDOW_SIZE[1] - CARD_DIMENSIONS.height():
650-
card.vector = QPoint(card.vector.x(), -card.vector.y() )
650+
# Bounce the card, losing some energy.
651+
card.vector = QPoint(card.vector.x(), -int(card.vector.y() * BOUNCE_ENERGY) )
651652

652653
if card.pos().x() < - CARD_DIMENSIONS.width():
653654
card.vector = None

0 commit comments

Comments
 (0)