import pygame import game import random import os import shutil # wysokosc i szerokosc kazdej kratki WIDTH = 60 HEIGHT = 60 # margines pomiedzy kratkami MARGIN = 5 # kolory BLACK = (0, 0, 0) WHITE = (255, 255, 255) GREEN = (0, 255, 0) RED = (255, 0, 0) BLUE = (0, 0, 255) GREY = (128, 128, 128) class Smieciarka(pygame.sprite.Sprite): def __init__(self, x, y): self.x = x self.y = y self.image = pygame.image.load('resources/plansza/smieciarka.png') self.obraz = None self.ruch = 0 self.plastik = [] self.szklo = [] self.papier = [] self.metal = [] self.pozostale = [] self.odwiedzone_domy = 0 self.wspolrzedne_odwiedzonych_domow = [] pygame.sprite.Sprite.__init__(self) self.rect = pygame.Rect(self.x * WIDTH + MARGIN * self.x + MARGIN, self.y * HEIGHT + MARGIN * self.y, WIDTH, HEIGHT) def setObraz(self, obraz): self.obraz = obraz def rand_move(self): rand_int = random.randint(0, 3) if rand_int == 0: self.w_lewo() elif rand_int == 1: self.w_prawo() elif rand_int == 2: self.w_gore() elif rand_int == 3: self.w_dol() def w_lewo(self): if self.x > 0: if game.plansza[self.x - 1, self.y].jestPrzeszkoda is not True: if game.plansza[self.x - 1, self.y].jestDomem is True: if [self.x - 1, self.y] not in self.wspolrzedne_odwiedzonych_domow: self.wspolrzedne_odwiedzonych_domow.append([self.x - 1, self.y]) self.zwiekszIloscOdwiedzonychDomow() if self.ruch == 2: self.image = pygame.image.load( 'resources/plansza/smieciarka.png') for i in range((WIDTH + MARGIN) // 1): self.rect.x -= 1 self.obraz.blit(self.image, (self.rect.x, self.rect.y)) game.rysowaniePlanszy() self.x -= 1 game.plansza[self.x, self.y].setKolor(BLUE) self.ruch = 1 def w_prawo(self): if self.x < 14: if game.plansza[self.x + 1, self.y].jestPrzeszkoda is not True: if game.plansza[self.x + 1, self.y].jestDomem is True: if [self.x + 1, self.y] not in self.wspolrzedne_odwiedzonych_domow: self.wspolrzedne_odwiedzonych_domow.append([self.x + 1, self.y]) self.zwiekszIloscOdwiedzonychDomow() if self.ruch == 1: self.image = pygame.transform.flip(self.image, True, False) for i in range((WIDTH + MARGIN) // 1): self.rect.x += 1 self.obraz.blit(self.image, (self.rect.x, self.rect.y)) game.rysowaniePlanszy() self.x += 1 game.plansza[self.x, self.y].setKolor(BLUE) self.ruch = 2 def w_gore(self): if self.y > 0: if game.plansza[self.x, self.y - 1].jestPrzeszkoda is not True: if game.plansza[self.x, self.y - 1].jestDomem is True: if [self.x, self.y - 1] not in self.wspolrzedne_odwiedzonych_domow: self.wspolrzedne_odwiedzonych_domow.append([self.x, self.y - 1]) self.zwiekszIloscOdwiedzonychDomow() for i in range((WIDTH + MARGIN) // 1): self.rect.y -= 1 self.obraz.blit(self.image, (self.rect.x, self.rect.y)) game.rysowaniePlanszy() self.y -= 1 game.plansza[self.x, self.y].setKolor(BLUE) def w_dol(self): if self.y < 14: if game.plansza[self.x, self.y + 1].jestPrzeszkoda is not True: if game.plansza[self.x, self.y + 1].jestDomem is True: if [self.x, self.y + 1] not in self.wspolrzedne_odwiedzonych_domow: self.wspolrzedne_odwiedzonych_domow.append([self.x, self.y + 1]) self.zwiekszIloscOdwiedzonychDomow() for i in range((WIDTH + MARGIN) // 1): self.rect.y += 1 self.obraz.blit(self.image, (self.rect.x, self.rect.y)) game.rysowaniePlanszy() self.y += 1 game.plansza[self.x, self.y].setKolor(BLUE) def dodajPlastik(self, smiec): self.plastik.append(smiec) def dodajSzklo(self, smiec): self.szklo.append(smiec) def dodajPapier(self, smiec): self.papier.append(smiec) def dodajMetal(self, smiec): self.metal.append(smiec) def zwiekszIloscOdwiedzonychDomow(self): self.odwiedzone_domy += 1 def getOdwiedzoneDomy(self): return self.odwiedzone_domy class Dom(pygame.sprite.Sprite): def __init__(self, x, y): self.x = x self.y = y pygame.sprite.Sprite.__init__(self) self.image = pygame.image.__class__ self.rect = pygame.Rect(self.x * WIDTH + MARGIN * self.x + MARGIN, self.y * HEIGHT + MARGIN * self.y + MARGIN, WIDTH, HEIGHT) self.smieci = [] def setImage(self, image): self.image = image def dodajSmiec(self, smiec): self.smieci.append(smiec) def usunSmiec(self, smiec): self.smieci.remove(smiec) class Kontener(pygame.sprite.Sprite): def __init__(self, x, y, typ): self.x = x self.y = y pygame.sprite.Sprite.__init__(self) self.image = pygame.image.__class__ self.rect = pygame.Rect(self.x * WIDTH + MARGIN * self.x + MARGIN, self.y * HEIGHT + MARGIN * self.y + MARGIN, WIDTH, HEIGHT) self.smieci = [] self.typ = typ os.makedirs("resources/smieci w kontenerach/" + self.typ) def dodajSmiec(self, smiec): self.smieci.append(smiec) shutil.copy(smiec, "resources/smieci w kontenerach/" + self.typ) def setImage(self, image): self.image = image class Kratka(pygame.sprite.Sprite): def __init__(self, poz_x, poz_y): self.pozX = poz_x self.pozY = poz_y self.jestDomem = False self.jestKontenerem = False self.jestWysypiskiem = False self.jestPrzeszkoda = False self.kolor = GREY self.obiekt = None pygame.sprite.Sprite.__init__(self) self.image = pygame.image.__class__ self.rect = pygame.Rect(self.pozX * WIDTH + MARGIN * self.pozX + MARGIN, self.pozY * HEIGHT + MARGIN * self.pozY + MARGIN, WIDTH, HEIGHT) def setImage(self, image): self.image = image def setObiekt(self, obiekt): self.obiekt = obiekt def setJestDomem(self, bool): self.jestDomem = bool def setJestSmieciarka(self, bool): self.jestSmieciarka = bool def setJestPrzeszkoda(self, bool): self.jestPrzeszkoda = bool def setJestKontenerem(self, bool): self.jestKontenerem = bool def setJestWysypiskiem(self, bool): self.jestWysypiskiem = bool def setKolor(self, kolor): self.kolor = kolor def generujWspolrzedneDomow(ilosc_domow): wspolrzedne_domow = [] r = len(wspolrzedne_domow) while r < ilosc_domow: wspolrzedne_domu = [] x = random.randrange(15) if x < 5: y = random.randrange(5, 15) else: y = random.randrange(15) wspolrzedne_domu.append(x) wspolrzedne_domu.append(y) if 6 <= wspolrzedne_domu[0] <= 7 and 10 <= wspolrzedne_domu[1] <= 11: continue if wspolrzedne_domu[0] == 10 and wspolrzedne_domu[1] == 10: continue if wspolrzedne_domu not in wspolrzedne_domow: wspolrzedne_domow.append(wspolrzedne_domu) r += 1 return wspolrzedne_domow