Male_zoo_Projekt_SI/main.py
2024-03-24 17:10:52 +01:00

130 lines
3.7 KiB
Python

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()