diff --git a/README.md b/README.md index 54a71a7..1de169f 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@ ```yaml Modele: Smieciarka: - - Zbiera smieci - posiada liste smieci (pojemnosc), - zbiera smieci, - segreguje smieci, diff --git a/config.py b/config.py index 2744ad9..ca6e693 100644 --- a/config.py +++ b/config.py @@ -24,3 +24,4 @@ home_amount = set_home_amount() PLAY_WIDTH = (home_amount + 4)*CELL_SIZE PLAY_HEIGHT = PLAY_WIDTH +HUD_HEIGHT = int(home_amount*CELL_SIZE/4) diff --git a/fonts/Bazgroly.ttf b/fonts/Bazgroly.ttf new file mode 100644 index 0000000..44bfd5f Binary files /dev/null and b/fonts/Bazgroly.ttf differ diff --git a/game.py b/game.py index 02707c2..4760b50 100644 --- a/game.py +++ b/game.py @@ -1,13 +1,14 @@ from pygame import * import sys import random -from config import PLAY_WIDTH, PLAY_HEIGHT, home_amount +from config import PLAY_WIDTH, PLAY_HEIGHT, HUD_HEIGHT, home_amount from sprites.house import House +from sprites.hud import Hud from pygame.locals import * import utils ##INITIALIZE STATIC VARIABLES######### -FPS = 60 +FPS = 20 all_sprites = sprite.Group() fps_clock = time.Clock() @@ -22,8 +23,9 @@ interactables = { ##GAMEWINDOW########################## WINDOW_WIDTH = PLAY_WIDTH -WINDOW_HEIGHT = PLAY_HEIGHT +WINDOW_HEIGHT = PLAY_HEIGHT + HUD_HEIGHT GAMEWINDOW = display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT), 0, 32) +hud = Hud(home_amount,WINDOW_WIDTH, WINDOW_HEIGHT,GAMEWINDOW) display.set_caption('Smieciarz WMI') icon = image.load('images/icon.png') display.set_icon(icon) @@ -60,6 +62,7 @@ while(1): if(type(item) == House): item.generate_rubbish() + hud.get_statistics(all_sprites) display.flip() - fps_clock.tick(FPS) + fps_clock.tick(FPS) ################################################################################## diff --git a/sprites/cell.py b/sprites/cell.py index fe232f0..31f73f2 100644 --- a/sprites/cell.py +++ b/sprites/cell.py @@ -15,4 +15,4 @@ class Cell(pygame.sprite.Sprite): def update(self): self.rect = pygame.Rect( - self.x*CELL_SIZE, self.y*CELL_SIZE, CELL_SIZE, CELL_SIZE) + self.x*CELL_SIZE, self.y*CELL_SIZE, CELL_SIZE, CELL_SIZE) diff --git a/sprites/garbage_collector.py b/sprites/garbage_collector.py index 091bd26..579202d 100644 --- a/sprites/garbage_collector.py +++ b/sprites/garbage_collector.py @@ -1,9 +1,12 @@ import pygame from sprites.cell import Cell, CELL_SIZE +from from config import PLAY_HEIGHT, PLAY_WIDTH class Garbage_collector(Cell): def __init__(self, x, y): + GC_CAPACITY = 10 + Cell.__init__(self, x, y) self.image = pygame.image.load("images/garbage_collector.png") self.move_options = { @@ -12,6 +15,12 @@ class Garbage_collector(Cell): "left": lambda forbidden: ('x', self.x - 1) if (self.x - 1, self.y) not in forbidden and self.x - 1 >= 0 else ('x', self.x), "right": lambda forbidden: ('x', self.x + 1) if (self.x + 1, self.y) not in forbidden and self.x + 1 < PLAY_WIDTH // CELL_SIZE else ('x', self.x) } + self.trash_space_taken = { + "plastic": 0, + "glass": 0, + "metal": 0 + } + self.trash_collected = 0 def move(self, direction, forbidden): (destination, value) = self.move_options[direction](forbidden) @@ -20,4 +29,32 @@ class Garbage_collector(Cell): elif(destination is 'y'): self.y = value self.update() - \ No newline at end of file +PLASTIC = 0 # blue +GLASS = 1 # green +METAL = 2 # yellow + def collect_trash(self, house): + rubbish = house.get_rubbish_data() + to_collect = rubbish + + if(rubbish[0] > GC_CAPACITY - self.trash_space_taken.get("plastic")): + to_collect[0] = self.trash_space_taken.get("plastic") + self.trash_space_taken['plastic'] += to_collect[0] + self.trash_collected += to_collect[0] + + if(rubbish[1] > GC_CAPACITY - self.trash_space_taken.get("glass")): + to_collect[1] = self.trash_space_taken.get("glass") + self.trash_space_taken['glass'] += to_collect[1] + self.trash_collected += to_collect[1] + + if(rubbish[2] > GC_CAPACITY - self.trash_space_taken.get("metal")): + to_collect[2] = self.trash_space_taken.get("metal") + self.trash_space_taken['metal'] += to_collect[2] + self.trash_collected += to_collect[2] + + house.give_away_rubbish(to_collect[0], to_collect[1], to_collect[2]) + + def get_collect_data(self): + return self.trash_collected + + def get_space_data(self): + return self.trash_space_taken diff --git a/sprites/house.py b/sprites/house.py index 8ac9576..699a579 100644 --- a/sprites/house.py +++ b/sprites/house.py @@ -22,7 +22,7 @@ class House(Cell): self.max_metal = max_metal def generate_rubbish(self): - if(random.randint(0, 50) == 1): # 1/5 szansa na wyrzucenie śmiecia w klatce + if(random.randint(0, 25) == 1): # 1/25 szansa na wyrzucenie śmiecia w klatce thrash_type = random.randint(0, 2) self.rubbish[thrash_type] = self.rubbish[thrash_type] + 1 @@ -44,7 +44,15 @@ class House(Cell): self.image = pygame.image.load(House_image.glass.value) #szklo elif(self.rubbish[METAL] > self.max_metal): self.image = pygame.image.load(House_image.metal.value) #metal + + def give_away_rubbish(self, plastic, glass, metal): + self.rubbish[PLASTIC] -= plastic + self.rubbish[GLASS] -= glass + self.rubbish[METAL] -= metal def check_rubbish_status(self): print("plastic: " + str(self.rubbish[PLASTIC]) + " glass: " + str( self.rubbish[GLASS]) + " metal: " + str(self.rubbish[METAL])) + + def get_rubbish_data(self): + return self.rubbish diff --git a/sprites/hud.py b/sprites/hud.py new file mode 100644 index 0000000..ca2b94a --- /dev/null +++ b/sprites/hud.py @@ -0,0 +1,56 @@ +import pygame +from sprites.house import House +from sprites.garbage_collector import Garbage_collector +from config import HUD_HEIGHT +HUD_COLOR = (51,21,4) +WHITE = (255,255,255) +class Hud(): + texts = [] + def __init__(self,house_amount,WINDOW_WIDTH, WINDOW_HEIGHT,GAMEWINDOW): + pygame.init() + hud_upper = WINDOW_WIDTH - HUD_HEIGHT + hud_lower = WINDOW_WIDTH + height = hud_upper - hud_lower + font_type = 'fonts/Bazgroly.ttf' + font_size = house_amount * 2 + GAMEWINDOW.fill(HUD_COLOR) + font = pygame.font.Font(font_type, font_size) + + gc_plastic_text = font.render("Plastic: 0/0",True,WHITE) + gc_metal_text = font.render("Metal: 0/0",True,WHITE) + gc_glass_text = font.render("Glass: 0/0",True,WHITE) + map_plastic_text = font.render("Plastic: 0",True,WHITE) + map_metal_text = font.render("Metal: 0",True,WHITE) + map_glass_text = font.render("Glass: 0",True,WHITE) + overall_text = font.render("Garbage thrown away: 0",True,WHITE) + GAMEWINDOW.blit(overall_text,(20, 20)) + + def get_statistics(self, all_sprites): + ###Garbage collector stats### + gc_taken_space_plastic = 0 + gc_taken_space_metal = 0 + gc_taken_space_glass = 0 + gc_trash_space = 10 + + ###Board stats############### + plastic_left = 0 + metal_left = 0 + glass_left = 0 + total_gathered = 0 + + for item in all_sprites: + if(type(item) == House): + rubbish = item.get_rubbish_data() + plastic_left += rubbish[0] + glass_left += rubbish[1] + metal_left += rubbish[2] + if(type(item) == Garbage_collector): + space_taken = item.get_space_data() + gc_taken_space_plastic += space_taken.get("plastic") + gc_taken_space_glass += space_taken.get("glass") + gc_taken_space_metal += space_taken.get("metal") + total_gathered += item.get_collect_data() + + print("plastic left: "+str(plastic_left)+" | glass left: "+str(glass_left)+" | metal left: "+str(metal_left)) + print(" plastic: "+str(gc_taken_space_plastic)+"/"+str(gc_trash_space)+" | glass: "+str(gc_taken_space_glass)+"/"+str(gc_trash_space)+" | metal: "+str(gc_taken_space_metal)+"/"+str(gc_trash_space)) + print("### TOTAL COLLECTED: "+str(total_gathered)+" ###") diff --git a/sprites/landfill.py b/sprites/landfill.py index eb99679..e4d2262 100644 --- a/sprites/landfill.py +++ b/sprites/landfill.py @@ -8,4 +8,4 @@ class Landfill(Cell): Cell.__init__(self, x, y) types = ["plastic", "glass", "metal"] self.type = types[type] - self.image = pygame.image.load("images/landfill_%s.png" % (self.type)) + self.image = pygame.image.load("images/landfill_%s.png" % (self.type))