Dodanie stanu czystości klatek
This commit is contained in:
parent
2e4ba023d0
commit
ea227dc384
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
images/smell icon.psd
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
__pycache__/cage.cpython-311.pyc
Normal file
BIN
__pycache__/cage.cpython-311.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
7
agent.py
7
agent.py
@ -16,7 +16,7 @@ class Agent:
|
||||
self.x += dx
|
||||
self.y += dy
|
||||
|
||||
def handle_event(self, event, grid_height,grid_width, animals):
|
||||
def handle_event(self, event, grid_height, grid_width, animals, dirty_cages):
|
||||
if event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_UP and self.y > 0:
|
||||
self.move(0, -1)
|
||||
@ -32,3 +32,8 @@ class Agent:
|
||||
if animal.feed()== 'True':
|
||||
animal._feed = 0
|
||||
print(animal.name,"fed with",animal.food)
|
||||
|
||||
for cage in dirty_cages:
|
||||
if (self.x, self.y) in cage.smell_icons:
|
||||
cage.smell_icons.remove((self.x, self.y))
|
||||
print("Smell icon removed at:", (self.x, self.y))
|
34
cage.py
Normal file
34
cage.py
Normal file
@ -0,0 +1,34 @@
|
||||
class Cage:
|
||||
def __init__(self, top_left, bottom_right, name, temperature):
|
||||
self.top_left = top_left
|
||||
self.bottom_right = bottom_right
|
||||
self.name = name
|
||||
self.temperature = temperature
|
||||
self.smell_icons = []
|
||||
|
||||
def get_area(self):
|
||||
width = self.bottom_right[0] - self.top_left[0] + 1
|
||||
height = self.bottom_right[1] - self.top_left[1] + 1
|
||||
return width * height
|
||||
|
||||
def get_cleanliness_state(self):
|
||||
area = self.get_area()
|
||||
# print("Area:", area)
|
||||
if area == 0:
|
||||
return f"{self.name}: 0%"
|
||||
cleanliness_state = len(self.smell_icons) / area * 100
|
||||
return f"{self.name}: {cleanliness_state:.0f}%"
|
||||
|
||||
# Definiowanie klatek (top_left(x,y), bottom_right(x,y), nazwa, temperatura)
|
||||
# 0------>x
|
||||
# |
|
||||
# |
|
||||
# y
|
||||
|
||||
cage1 = Cage((8, 0), (18, 1), "Ptaszarnia", 24)
|
||||
cage2 = Cage((0, 3), (5, 6), "Wybieg słoni", 24)
|
||||
cage3 = Cage((12, 3), (19, 6), "Wybieg żyraf", 24)
|
||||
cage4 = Cage((7, 3), (10, 6), "Akwarium pingwinów", -4)
|
||||
cage5 = Cage((2, 8), (19, 9), "Klatka niedźwiedzi polarnych", -4)
|
||||
|
||||
Cages = [cage1, cage2, cage3, cage4, cage5]
|
BIN
images/smell_icon.png
Normal file
BIN
images/smell_icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 894 KiB |
BIN
images/smell_icon2.png
Normal file
BIN
images/smell_icon2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.5 MiB |
63
main.py
63
main.py
@ -1,15 +1,23 @@
|
||||
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 = 50
|
||||
GRID_SIZE = 70
|
||||
GRID_WIDTH = 20
|
||||
GRID_HEIGHT = 10
|
||||
|
||||
@ -24,9 +32,9 @@ 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)
|
||||
@ -43,6 +51,18 @@ def draw_grid():
|
||||
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():
|
||||
@ -53,25 +73,52 @@ def draw_Animals():
|
||||
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)
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user