diff --git a/.gitignore b/.gitignore index e5eb40b..2a1f512 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ venv/ .vscode/ .ideagit -.idea \ No newline at end of file +.idea +__pycache__/ \ No newline at end of file diff --git a/game.py b/game.py index c0a35b8..dc74101 100644 --- a/game.py +++ b/game.py @@ -1,57 +1,13 @@ +# TODO: sledzenie pozycji smieciarki +# TODO: pole na ktorym wypisywane beda informacje +# TODO: obsluga kolizji + + import pygame +import modele +import numpy as np -pygame.init() - - -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.ruch = 0 - 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 w_lewo(self): - if self.x > 0: - self.x -= 1 - self.rect.x = MARGIN + self.x * WIDTH + self.x * MARGIN - if self.ruch == 2: - self.image = pygame.image.load( - 'resources/plansza/smieciarka.png') - self.ruch = 1 - - def w_prawo(self): - if self.x < 14: - self.x += 1 - self.rect.x = MARGIN + self.x * WIDTH + self.x * MARGIN - if self.ruch == 1: - self.image = pygame.transform.flip( - smieciarka.image, True, False) - self.ruch = 2 - - def w_gore(self): - if self.y > 0: - self.y -= 1 - self.rect.y = self.y * HEIGHT + self.y * MARGIN - - def w_dol(self): - if self.y < 14: - self.y += 1 - self.rect.y = self.y * HEIGHT + self.y * MARGIN - - -class Kontener(pygame.sprite.Sprite): - def __init__(self, x, y): - self.x = x - self.y = y - pygame.sprite.Sprite.__init__(self) - self.rect = pygame.Rect(self.x * WIDTH + MARGIN * self.x + MARGIN, self.y * HEIGHT + MARGIN * self.y + MARGIN, - WIDTH, HEIGHT) - - -# Define some colors +# kolory BLACK = (0, 0, 0) WHITE = (255, 255, 255) GREEN = (0, 255, 0) @@ -59,115 +15,130 @@ RED = (255, 0, 0) BLUE = (0, 0, 255) GREY = (128, 128, 128) -# This sets the WIDTH and HEIGHT of each grid location +# wysokosc i szerokosc kazdej kratki WIDTH = 60 HEIGHT = 60 -# This sets the margin between each cell +# margines pomiedzy kratkami MARGIN = 5 -# Create a 2 dimensional array. A two dimensional -# array is simply a list of lists. -grid = [] -for row in range(100): - # Add an empty array that will hold each cell - # in this row - grid.append([]) - for column in range(100): - grid[row].append(0) # Append a cell +# rozmiar kratki +ILOSC_WIERSZY = 15 +ILOSC_KOLUMN = 15 -# Set row 1, cell 5 to one. (Remember rows and -# column numbers start at zero.) -grid[0][0] = 1 - -# Set the HEIGHT and WIDTH of the screen +# rozmiar okna WINDOW_SIZE = [980, 980] -screen = pygame.display.set_mode(WINDOW_SIZE) -# Set title of screen -pygame.display.set_caption("Inteligentna śmieciarka") +# Tworzenie planszy i kratek +plansza = np.array([[modele.Kratka(j, i) for i in range(ILOSC_KOLUMN)] + for j in range(ILOSC_WIERSZY)]) -# Loop until the user clicks the close button. -done = False +# smieciarka +smieciarka = modele.Smieciarka(10, 10) +plansza[10, 10].setJestSmieciarka(True) -# Used to manage how fast the screen updates -clock = pygame.time.Clock() +# kontenery +kontener_plastik = modele.Kontener(0, 0) +kontener_plastik.setImage(pygame.image.load( + "resources/plansza/pojemnik_plastik.png")) +plansza[0, 0].setJestKontenerem(True) -smieciarka = Smieciarka(10, 10) -kontener_plastik = Kontener(0, 0) -kontener_plastik.image = pygame.image.load( - "resources/plansza/pojemnik_plastik.png") -kontener_metal = Kontener(0, 4) -kontener_metal.image = pygame.image.load( - "resources/plansza/pojemnik_metal.png") -kontener_organiczne = Kontener(2, 2) -kontener_organiczne.image = pygame.image.load( - "resources/plansza/pojemnik_organiczne.png") -kontener_papier = Kontener(4, 0) -kontener_papier.image = pygame.image.load( - "resources/plansza/pojemnik_papier.png") -kontener_szklo = Kontener(4, 4) -kontener_szklo.image = pygame.image.load( - "resources/plansza/pojemnik_szklo.png") +kontener_metal = modele.Kontener(0, 4) +kontener_metal.setImage(pygame.image.load( + "resources/plansza/pojemnik_metal.png")) +plansza[0, 4].setJestKontenerem(True) + +kontener_organiczne = modele.Kontener(2, 2) +kontener_organiczne.setImage(pygame.image.load( + "resources/plansza/pojemnik_organiczne.png")) +plansza[2, 2].setJestKontenerem(True) + +kontener_papier = modele.Kontener(4, 0) +kontener_papier.setImage(pygame.image.load( + "resources/plansza/pojemnik_papier.png")) +plansza[4, 0].setJestKontenerem(True) + +kontener_szklo = modele.Kontener(4, 4) +kontener_szklo.setImage(pygame.image.load( + "resources/plansza/pojemnik_szklo.png")) +plansza[4, 4].setJestKontenerem(True) + +# ustawienie wysypiska, rozmiar wysypiska 5x5 +for i in range(5): + for j in range(5): + plansza[i, j].setJestWysypiskiem(True) -kontener_list = pygame.sprite.Group() -smieciarka_list = pygame.sprite.Group() all_sprites_list = pygame.sprite.Group() +all_sprites_list.add(kontener_plastik, kontener_metal, kontener_organiczne, kontener_papier, kontener_szklo, + smieciarka) -kontener_list.add(kontener_plastik, kontener_metal, - kontener_organiczne, kontener_papier, kontener_szklo) -smieciarka_list.add(smieciarka) -all_sprites_list.add(kontener_plastik, kontener_metal, - kontener_organiczne, kontener_papier, kontener_szklo, smieciarka) -# -------- Main Program Loop ----------- -while not done: - for event in pygame.event.get(): # User did something - if event.type == pygame.QUIT: # If user clicked close - done = True # Flag that we are done so we exit this loop - elif event.type == pygame.MOUSEBUTTONDOWN: - # User clicks the mouse. Get the position - pos = pygame.mouse.get_pos() - # Change the x/y screen coordinates to grid coordinates - column = pos[0] // (WIDTH + MARGIN) - row = pos[1] // (HEIGHT + MARGIN) - # Set that location to one - grid[row][column] = 1 - print("Click ", pos, "Grid coordinates: ", row, column) - elif event.type == pygame.KEYDOWN: - if event.key == pygame.K_LEFT: - smieciarka.w_lewo() - if event.key == pygame.K_RIGHT: - smieciarka.w_prawo() - if event.key == pygame.K_UP: - smieciarka.w_gore() - if event.key == pygame.K_DOWN: - smieciarka.w_dol() +def game(): + pygame.init() - # Set the screen background - screen.fill(BLACK) + # Set the HEIGHT and WIDTH of the screen + obraz = pygame.display.set_mode(WINDOW_SIZE) - # Draw the grid - for row in range(15): - for column in range(15): - color = GREY - # if grid[row][column] == 1: - # color = BLUE - pygame.draw.rect(screen, - color, - [(MARGIN + WIDTH) * column + MARGIN, - (MARGIN + HEIGHT) * row + MARGIN, - WIDTH, - HEIGHT]) - screen.blit(pygame.image.load("resources/plansza/wysypisko.jpg"), (5, 5)) - all_sprites_list.draw(screen) + # Set title of screen + pygame.display.set_caption("Inteligentna śmieciarka") - # Limit to 60 frames per second - clock.tick(60) + # Loop until the user clicks the close button. + done = False - # Go ahead and update the screen with what we've drawn. - pygame.display.flip() + # Used to manage how fast the screen updates + clock = pygame.time.Clock() -# Be IDLE friendly. If you forget this line, the program will 'hang' -# on exit. -pygame.quit() + # -------- Main Program Loop ----------- + while not done: + + # obsluga zdarzen typu nacisniecie klawisza lub przycisku myszy + for event in pygame.event.get(): # User did something + if event.type == pygame.QUIT: # If user clicked close + done = True # Flag that we are done so we exit this loop + elif event.type == pygame.MOUSEBUTTONDOWN: + # User clicks the mouse. Get the position + pozycja_myszki = pygame.mouse.get_pos() + + # Change the x/y screen coordinates to grid coordinates + kolumna = pozycja_myszki[0] // (WIDTH + MARGIN) + wiersz = pozycja_myszki[1] // (HEIGHT + MARGIN) + + print("Click ", pozycja_myszki, + "Grid coordinates: ", wiersz, kolumna) + plansza[wiersz, kolumna].setKolor(BLUE) + + elif event.type == pygame.KEYDOWN: + if event.key == pygame.K_LEFT: + smieciarka.w_lewo() + if event.key == pygame.K_RIGHT: + smieciarka.w_prawo() + if event.key == pygame.K_UP: + smieciarka.w_gore() + if event.key == pygame.K_DOWN: + smieciarka.w_dol() + + # Limit to 60 frames per second + clock.tick(60) + + # czarny kolor w tle + obraz.fill(BLACK) + + # rysowanie planszy # + for i in range(ILOSC_WIERSZY): + for j in range(ILOSC_KOLUMN): + pygame.draw.rect(obraz, + plansza[i, j].kolor, + [(MARGIN + WIDTH) * plansza[i, j].pozY + MARGIN, + (MARGIN + HEIGHT) * + plansza[i, j].pozX + MARGIN, + WIDTH, + HEIGHT]) + + obraz.blit(pygame.image.load( + "resources/plansza/wysypisko.jpg"), (5, 5)) + all_sprites_list.draw(obraz) + + # Go ahead and update the screen with what we've drawn. + pygame.display.flip() + + pygame.quit() diff --git a/main.py b/main.py new file mode 100644 index 0000000..1a6c4a5 --- /dev/null +++ b/main.py @@ -0,0 +1,11 @@ +import pygame +import game + + +def main(): + print("poczatek programu") + game.game() + + +if __name__ == '__main__': + main() diff --git a/modele.py b/modele.py new file mode 100644 index 0000000..cc0f1d3 --- /dev/null +++ b/modele.py @@ -0,0 +1,97 @@ +import pygame + +# This sets the WIDTH and HEIGHT of each grid location +WIDTH = 60 +HEIGHT = 60 + +# This sets the margin between each cell +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.ruch = 0 + 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 w_lewo(self): + if self.x > 0: + self.x -= 1 + self.rect.x = MARGIN + self.x * WIDTH + self.x * MARGIN + if self.ruch == 2: + self.image = pygame.image.load( + 'resources/plansza/smieciarka.png') + self.ruch = 1 + + def w_prawo(self): + if self.x < 14: + self.x += 1 + self.rect.x = MARGIN + self.x * WIDTH + self.x * MARGIN + if self.ruch == 1: + self.image = pygame.transform.flip(self.image, True, False) + self.ruch = 2 + + def w_gore(self): + if self.y > 0: + self.y -= 1 + self.rect.y = self.y * HEIGHT + self.y * MARGIN + + def w_dol(self): + if self.y < 14: + self.y += 1 + self.rect.y = self.y * HEIGHT + self.y * MARGIN + + +class Kontener(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) + + 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.jestSmieciarka = False + self.jestKontenerem = False + self.jestWysypiskiem = False + self.kolor = GREY + 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 setJestSmieciarka(self, bool): + self.jestSmieciarka = bool + + def setJestKontenerem(self, bool): + self.jestKontenerem = bool + + def setJestWysypiskiem(self, bool): + self.jestWysypiskiem = bool + + def setKolor(self, kolor): + self.kolor = kolor diff --git a/requirements.txt b/requirements.txt index 27a222f..e3f85dd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ -pygame==1.9.6 \ No newline at end of file +pygame==1.9.6 +numpy==1.18.2 \ No newline at end of file