dodanie głodu zwierząt i zmiana klas
This commit is contained in:
parent
82b2060409
commit
df8dd868e7
BIN
__pycache__/adult_animal.cpython-311.pyc
Normal file
BIN
__pycache__/adult_animal.cpython-311.pyc
Normal file
Binary file not shown.
BIN
__pycache__/agent.cpython-311.pyc
Normal file
BIN
__pycache__/agent.cpython-311.pyc
Normal file
Binary file not shown.
BIN
__pycache__/animal.cpython-311.pyc
Normal file
BIN
__pycache__/animal.cpython-311.pyc
Normal file
Binary file not shown.
BIN
__pycache__/combined_animal.cpython-311.pyc
Normal file
BIN
__pycache__/combined_animal.cpython-311.pyc
Normal file
Binary file not shown.
BIN
__pycache__/elephant.cpython-311.pyc
Normal file
BIN
__pycache__/elephant.cpython-311.pyc
Normal file
Binary file not shown.
@ -1,16 +0,0 @@
|
|||||||
import pygame
|
|
||||||
|
|
||||||
from animal import Animal
|
|
||||||
|
|
||||||
class AdultAnimal(Animal):
|
|
||||||
def __init__(self,x,y,image, width=2,height=2):
|
|
||||||
super().__init__(x,y,image)
|
|
||||||
self.width=width
|
|
||||||
self.height=height
|
|
||||||
|
|
||||||
def draw(self, screen, grid_size):
|
|
||||||
new_width = grid_size * self.width
|
|
||||||
new_height = grid_size * self.height
|
|
||||||
scaled_image = pygame.transform.scale(self.image, (new_width, new_height))
|
|
||||||
|
|
||||||
screen.blit(scaled_image, (self.x * grid_size, self.y * grid_size))
|
|
33
agent.py
Normal file
33
agent.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import pygame
|
||||||
|
class Agent:
|
||||||
|
def __init__(self, x, y, image_path, grid_size):
|
||||||
|
self.x = x
|
||||||
|
self.y = y
|
||||||
|
self.grid_size = grid_size
|
||||||
|
self.image = pygame.image.load(image_path)
|
||||||
|
self.image = pygame.transform.scale(self.image, (grid_size, grid_size))
|
||||||
|
|
||||||
|
|
||||||
|
def draw(self, screen):
|
||||||
|
screen.blit(self.image, (self.x * self.grid_size, self.y * self.grid_size))
|
||||||
|
|
||||||
|
def move(self, dx, dy):
|
||||||
|
self.x += dx
|
||||||
|
self.y += dy
|
||||||
|
|
||||||
|
def handle_event(self, event, grid_height,grid_width, animals):
|
||||||
|
if event.type == pygame.KEYDOWN:
|
||||||
|
if event.key == pygame.K_UP and self.y > 0:
|
||||||
|
self.move(0, -1)
|
||||||
|
elif event.key == pygame.K_DOWN and self.y < grid_height - 1:
|
||||||
|
self.move(0, 1)
|
||||||
|
elif event.key == pygame.K_LEFT and self.x > 0:
|
||||||
|
self.move(-1, 0)
|
||||||
|
elif event.key == pygame.K_RIGHT and self.x < grid_width - 1:
|
||||||
|
self.move(1, 0)
|
||||||
|
|
||||||
|
for animal in animals:
|
||||||
|
if self.x == animal.x and self.y == animal.y:
|
||||||
|
if animal.feed()== 'True':
|
||||||
|
animal.feed_animal()
|
||||||
|
animal._feed = 0
|
29
animal.py
29
animal.py
@ -1,8 +1,35 @@
|
|||||||
|
import pygame
|
||||||
|
from abc import ABC, abstractmethod
|
||||||
|
|
||||||
class Animal:
|
class Animal:
|
||||||
def __init__(self, x, y, image):
|
def __init__(self, x, y, image, adult=False):
|
||||||
self.x = x - 1
|
self.x = x - 1
|
||||||
self.y = y - 1
|
self.y = y - 1
|
||||||
self.image = image
|
self.image = image
|
||||||
|
self.adult = adult
|
||||||
|
self._feed = 0 #nowe zierze jest głodne
|
||||||
|
|
||||||
def draw(self, screen, grid_size):
|
def draw(self, screen, grid_size):
|
||||||
|
self.image = pygame.transform.scale(self.image, (grid_size, grid_size))
|
||||||
|
if self.adult:
|
||||||
|
# If adult, draw like AdultAnimal
|
||||||
|
new_width = grid_size * 2
|
||||||
|
new_height = grid_size * 2
|
||||||
|
scaled_image = pygame.transform.scale(self.image, (new_width, new_height))
|
||||||
|
screen.blit(scaled_image, (self.x * grid_size, self.y * grid_size))
|
||||||
|
else:
|
||||||
|
# If not adult, draw like normal Animal
|
||||||
screen.blit(self.image, (self.x * grid_size, self.y * grid_size))
|
screen.blit(self.image, (self.x * grid_size, self.y * grid_size))
|
||||||
|
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def feed(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def getting_hungry(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def feed_animal(self):
|
||||||
|
if self.feed():
|
||||||
|
self._feed = 0
|
29
elephant.py
Normal file
29
elephant.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
from animal import Animal
|
||||||
|
import pygame
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Elephant(Animal):
|
||||||
|
def __init__(self, x, y, adult=False):
|
||||||
|
Elephant_image = pygame.image.load('elephant.png')
|
||||||
|
super().__init__(x, y, Elephant_image, adult)
|
||||||
|
self.food_type = "leaves"
|
||||||
|
self._starttime = datetime.now()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def feed(self):
|
||||||
|
self.getting_hungry()
|
||||||
|
if self._feed < 1:
|
||||||
|
return 'False'
|
||||||
|
else:
|
||||||
|
return 'True'
|
||||||
|
|
||||||
|
|
||||||
|
def getting_hungry(self):
|
||||||
|
checktime = datetime.now()
|
||||||
|
delta = checktime - self._starttime
|
||||||
|
minutes_passed = delta.total_seconds() / 60
|
||||||
|
self._feed += minutes_passed
|
||||||
|
self._starttime = checktime
|
BIN
exclamation.png
Normal file
BIN
exclamation.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 63 KiB |
69
main.py
69
main.py
@ -1,11 +1,11 @@
|
|||||||
import pygame
|
import pygame
|
||||||
import sys
|
import sys
|
||||||
from animal import Animal
|
from elephant import Elephant
|
||||||
from adult_animal import AdultAnimal
|
from agent import Agent
|
||||||
|
|
||||||
BLACK = (0, 0, 0)
|
BLACK = (0, 0, 0)
|
||||||
|
|
||||||
GRID_SIZE = 100
|
GRID_SIZE = 75
|
||||||
GRID_WIDTH = 20
|
GRID_WIDTH = 20
|
||||||
GRID_HEIGHT = 10
|
GRID_HEIGHT = 10
|
||||||
|
|
||||||
@ -15,29 +15,21 @@ WINDOW_SIZE = (GRID_WIDTH * GRID_SIZE, GRID_HEIGHT * GRID_SIZE)
|
|||||||
screen = pygame.display.set_mode(WINDOW_SIZE)
|
screen = pygame.display.set_mode(WINDOW_SIZE)
|
||||||
pygame.display.set_caption("Mini Zoo")
|
pygame.display.set_caption("Mini Zoo")
|
||||||
|
|
||||||
agent_pos = [0,0]
|
|
||||||
agent_image = pygame.image.load('avatar.png')
|
|
||||||
agent_image = pygame.transform.scale(agent_image, (GRID_SIZE,GRID_SIZE))
|
|
||||||
|
|
||||||
background_image = pygame.image.load('tło.jpg')
|
background_image = pygame.image.load('tło.jpg')
|
||||||
background_image = pygame.transform.scale(background_image, WINDOW_SIZE)
|
background_image = pygame.transform.scale(background_image, WINDOW_SIZE)
|
||||||
|
|
||||||
animal_image = pygame.image.load('elephant.png')
|
exclamation_image = pygame.image.load('exclamation.png')
|
||||||
animal_image = pygame.transform.scale(animal_image, (GRID_SIZE, GRID_SIZE))
|
exclamation_image = pygame.transform.scale(exclamation_image, (GRID_SIZE,GRID_SIZE))
|
||||||
|
|
||||||
an1=Animal(10,1,animal_image)
|
an1 = Elephant(10, 2)
|
||||||
an2=Animal(12,1,animal_image)
|
an2 = Elephant(12, 2)
|
||||||
an3=Animal(14,7,animal_image)
|
an3 = Elephant(14, 7)
|
||||||
|
|
||||||
old_an1=AdultAnimal(3,6, animal_image,width=2,height=2)
|
old_an1 = Elephant(3, 6, adult=True)
|
||||||
|
|
||||||
animals=[]
|
Elephants = [an1, an2, an3,old_an1]
|
||||||
animals.append(an1)
|
|
||||||
animals.append(an2)
|
|
||||||
animals.append(an3)
|
|
||||||
|
|
||||||
old_animals=[]
|
|
||||||
old_animals.append(old_an1)
|
|
||||||
|
|
||||||
def draw_grid():
|
def draw_grid():
|
||||||
for y in range(0, GRID_HEIGHT * GRID_SIZE, GRID_SIZE):
|
for y in range(0, GRID_HEIGHT * GRID_SIZE, GRID_SIZE):
|
||||||
@ -45,20 +37,19 @@ 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)
|
||||||
|
|
||||||
def draw_agent(agent_pos):
|
def draw_exclamation(x, y):
|
||||||
x, y = agent_pos
|
screen.blit(exclamation_image, (x*GRID_SIZE, y*GRID_SIZE - GRID_SIZE))
|
||||||
screen.blit(agent_image, (x*GRID_SIZE,y*GRID_SIZE))
|
|
||||||
|
def draw_Elephants():
|
||||||
|
for Elephant in Elephants:
|
||||||
|
Elephant.draw(screen, GRID_SIZE)
|
||||||
|
if Elephant.feed() == 'True':
|
||||||
|
draw_exclamation(Elephant.x, Elephant.y)
|
||||||
|
|
||||||
def draw_animals():
|
|
||||||
for animal in animals:
|
|
||||||
animal.draw(screen,GRID_SIZE)
|
|
||||||
|
|
||||||
def draw_old_animals():
|
|
||||||
for animal in old_animals:
|
|
||||||
animal.draw(screen,GRID_SIZE)
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
global agent_pos
|
agent = Agent(0, 0, 'avatar.png', GRID_SIZE)
|
||||||
clock = pygame.time.Clock()
|
clock = pygame.time.Clock()
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
@ -66,22 +57,18 @@ def main():
|
|||||||
if event.type == pygame.QUIT:
|
if event.type == pygame.QUIT:
|
||||||
pygame.quit()
|
pygame.quit()
|
||||||
sys.exit()
|
sys.exit()
|
||||||
elif event.type ==pygame.KEYDOWN:
|
agent.handle_event(event,GRID_HEIGHT,GRID_WIDTH,Elephants)
|
||||||
if event.key == pygame.K_UP and agent_pos[1] > 0:
|
|
||||||
agent_pos[1] -= 1
|
|
||||||
elif event.key == pygame.K_DOWN and agent_pos[1] < GRID_HEIGHT - 1:
|
|
||||||
agent_pos[1] += 1
|
|
||||||
elif event.key == pygame.K_LEFT and agent_pos[0] > 0:
|
|
||||||
agent_pos[0] -= 1
|
|
||||||
elif event.key == pygame.K_RIGHT and agent_pos[0] < GRID_WIDTH - 1:
|
|
||||||
agent_pos[0] += 1
|
|
||||||
|
|
||||||
|
for Elephant in Elephants:
|
||||||
|
Elephant.getting_hungry()
|
||||||
|
|
||||||
screen.blit(background_image,(0,0))
|
screen.blit(background_image,(0,0))
|
||||||
draw_grid()
|
draw_grid()
|
||||||
draw_animals()
|
draw_Elephants()
|
||||||
draw_old_animals()
|
|
||||||
draw_agent(agent_pos)
|
|
||||||
|
|
||||||
|
agent.draw(screen)
|
||||||
pygame.display.flip()
|
pygame.display.flip()
|
||||||
clock.tick(10)
|
clock.tick(10)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user