dodano klatki na wybiegach, obiekty blokują scieżkę

This commit is contained in:
LuminoX 2024-03-24 14:55:49 +01:00
parent 2e4ba023d0
commit 12b431e748
5 changed files with 85 additions and 10 deletions

View File

@ -16,15 +16,15 @@ 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, blocked_fields):
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 and (self.x, self.y-1) not in blocked_fields:
self.move(0, -1)
elif event.key == pygame.K_DOWN and self.y < grid_height - 1:
elif event.key == pygame.K_DOWN and self.y < grid_height - 1 and (self.x, self.y+1) not in blocked_fields:
self.move(0, 1)
elif event.key == pygame.K_LEFT and self.x > 0:
elif event.key == pygame.K_LEFT and self.x > 0 and (self.x-1, self.y) not in blocked_fields:
self.move(-1, 0)
elif event.key == pygame.K_RIGHT and self.x < grid_width - 1:
elif event.key == pygame.K_RIGHT and self.x < grid_width - 1 and (self.x+1, self.y) not in blocked_fields:
self.move(1, 0)
for animal in animals:

58
enclosure.py Normal file
View File

@ -0,0 +1,58 @@
import pygame
class Enclosure:
def __init__(self, x1, y1, x2, y2, type, imageH, imageV):
self.x1 = x1 - 1
self.y1 = y1 - 1
#(x1,y1) - wierzchołek przekątnej
self.x2 = x2 - 1
self.y2 = y2 - 1
#(x2,y2) - 2 wierzchołek przekątnej
self.type = type #hot/cold/medium
self.imageH = imageH
self.imageV = imageV
def draw(self, screen, grid_size, blocked_fields):
self.imageH = pygame.transform.scale(self.imageH, (grid_size, grid_size))
self.imageV = pygame.transform.scale(self.imageV, (grid_size, grid_size))
if self.x1 < self.x2:
for i in range(self.x1, self.x2+1):
screen.blit(self.imageH, (i * grid_size, self.y1 * grid_size))
blocked_fields.add((i, self.y1))
screen.blit(self.imageH, (i * grid_size, self.y2 * grid_size))
blocked_fields.add((i, self.y2))
if self.y1 < self.y2:
for j in range(self.y1, self.y2+1):
screen.blit(self.imageH, (self.x1 * grid_size, j * grid_size))
blocked_fields.add((self.x1, j))
screen.blit(self.imageH, (self.x2 * grid_size, j * grid_size))
blocked_fields.add((self.x2, j))
if self.y1 > self.y2:
for j in range(self.y2, self.y1+1):
screen.blit(self.imageH, (self.x1 * grid_size, j * grid_size))
blocked_fields.add((self.x1, j))
screen.blit(self.imageH, (self.x2 * grid_size, j * grid_size))
blocked_fields.add((self.x2, j))
if self.x1 > self.x2:
for i in range(self.x2, self.x1+1):
screen.blit(self.imageH, (i * grid_size, self.y1 * grid_size))
blocked_fields.add((i, self.y1))
screen.blit(self.imageH, (i * grid_size, self.y2 * grid_size))
blocked_fields.add((i, self.y2))
if self.y1 < self.y2:
for j in range(self.y1, self.y2+1):
screen.blit(self.imageH, (self.x1 * grid_size, j * grid_size))
blocked_fields.add((self.x1, j))
screen.blit(self.imageH, (self.x2 * grid_size, j * grid_size))
blocked_fields.add((self.x2, j))
if self.y1 > self.y2:
for j in range(self.y2, self.y1+1):
screen.blit(self.imageH, (self.x1 * grid_size, j * grid_size))
blocked_fields.add((self.x1, j))
screen.blit(self.imageH, (self.x2 * grid_size, j * grid_size))
blocked_fields.add((self.x2, j))

BIN
images/fenceHor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
images/fenceVer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

27
main.py
View File

@ -6,12 +6,13 @@ from penguin import Penguin
from parrot import Parrot
from bear import Bear
from agent import Agent
from enclosure import Enclosure
BLACK = (0, 0, 0)
GRID_SIZE = 50
GRID_WIDTH = 20
GRID_HEIGHT = 10
GRID_WIDTH = 30
GRID_HEIGHT = 15
pygame.init()
@ -23,8 +24,11 @@ pygame.display.set_caption("Mini Zoo")
background_image = pygame.image.load('images/tło.jpg')
background_image = pygame.transform.scale(background_image, WINDOW_SIZE)
fenceH = pygame.image.load('images/fenceHor.png')
fenceV = pygame.image.load('images/fenceVer.png')
blocked = set()
@ -37,13 +41,25 @@ an4 = Elephant(4,3)
Animals = [an1, an2, an3, an4, old_an1, old_an2]
en1 = Enclosure(1,5,9,11,"medium", fenceH, fenceV)
en2 = Enclosure(29,3, 13,1, 'medium', fenceH, fenceV)
en3 = Enclosure(11,5, 16,11, 'cold', fenceH, fenceV)
en4 = Enclosure(19,11, 30,5, 'hot', fenceH, fenceV)
en5 = Enclosure(4,13, 28,15, 'cold', fenceH, fenceV)
Enclosures = [en1, en2, en3, en4, en5]
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)
def draw_enclosures(set):
for enclosure in Enclosures:
enclosure.draw(screen, GRID_SIZE, blocked)
def draw_Animals():
for Animal in Animals:
@ -64,13 +80,14 @@ def main():
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, blocked)
screen.blit(background_image,(0,0))
draw_grid()
draw_Animals()
draw_enclosures(blocked)
#draw_Animals()