import pygame import sys import random import time from elephant import Elephant from giraffe import Giraffe from penguin import Penguin from parrot import Parrot from bear import Bear from agent import Agent from cage import Cages # Stała bool na potrzeby debugowania DEBUG_MODE = True # Interwał w sekundach, po którym klatka staje się brudna DIRTY_CAGE_INTERVAL = 1 BLACK = (0, 0, 0) GRID_SIZE = 70 GRID_WIDTH = 20 GRID_HEIGHT = 10 pygame.init() WINDOW_SIZE = (GRID_WIDTH * GRID_SIZE, GRID_HEIGHT * GRID_SIZE) screen = pygame.display.set_mode(WINDOW_SIZE) pygame.display.set_caption("Mini Zoo") background_image = pygame.image.load('images/tło.jpg') background_image = pygame.transform.scale(background_image, WINDOW_SIZE) smell_icon = pygame.image.load('images/smell_icon2.png') smell_icon = pygame.transform.scale(smell_icon, (GRID_SIZE, GRID_SIZE)) smell_icon.set_colorkey((213, 208, 126)) an1 = Parrot(16, 2) an2 = Penguin(8, 6) an3 = Bear(14, 9) old_an2 = Giraffe(18,4, adult=True) old_an1 = Elephant(4, 7, adult=True) an4 = Elephant(4,3) Animals = [an1, an2, an3, an4, old_an1, old_an2] def draw_grid(): for y in range(0, GRID_HEIGHT * GRID_SIZE, GRID_SIZE): for x in range(0, GRID_WIDTH * GRID_SIZE, GRID_SIZE): rect = pygame.Rect(x, y, GRID_SIZE, GRID_SIZE) pygame.draw.rect(screen, BLACK, rect, 1) # Rysowanie obszarów klatek if DEBUG_MODE: for cage in Cages: top_left = cage.top_left bottom_right = cage.bottom_right x1 = top_left[0] * GRID_SIZE y1 = top_left[1] * GRID_SIZE x2 = (bottom_right[0] + 1) * GRID_SIZE y2 = (bottom_right[1] + 1) * GRID_SIZE pygame.draw.rect(screen, (255, 0, 0), (x1, y1, x2 - x1, y2 - y1), 2) def draw_Animals(): for Animal in Animals: Animal.draw(screen, GRID_SIZE) if Animal.feed() == 'True': Animal.draw_exclamation(screen, GRID_SIZE, Animal.x, Animal.y) else: Animal.draw_food(screen,GRID_SIZE,Animal.x,Animal.y) def generate_dirty_cage(): cage_index = random.randint(0, len(Cages) - 1) selected_cage = Cages[cage_index] top_left = selected_cage.top_left bottom_right = selected_cage.bottom_right width = bottom_right[0] - top_left[0] + 1 height = bottom_right[1] - top_left[1] + 1 x = random.randint(top_left[0], bottom_right[0]) y = random.randint(top_left[1], bottom_right[1]) if (x, y) not in selected_cage.smell_icons: selected_cage.smell_icons.append((x, y)) def draw_dirty_cages(): for cage in Cages: for icon_pos in cage.smell_icons: x, y = icon_pos screen.blit(smell_icon, (x * GRID_SIZE, y * GRID_SIZE)) def main(): agent = Agent(0, 0, 'images/avatar.png', GRID_SIZE) clock = pygame.time.Clock() # Timer do śledzenia pojawienia się brudnej klatki dirty_cage_timer = time.time() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() agent.handle_event(event,GRID_HEIGHT,GRID_WIDTH,Animals, Cages) # Sprawdź, czy już czas na wygenerowanie brudnej klatki if time.time() - dirty_cage_timer >= DIRTY_CAGE_INTERVAL: generate_dirty_cage() # Zresetuj timer dirty_cage_timer = time.time() for cage in Cages: print(cage.get_cleanliness_state()) # Wyświetl stan czystości dla każdej klatki screen.blit(background_image,(0,0)) draw_grid() draw_Animals() draw_dirty_cages() agent.draw(screen) pygame.display.flip() clock.tick(10) if __name__ == "__main__": main()