diff --git a/src/item.py b/src/item.py index 4fa2ec1..f3b9add 100644 --- a/src/item.py +++ b/src/item.py @@ -6,48 +6,6 @@ from src.settings import ( ) -# try 50 times to find a free position to spawn item -def _random_position(room_rect, blocked_rects): - attempts = 0 - max_attempts = 50 - - while attempts < max_attempts: - # generate random x/y coordinates with room boundaries - # * 2 to have a margin to walls - x = random.randint(room_rect.left + ITEM_SIZE, room_rect.right - ITEM_SIZE * 2) - y = random.randint(room_rect.top + ITEM_SIZE, room_rect.bottom - ITEM_SIZE * 2) - - # create a rect at this position for testing collision - test_rect = pygame.Rect(x, y, ITEM_SIZE, ITEM_SIZE) - blocked = False - for b in blocked_rects: - if test_rect.colliderect(b): - blocked = True - break - - # if position is not blocked, return the position - if not blocked: - return x, y - - attempts += 1 - - # no spot after 50 attempts -> return - return None - -# remove expired items -def update(self, room_rect, blocked_rects): - now = pygame.time.get_ticks() - - remaining_items = [] - - for item in self.items: - if item.is_expired() == False: - remaining_items.append(item) - - # replace the old list with the new temp_list - self.items = remaining_items - - class Item: def __init__(self, x, y, item_type): self.x = x @@ -69,10 +27,54 @@ class Item: print(f"Error loading item sprite {item_type}: {e}") self.image = None + # to check if the time ran out to buy the item + def is_expired(self): + return pygame.time.get_ticks() - self.spawn_time >= ITEM_SPAWN_INTERVAL +class ItemManger: + def __init__(self): + self.items = [] + self.last_spawn_time = pygame.time.get_ticks() + + # try 50 times to find a free position to spawn item + def _random_position(room_rect, blocked_rects): + attempts = 0 + max_attempts = 50 + + while attempts < max_attempts: + # generate random x/y coordinates with room boundaries + # * 2 to have a margin to walls + x = random.randint(room_rect.left + ITEM_SIZE, room_rect.right - ITEM_SIZE * 2) + y = random.randint(room_rect.top + ITEM_SIZE, room_rect.bottom - ITEM_SIZE * 2) + + # create a rect at this position for testing collision + test_rect = pygame.Rect(x, y, ITEM_SIZE, ITEM_SIZE) + blocked = False + for b in blocked_rects: + if test_rect.colliderect(b): + blocked = True + break + + # if position is not blocked, return the position + if not blocked: + return x, y + + attempts += 1 + + # no spot after 50 attempts -> return + return None + # remove expired items + def update(self, room_rect, blocked_rects): + now = pygame.time.get_ticks() + remaining_items = [] + for item in self.items: + if item.is_expired() == False: + remaining_items.append(item) + # replace the old list with the new temp_list + self.items = remaining_items diff --git a/src/settings.py b/src/settings.py index d3c221b..1cabc74 100644 --- a/src/settings.py +++ b/src/settings.py @@ -41,10 +41,12 @@ ECTS_UPDATE_INTERVAL = 1000 # time in ms (1000 = 1 sec) BEER_BOTTLE_ECTS_VALUE = 2 BEER_COST = 50 + # --- BUTTONS --- COLOR_BUTTON = (0, 255, 0) COLOR_BUTTON_HOVER = (200, 255, 0) + # --- STARTSCREEN --- COLOR_STARTSCREEN_BACKGROUND = ((0, 0, 0)) COLOR_STARTSCREEN_FONT_TITLE = (0, 255, 0) @@ -55,6 +57,7 @@ COLOR_STARTSCREEN_FONT_LABEL = (0, 255, 255) COFFEE_COST = 30 COFFEE_HEAL_VALUE = 30 + # --- TOWER --- TOWER_COST = 150 PROJECTILE_DMG = 15 @@ -62,11 +65,13 @@ PROJECTILE_SPEED = 7 COLOR_PROJECTILE = (200, 200, 0) TOWER_TIMER = 30000 # how long the tower stays and attack before it disappears + # --- ITEM SPAWN TIMER --- ITEM_SPAWN_INTERVAL = 5000 # ms until a new item spawns ITEM_SHOPPING_TIMER = 10000 # how long you have time to buy items before they despawn ITEM_SIZE = 30 + # --- ZOMBIE --- ZOMBIE_EASY_HP = 30 ZOMBIE_EASY_DMG = 3