-
Notifications
You must be signed in to change notification settings - Fork 0
/
sprites.py
75 lines (65 loc) · 2.66 KB
/
sprites.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
from settings import *
from tilemap import collide_hit_rect, round_to_tilesize, tile_from_coords, tile_from_xcoords
from enemies import *
import random
vec = pg.math.Vector2
def collide_with_walls(sprite, group, dir):
if dir == 'x':
hits = pg.sprite.spritecollide(sprite, group, False, collide_hit_rect)
if hits:
if hits[0].rect.centerx > sprite.hit_rect.centerx:
sprite.pos.x = hits[0].rect.left - sprite.hit_rect.width / 2
if hits[0].rect.centerx < sprite.hit_rect.centerx:
sprite.pos.x = hits[0].rect.right + sprite.hit_rect.width / 2
sprite.vel.x = 0
sprite.hit_rect.centerx = sprite.pos.x
if dir == 'y':
hits = pg.sprite.spritecollide(sprite, group, False, collide_hit_rect)
if hits:
if hits[0].rect.centery > sprite.hit_rect.centery:
sprite.pos.y = hits[0].rect.top - sprite.hit_rect.height / 2
if hits[0].rect.centery < sprite.hit_rect.centery:
sprite.pos.y = hits[0].rect.bottom + sprite.hit_rect.height / 2
sprite.vel.y = 0
sprite.hit_rect.centery = sprite.pos.y
class Start():
def __init__(self, game, x, y, w, h, spawn_rate):
self.game = game
self.x = x
self.y = y
self.rect = pg.Rect(x, y, w, h)
self.rect.x = x
self.rect.y = y
self.next_spawn = pg.time.get_ticks()
self.spawn_rate = spawn_rate
def update(self):
if (pg.time.get_ticks() >= self.next_spawn):
Enemy(self.game, self.x, self.y, tile_from_xcoords(self.game.goal.x), tile_from_xcoords(self.game.goal.y), random.randint(50, 150), random.randint(5, 15), ENEMY_IMG)
self.next_spawn = pg.time.get_ticks() + self.spawn_rate * 1000
class Goal():
def __init__(self, x, y, w, h):
self.x = x
self.y = y
self.rect = pg.Rect(x, y, w, h)
self.rect.x = x
self.rect.y = y
class Wall(pg.sprite.Sprite):
def __init__(self, game, x, y):
self.groups = game.all_sprites, game.walls
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
self.image = game.wall_img
self.rect = self.image.get_rect()
self.x = x
self.y = y
self.rect.x = x * TILESIZE
self.rect.y = y * TILESIZE
class Obstacle(pg.sprite.Sprite):
def __init__(self, game, x, y):
self.game = game
self.groups = game.obstacles
pg.sprite.Sprite.__init__(self, self.groups)
self.x = x
self.y = y
self.rect = pg.Rect(x, y, TILESIZE, TILESIZE)
self.game.map.change_node(tile_from_xcoords(x), tile_from_xcoords(y), 1)