przepisanie pod OOP, nowe klasy: kelner i stolik

This commit is contained in:
s481851 2024-04-04 03:01:13 +02:00
parent 8ee7a2cc30
commit f9e936fc27

159
main.py
View File

@ -1,26 +1,67 @@
import pygame import pygame
import random import random
import time import time
import numpy
import threading 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") pygame.display.set_caption("Automatyczny kelner")
#----------------wymiary okna #----------------wymiary okna
width = 1200 width = 1200
height = 800 height = 800
x_k = 1 #----------wspolrzedna x kelnera
y_k = 1 #----------wspolrzedna y kelnera
screen = pygame.display.set_mode((width, height)) 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.image.load("kelner.png")
kelnerImg = pygame.transform.scale(kelnerImg, (70, 70)) kelnerImg = pygame.transform.scale(kelnerImg, (70, 70))
stolikImg = pygame.image.load("stolik.png") stolikImg = pygame.image.load("stolik.png")
@ -33,16 +74,9 @@ kitchenImg = pygame.transform.scale(kitchenImg, (100, 100))
def kuchnia(x, y): def kuchnia(x, y):
screen.blit(kitchenImg, (x, y)) screen.blit(kitchenImg, (x, y))
def kelner(x, y): def menu(x, y):
screen.blit(kelnerImg, (x, y))
def stolik(x, y):
screen.blit(stolikImg, (x, y))
def changeTable(x, y):
screen.blit(menuImg, (x, y)) screen.blit(menuImg, (x, y))
#def randomoweZamowienia(): #def randomoweZamowienia():
#threading.Timer(5.0).start() #threading.Timer(5.0).start()
#x = random.randrange(0, 4) #x = random.randrange(0, 4)
@ -52,8 +86,6 @@ def changeTable(x, y):
#stolikImg = pygame.transform.scale(stolikImg, (70, 70)) #stolikImg = pygame.transform.scale(stolikImg, (70, 70))
#screen.blit(stolikImg, (1, 1)) #screen.blit(stolikImg, (1, 1))
def wypiszOkno(): def wypiszOkno():
screen.fill((0, 0, 0)) screen.fill((0, 0, 0))
blockSize = 80 blockSize = 80
@ -62,8 +94,6 @@ def wypiszOkno():
rect = pygame.Rect(x, y, blockSize, blockSize) rect = pygame.Rect(x, y, blockSize, blockSize)
pygame.draw.rect(screen, (200, 200, 200), rect, 1) #-------------Wypisz kratę -TA 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 run = True
#def randomTime(): #def randomTime():
@ -75,63 +105,54 @@ run = True
#whichPic = randomTime() #whichPic = randomTime()
while run: while run:
wypiszOkno() wypiszOkno()
kuchnia(40, 40) kuchnia(kuchnia_xy, kuchnia_xy)
kelner(x_k, y_k)
if kelnerStan == 1:
changeTable(x_k, y_k)
for i in range(4): for stolik in stoliki:
test = coords[i] stolik.wklej()
x_y = test.split(" ")
x = int(x_y[0])
y = int(x_y[1])
stolik(x ,y)
kelner.wklej()
split = str(cel).split(" ") if kelner.stan == "wraca":
x_s = int(split[0]) menu(kelner.x, kelner.y)
y_s = int(split[1])
for j in range(len(zamowienia)): #------------weź zamowienie #------------weź zamowienie
if zamowienia[j] == 1: for stolik in stoliki:
test = coords[j] if stolik.zamowione == True:
x_y = test.split(" ") menu(stolik.x, stolik.y)
x = int(x_y[0]) if kelner.stan == "stoi":
y = int(x_y[1]) kelner.stolik_docelowy = stolik
changeTable(x, y) kelner.idz_do_stolika()
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
#print("X_k: " + str(x_k) + " Y_k: " + str(y_k))-------------Wypisuje wspolrzedne kelnera #----------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
#----------------Sprawdzenie w ktora strone ma isc kelner #print("kelner.x: " + str(kelner.x) + " kelner.y: " + str(kelner.y))-------------Wypisuje wspolrzedne kelnera
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: else:
x = 0 kelner.y += kelner.speed * numpy.sign(kelner.cel_y - kelner.y) #zmieniamy pozycje Y dopiero, gdy pozycja X bedzie prawidlowa
if y_k != y_s:
y = (y_s - y_k) / abs(y_s - y_k) print(kelner.stan)
else:
y = 0 #----------------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) time.sleep(0.001)
key = pygame.key.get_pressed() key = pygame.key.get_pressed()