From f9e936fc273bc6453fcea301e2196d669281dffd Mon Sep 17 00:00:00 2001 From: s481851 Date: Thu, 4 Apr 2024 03:01:13 +0200 Subject: [PATCH] przepisanie pod OOP, nowe klasy: kelner i stolik --- main.py | 159 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 90 insertions(+), 69 deletions(-) diff --git a/main.py b/main.py index d8382b4..fa3a933 100644 --- a/main.py +++ b/main.py @@ -1,26 +1,67 @@ import pygame import random import time +import numpy import threading -pygame.init() +kuchnia_xy = 40 +pozycja_startowa = 5 +#-----------------------------Inicjacja klas +class Kelner: + def __init__(self, x, y): + self.x = x + self.y = y + self.speed = 1 #---na razie nie zmieniać ;) działa dla 1 lub 5 + self.stan = "stoi" # Stan kelnera: stoi, odbiera lub wraca + self.stolik_docelowy = None # Stolik, do którego idzie kelner + self.cel_x = x + self.cel_y = y + + def wklej(self): + screen.blit(kelnerImg, (self.x, self.y)) + + def idz_do_stolika(self): + self.cel_x, self.cel_y = self.stolik_docelowy.x, self.stolik_docelowy.y + kelner.stan = "odbiera" + + def idz_do_kuchni(self): + self.cel_x, self.cel_y = pozycja_startowa, pozycja_startowa + self.stolik_docelowy = None + kelner.stan = "wraca" + + +class Stolik: + def __init__(self, x, y): + self.x = x + self.y = y + self.zamowione = False + + def wklej(self): + screen.blit(stolikImg, (self.x, self.y)) + + +#--------------Inicjacja obiektów +kelner = Kelner(pozycja_startowa,pozycja_startowa) + +#-----------wspolrzedne stolikow +coords = ["325 320", "325 640", "885 320", "885 640"] + +#Tworzenie listy stolikow +stoliki = [] +for coord in coords: + x, y = map(int, coord.split()) + stoliki.append(Stolik(x, y)) + +pygame.init() pygame.display.set_caption("Automatyczny kelner") + #----------------wymiary okna width = 1200 height = 800 -x_k = 1 #----------wspolrzedna x kelnera -y_k = 1 #----------wspolrzedna y kelnera - screen = pygame.display.set_mode((width, height)) -#-----------wspolrzedna stolikow -coords = ["325 320", "325 640", "885 320", "885 640"] -zamowienia = [0, 0, 1, 1] - -kelnerStan = 0 #--- 0 - brak zamowienia, 1 - zamownienie, 2 - danie - kelnerImg = pygame.image.load("kelner.png") kelnerImg = pygame.transform.scale(kelnerImg, (70, 70)) stolikImg = pygame.image.load("stolik.png") @@ -33,16 +74,9 @@ kitchenImg = pygame.transform.scale(kitchenImg, (100, 100)) def kuchnia(x, y): screen.blit(kitchenImg, (x, y)) -def kelner(x, y): - screen.blit(kelnerImg, (x, y)) - -def stolik(x, y): - screen.blit(stolikImg, (x, y)) - -def changeTable(x, y): +def menu(x, y): screen.blit(menuImg, (x, y)) - #def randomoweZamowienia(): #threading.Timer(5.0).start() #x = random.randrange(0, 4) @@ -52,8 +86,6 @@ def changeTable(x, y): #stolikImg = pygame.transform.scale(stolikImg, (70, 70)) #screen.blit(stolikImg, (1, 1)) - - def wypiszOkno(): screen.fill((0, 0, 0)) blockSize = 80 @@ -62,8 +94,6 @@ def wypiszOkno(): rect = pygame.Rect(x, y, blockSize, blockSize) pygame.draw.rect(screen, (200, 200, 200), rect, 1) #-------------Wypisz kratę -TA -#-------------Stolik do ktorego idzie kelner -cel = coords[random.randrange(0, 4)] run = True #def randomTime(): @@ -75,63 +105,54 @@ run = True #whichPic = randomTime() while run: - wypiszOkno() - kuchnia(40, 40) - kelner(x_k, y_k) - if kelnerStan == 1: - changeTable(x_k, y_k) + kuchnia(kuchnia_xy, kuchnia_xy) - for i in range(4): - test = coords[i] - x_y = test.split(" ") - x = int(x_y[0]) - y = int(x_y[1]) - stolik(x ,y) + for stolik in stoliki: + stolik.wklej() + + kelner.wklej() + if kelner.stan == "wraca": + menu(kelner.x, kelner.y) - split = str(cel).split(" ") - x_s = int(split[0]) - y_s = int(split[1]) + #------------weź zamowienie + for stolik in stoliki: + if stolik.zamowione == True: + menu(stolik.x, stolik.y) + if kelner.stan == "stoi": + kelner.stolik_docelowy = stolik + kelner.idz_do_stolika() - for j in range(len(zamowienia)): #------------weź zamowienie - if zamowienia[j] == 1: - test = coords[j] - x_y = test.split(" ") - x = int(x_y[0]) - y = int(x_y[1]) - changeTable(x, y) - split2 = str(coords[j]).split(" ") - x_s2 = int(split2[0]) - y_s2 = int(split2[1]) - if (x_k == x_s2) and (y_k == y_s2) and kelnerStan == 0: - zamowienia[j] = 0 - kelnerStan = 1 + #----------Losuje stoliki, które dokonają zamówienia + if kelner.stan == "stoi": + for stolik in stoliki: + if stolik.zamowione == True: + break + for i in range(4): + if random.randrange(2) == 1: + stoliki[i].zamowione = True - #print("X_k: " + str(x_k) + " Y_k: " + str(y_k))-------------Wypisuje wspolrzedne kelnera + #print("kelner.x: " + str(kelner.x) + " kelner.y: " + str(kelner.y))-------------Wypisuje wspolrzedne kelnera - #----------------Sprawdzenie w ktora strone ma isc kelner - if x_k != x_s: - x = (x_s - x_k) / abs(x_s - x_k) + #----------------Zmiana pozycji kelnera + if kelner.x != kelner.cel_x: + kelner.x += kelner.speed * numpy.sign(kelner.cel_x - kelner.x) else: - x = 0 - if y_k != y_s: - y = (y_s - y_k) / abs(y_s - y_k) - else: - y = 0 + kelner.y += kelner.speed * numpy.sign(kelner.cel_y - kelner.y) #zmieniamy pozycje Y dopiero, gdy pozycja X bedzie prawidlowa + + print(kelner.stan) + + #----------------Sprawdzenie, czy kelner jest u celu + if kelner.x == kelner.cel_x and kelner.y == kelner.cel_y: + if kelner.stan == "odbiera": + kelner.stolik_docelowy.zamowione = False + kelner.idz_do_kuchni() + + elif kelner.stan == "wraca": + kelner.stan = "stoi" - if x != 0: - x_k = x_k + x - else: - y_k = y_k + y - if x_k == x_s and y_k == y_s: - if kelnerStan == 1: - cel = "20 20" - else: - cel = coords[random.randrange(0, 4)] - if x_k == 20 and y_k == 20: - kelnerStan = 0 time.sleep(0.001) key = pygame.key.get_pressed()