przepisanie pod OOP, nowe klasy: kelner i stolik
This commit is contained in:
parent
8ee7a2cc30
commit
f9e936fc27
159
main.py
159
main.py
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user