forked from detiuaveiro/projecto-mini-jogo-Anth0nyPereira
-
Notifications
You must be signed in to change notification settings - Fork 0
/
food_spawner.py
90 lines (66 loc) · 2.46 KB
/
food_spawner.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
from consts import Consts
from food import Food
from spawner import Spawner
import pygame as pg
def get_food_list():
"""
Return
----------
--> pygame.Group
"""
return FoodSpawner.all_foods
class FoodSpawner(Spawner):
# each parameter is a tuple with 2 values: minimal_bound and maximal_bound of each axis
"""
A concrete spawner class used to spawn food in a specific boundary/quadrant/area of the window
Recurring to Flyweight, Prototype and Update Method design patterns
Attributes
----------
all_foods: pygame.Group
a list containing all sprite food from the game
Methods
----------
spawn_new_object(self)
Selects a food and adds it to the list
render(self, screen)
Draws all food sprites on screen
update(self, screen)
Where the spawning of food take place
Functions
----------
get_food_list()
Returns the list containing all food
"""
all_foods = pg.sprite.Group()
def __init__(self, bounds, entity_shelter_list):
"""
Parameters
----------
bounds: tuple
a tuple consisting of 2 tuples. the first is the min_boundary and max_boundary for the X-AXIS.
the other one is related to the Y_AXIS
entity_shelter_list: pygame.Group
a list with the entity and shelter sprites
"""
super().__init__([Food(10, 10, Consts.AVAILABLE_FOODS.get(Consts.FOOD_BREAD)[0],
Consts.AVAILABLE_FOODS.get(Consts.FOOD_BREAD)[1]),
Food(10, 10, Consts.AVAILABLE_FOODS.get(Consts.FOOD_SOUP)[0],
Consts.AVAILABLE_FOODS.get(Consts.FOOD_SOUP)[1]),
Food(10, 10, Consts.AVAILABLE_FOODS.get(Consts.FOOD_MEAT)[0],
Consts.AVAILABLE_FOODS.get(Consts.FOOD_MEAT)[1])],
bounds,
entity_shelter_list)
self.number_foods = 0
self.counter = 0
def spawn_new_object(self):
food = super().spawn_new_object()
FoodSpawner.all_foods.add(food)
self.number_foods += 1
def render(self, screen):
FoodSpawner.all_foods.draw(screen)
def update(self, screen):
if self.counter % 100 == 0:
if self.number_foods <= 4:
self.spawn_new_object()
self.counter += 1
self.render(screen)