-
Notifications
You must be signed in to change notification settings - Fork 0
/
states.py
99 lines (73 loc) · 2.53 KB
/
states.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# -*- encoding: utf-8 -*-
import common
from config import PIECE_POSITIONS
import pygame
class State(object):
"""Representa un estado de comportamiento de Checker."""
def update(self):
pass
class Starting(State):
"""Realiza el efecto de interpolacion al iniciar el juego"""
def __init__(self, checker, position, player):
self.checker = checker
to_x, to_y = PIECE_POSITIONS[position]
to = to_x, to_y
checker.can_drag = False
checker.rect.x = to_x
self.moves = common.interpolate(checker.rect.topleft, to)
def update(self):
"""Redibuja la ficha en el tablero"""
try:
self.checker.rect.topleft = self.moves.next()
except StopIteration:
self.checker.change_state(Normal(self.checker))
class Normal(State):
"""Estado normal de las piezas"""
def __init__(self, checker):
self.checker = checker
self.checker.can_drag = True
def update(self):
pass
class Moving(State):
"""Realiza al interpolacion al moverce la ficha """
def __init__(self, checker, to_x, to_y):
self.checker = checker
to = to_x, to_y
self.moves = common.interpolate(checker.rect.topleft, to)
self.checker.can_drag = False
def update(self):
try:
self.checker.rect.topleft = self.moves.next()
except StopIteration:
self.checker.change_state(Normal(self.checker))
class WhenDie(State):
"""Representa la animacion de eliminación de ficha."""
def __init__(self, checker):
self.counter = 20
self.checker = checker
checker.can_drag = False
self.last_image = checker.image
self.center = checker.rect
def update(self):
self.counter -= 1
if self.counter < 0:
self.checker.remove_from_groups()
else:
zoom_factor = self.counter / 20.0
new = pygame.transform.rotozoom(self.last_image, 0, zoom_factor)
self.checker.image = new
self.checker.rect = self.checker.image.get_rect()
self.checker.rect.center = self.center.center
class Blinking(State):
def __init__(self, checker):
self.checker = checker
self.counter = 100
def update(self):
self.counter -= 1
if self.counter < 0:
self.checker.change_state(Normal(self.checker))
else:
if self.counter % 20 < 10:
self.checker.show_image(0)
else:
self.checker.show_image(1)