Skip to content

Tairitsu.Player

Player in the game.

Player

Classes

Player

Player(x, y)

Bases: pygame.sprite.Sprite, Collidable

Source code in Tairitsu/Player.py
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def __init__(self, x, y):
    # Must initialize everything one by one here
    pygame.sprite.Sprite.__init__(self)
    Collidable.__init__(self)

    self.images = [pygame.transform.scale(pygame.image.load(img), 
                        (PlayerSettings.playerWidth, PlayerSettings.playerHeight)) for img in GamePath.player]
    self.index = 0
    self.image = self.images[self.index]
    self.rect = self.image.get_rect()
    self.rect.topleft = (x, y)
    self.speed = PlayerSettings.playerSpeed
    self.talking = False

    self.HP = PlayerSettings.playerHP
    self.attack = PlayerSettings.playerAttack
    self.defence = PlayerSettings.playerDefence
    self.coin = PlayerSettings.playercoin

    self.dx = 0
    self.dy = 0

    self.fixed = False
Attributes
HP instance-attribute
HP = PlayerSettings.playerHP
attack instance-attribute
attack = PlayerSettings.playerAttack
coin instance-attribute
coin = PlayerSettings.playercoin
defence instance-attribute
defence = PlayerSettings.playerDefence
dx instance-attribute
dx = 0
dy instance-attribute
dy = 0
fixed instance-attribute
fixed = False
image instance-attribute
image = self.images[self.index]
images instance-attribute
images = [pygame.transform.scale(pygame.image.load(img), (PlayerSettings.playerWidth, PlayerSettings.playerHeight)) for img in GamePath.player]
index instance-attribute
index = 0
rect instance-attribute
rect = self.image.get_rect()
speed instance-attribute
speed = PlayerSettings.playerSpeed
talking instance-attribute
talking = False
Functions
attr_update
attr_update(addCoins=0, addHP=0, addAttack=0, addDefence=0)
Source code in Tairitsu/Player.py
33
34
35
36
37
38
39
40
41
def attr_update(self, addCoins = 0, addHP = 0, addAttack = 0, addDefence = 0):
    if self.coin + addCoins < 0:
        return
    if self.HP + addHP < 0:
        return
    self.coin += addCoins
    self.HP += addHP
    self.attack += addAttack
    self.defence += addDefence
draw
draw(window, dx=0, dy=0)
Source code in Tairitsu/Player.py
89
90
def draw(self, window, dx=0, dy=0):
    window.blit(self.image, self.rect)
fix_to_middle
fix_to_middle(dx, dy)
Source code in Tairitsu/Player.py
53
54
55
def fix_to_middle(self, dx, dy):
    self.rect.x -= dx
    self.rect.y -= dy
reset_pos
reset_pos(x=WindowSettings.width // 2, y=WindowSettings.height // 2)
Source code in Tairitsu/Player.py
45
46
47
def reset_pos(self, x=WindowSettings.width // 2, y=WindowSettings.height // 2):
    ##### Your Code Here ↓ #####
    pass
undo_move
undo_move()
Source code in Tairitsu/Player.py
50
51
def undo_move(self):
    self.rect = self.rect.move(-self.dx, -self.dy)
update
update(keys, scene)
Source code in Tairitsu/Player.py
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
def update(self, keys, scene):
    if self.talking or self.fixed:
        # 如果不移动,显示静态图像
        self.index = 0
        self.image = self.images[self.index]
    else:
        # Update Player Position
        dx = 0
        dy = 0
        if keys[pygame.K_w] and self.rect.top > 0 :
            dy -= self.speed
        if keys[pygame.K_s] and self.rect.bottom < WindowSettings.height:
            dy += self.speed
        if keys[pygame.K_a] and self.rect.left > 0:
            dx -= self.speed
        if keys[pygame.K_d] and self.rect.right < WindowSettings.width:
            dx += self.speed

        self.dx = dx
        self.dy = dy
        self.rect = self.rect.move(dx, dy)
        if self.fixed: self.undo_move()

        # 更新角色动画
        if any(keys):
            self.index = (self.index + 1) % len(self.images)
            self.image = self.images[self.index]