Compare commits
1 Commits
master
...
Czystość-k
Author | SHA1 | Date | |
---|---|---|---|
![]() |
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.x += dx
|
||||||
self.y += dy
|
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.type == pygame.KEYDOWN:
|
||||||
if event.key == pygame.K_UP and self.y > 0:
|
if event.key == pygame.K_UP and self.y > 0:
|
||||||
self.move(0, -1)
|
self.move(0, -1)
|
||||||
@ -32,3 +32,8 @@ class Agent:
|
|||||||
if animal.feed()== 'True':
|
if animal.feed()== 'True':
|
||||||
animal._feed = 0
|
animal._feed = 0
|
||||||
print(animal.name,"fed with",animal.food)
|
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 pygame
|
||||||
import sys
|
import sys
|
||||||
|
import random
|
||||||
|
import time
|
||||||
from elephant import Elephant
|
from elephant import Elephant
|
||||||
from giraffe import Giraffe
|
from giraffe import Giraffe
|
||||||
from penguin import Penguin
|
from penguin import Penguin
|
||||||
from parrot import Parrot
|
from parrot import Parrot
|
||||||
from bear import Bear
|
from bear import Bear
|
||||||
from agent import Agent
|
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)
|
BLACK = (0, 0, 0)
|
||||||
|
|
||||||
GRID_SIZE = 50
|
GRID_SIZE = 70
|
||||||
GRID_WIDTH = 20
|
GRID_WIDTH = 20
|
||||||
GRID_HEIGHT = 10
|
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.image.load('images/tło.jpg')
|
||||||
background_image = pygame.transform.scale(background_image, WINDOW_SIZE)
|
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)
|
an1 = Parrot(16, 2)
|
||||||
an2 = Penguin(8, 6)
|
an2 = Penguin(8, 6)
|
||||||
@ -43,6 +51,18 @@ def draw_grid():
|
|||||||
rect = pygame.Rect(x, y, GRID_SIZE, GRID_SIZE)
|
rect = pygame.Rect(x, y, GRID_SIZE, GRID_SIZE)
|
||||||
pygame.draw.rect(screen, BLACK, rect, 1)
|
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():
|
def draw_Animals():
|
||||||
@ -53,25 +73,52 @@ def draw_Animals():
|
|||||||
else:
|
else:
|
||||||
Animal.draw_food(screen,GRID_SIZE,Animal.x,Animal.y)
|
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():
|
def main():
|
||||||
agent = Agent(0, 0, 'images/avatar.png', GRID_SIZE)
|
agent = Agent(0, 0, 'images/avatar.png', GRID_SIZE)
|
||||||
clock = pygame.time.Clock()
|
clock = pygame.time.Clock()
|
||||||
|
# Timer do śledzenia pojawienia się brudnej klatki
|
||||||
|
dirty_cage_timer = time.time()
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
for event in pygame.event.get():
|
for event in pygame.event.get():
|
||||||
if event.type == pygame.QUIT:
|
if event.type == pygame.QUIT:
|
||||||
pygame.quit()
|
pygame.quit()
|
||||||
sys.exit()
|
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))
|
screen.blit(background_image,(0,0))
|
||||||
draw_grid()
|
draw_grid()
|
||||||
draw_Animals()
|
draw_Animals()
|
||||||
|
draw_dirty_cages()
|
||||||
|
|
||||||
|
|
||||||
agent.draw(screen)
|
agent.draw(screen)
|
||||||
|
Loading…
Reference in New Issue
Block a user