-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplayer.py
More file actions
97 lines (80 loc) · 3.14 KB
/
player.py
File metadata and controls
97 lines (80 loc) · 3.14 KB
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
import pygame
from pygame.math import Vector2
from texture_manager import TextureManager
from math import atan
from pygame.mixer import Sound
from random import shuffle
class Bullet:
def __init__(self, pos: Vector2, damage, armorpiercing, speed: Vector2):
self.pos = Vector2(pos)
self.texture_name = "bullet"
self.hitbox = pygame.Rect(self.pos, (8, 16))
self.damage = damage
self.armorpiercing = armorpiercing
self.speed = Vector2(speed)
def update(self, aliens, dt):
for alien in aliens:
if self.hitbox.colliderect(alien.hitbox):
alien.current_hp -= self.damage
self.armorpiercing -= 1
self.pos += self.speed * dt
self.hitbox.topleft = self.pos
def draw(self, window):
texture = TextureManager.get(self.texture_name)
angle = self.speed.as_polar()[1]
pygame.transform.rotate(texture, -angle)
window.blit(texture, self.pos)
class Player:
def __init__(self):
self.pos = Vector2((64*7, 64*13))
self.hitbox = pygame.Rect(self.pos, (64, 64))
self.skin_name = "player"
self.speed = 32
self.max_hp = 3
self.current_hp = 3
self.bullets = []
self.fire_timeout = 0.3 # seconds
self.fire_timer = 0.0
self.move_timer = 0.0
self.move_timeout = 0.2
self.fire_sounds = [Sound('res/fire1.ogg'), Sound('res/fire2.ogg'), Sound('res/fire3.ogg')]
for sound in self.fire_sounds:
sound.set_volume(0.4)
def proccess_event(self, dt, aliens):
keys = pygame.key.get_pressed()
self.move_timer += dt
self.fire_timer += dt
if self.move_timer >= self.move_timeout:
# Движение вверх (a, LEFT)
if self.pos.x > 0:
if keys[pygame.K_a] or keys[pygame.K_LEFT]:
self.move_timer = 0.0
self.pos.x -= self.speed
# Движение вправо (d, RIGHT)
if self.pos.x < 896:
if keys[pygame.K_d] or keys[pygame.K_RIGHT]:
self.move_timer = 0.0
self.pos.x += self.speed
if keys[pygame.K_w] or keys[pygame.K_UP]:
self.fire(dt)
for bullet in self.bullets[:]:
if bullet.armorpiercing <= 0:
self.bullets.remove(bullet)
continue
if bullet.pos.x < 0 or bullet.pos.x > 944 or bullet.pos.y < 0 or bullet.pos.y > 960:
self.bullets.remove(bullet)
continue
bullet.update(aliens, dt)
def draw(self, window):
texture = TextureManager.get(self.skin_name)
texture = pygame.transform.scale_by(texture, 4.0)
window.blit(texture, self.pos)
for bullet in self.bullets:
bullet.draw(window)
def fire(self, dt):
# if self.fire_timer >= self.fire_timeout:
if len(self.bullets) == 0:
self.fire_timer = 0.0
self.bullets.append(Bullet(self.pos + Vector2(28, 0), 1, 1, (0, -500)))
shuffle(self.fire_sounds)
self.fire_sounds[0].play()