changed system to grid-based

This commit is contained in:
s481851 2024-04-11 23:21:53 +02:00
parent 458a491f11
commit f508f6c4d0

67
main.py
View File

@ -4,29 +4,35 @@ import time
import numpy import numpy
import threading import threading
kuchnia_xy = 40 kuchnia_xy = 0
pozycja_startowa = 5 pozycja_startowa = 0
#------------Ustawienia siatki
blockSize = 60
rows = 14
columns = 24
#-----------------------------Inicjacja klas #-----------------------------Inicjacja klas
class Kelner: class Kelner:
def __init__(self, x, y): def __init__(self, x, y):
self.x = x self.x = x
self.y = y self.y = y
self.speed = 1 #---na razie nie zmieniać ;) działa dla 1 lub 5 self.speed = 70 # od 0 do 100, preferowane 70
self.stan = "stoi" # Stan kelnera: stoi, odbiera lub wraca self.stan = "stoi" # Stan kelnera: stoi, odbiera lub wraca
self.stolik_docelowy = None # Stolik, do którego idzie kelner self.stolik_docelowy = None # Stolik, do którego idzie kelner
self.chodzi = True
self.cel_x = x self.cel_x = x
self.cel_y = y self.cel_y = y
def wklej(self): def wklej(self):
screen.blit(kelnerImg, (self.x, self.y)) screen.blit(kelnerImg, (self.x * blockSize, self.y * blockSize))
def idz_do_stolika(self): def idz_do_stolika(self):
self.cel_x, self.cel_y = self.stolik_docelowy.x, self.stolik_docelowy.y self.cel_x, self.cel_y = self.stolik_docelowy.x, self.stolik_docelowy.y
kelner.stan = "odbiera" kelner.stan = "odbiera"
def idz_do_kuchni(self): def idz_do_kuchni(self):
self.cel_x, self.cel_y = pozycja_startowa, pozycja_startowa self.cel_x, self.cel_y = kuchnia_xy, kuchnia_xy
self.stolik_docelowy = None self.stolik_docelowy = None
kelner.stan = "wraca" kelner.stan = "wraca"
@ -38,14 +44,14 @@ class Stolik:
self.zamowione = False self.zamowione = False
def wklej(self): def wklej(self):
screen.blit(stolikImg, (self.x, self.y)) screen.blit(stolikImg, (self.x * blockSize, self.y * blockSize))
#--------------Inicjacja obiektów #--------------Inicjacja obiektów
kelner = Kelner(pozycja_startowa,pozycja_startowa) kelner = Kelner(pozycja_startowa,pozycja_startowa)
#-----------wspolrzedne stolikow #-----------wspolrzedne stolikow
coords = ["325 320", "325 640", "885 320", "885 640"] coords = ["8 8", "4 12", "16 8", "12 12", "20 12"]
#Tworzenie listy stolikow #Tworzenie listy stolikow
stoliki = [] stoliki = []
@ -57,38 +63,28 @@ pygame.init()
pygame.display.set_caption("Automatyczny kelner") pygame.display.set_caption("Automatyczny kelner")
#----------------wymiary okna #----------------wymiary okna
width = 1200 width = columns * blockSize
height = 800 height = rows * blockSize
screen = pygame.display.set_mode((width, height)) screen = pygame.display.set_mode((width, height))
kelnerImg = pygame.image.load("kelner.png") kelnerImg = pygame.image.load("kelner.png")
kelnerImg = pygame.transform.scale(kelnerImg, (70, 70)) kelnerImg = pygame.transform.scale(kelnerImg, (blockSize, blockSize))
stolikImg = pygame.image.load("stolik.png") stolikImg = pygame.image.load("stolik.png")
stolikImg = pygame.transform.scale(stolikImg, (70, 70)) stolikImg = pygame.transform.scale(stolikImg, (blockSize, blockSize))
menuImg = pygame.image.load("menu.png") menuImg = pygame.image.load("menu.png")
menuImg = pygame.transform.scale(menuImg, (40, 40)) menuImg = pygame.transform.scale(menuImg, (blockSize / 2, blockSize / 2))
kitchenImg = pygame.image.load("kitchen.png") kitchenImg = pygame.image.load("kitchen.png")
kitchenImg = pygame.transform.scale(kitchenImg, (100, 100)) kitchenImg = pygame.transform.scale(kitchenImg, (blockSize * 2, blockSize * 2))
def kuchnia(x, y): def kuchnia(x, y):
screen.blit(kitchenImg, (x, y)) screen.blit(kitchenImg, (x * blockSize, y * blockSize))
def menu(x, y): def menu(x, y):
screen.blit(menuImg, (x, y)) screen.blit(menuImg, (x * blockSize, y * blockSize))
#def randomoweZamowienia():
#threading.Timer(5.0).start()
#x = random.randrange(0, 4)
#if zamownienia[x] == 0:
#zamownienia[x] = 1
#stolikImg = pygame.image.load("menu.png") #----zmien
#stolikImg = pygame.transform.scale(stolikImg, (70, 70))
#screen.blit(stolikImg, (1, 1))
def wypiszOkno(): def wypiszOkno():
screen.fill((0, 0, 0)) screen.fill((0, 0, 0))
blockSize = 80
for x in range(0, width, blockSize): for x in range(0, width, blockSize):
for y in range(0, height, blockSize): for y in range(0, height, blockSize):
rect = pygame.Rect(x, y, blockSize, blockSize) rect = pygame.Rect(x, y, blockSize, blockSize)
@ -96,13 +92,9 @@ def wypiszOkno():
run = True run = True
#def randomTime(): # czcionka = pygame.font.SysFont('Arial',50)
# x = random.randrange(2, 20)
# threading.Timer(x, randomTime).start()
# y=random.randrange(0, 2)
# return y
#whichPic = randomTime() licznik = 0
while run: while run:
wypiszOkno() wypiszOkno()
@ -116,6 +108,8 @@ while run:
if kelner.stan == "wraca": if kelner.stan == "wraca":
menu(kelner.x, kelner.y) menu(kelner.x, kelner.y)
licznik += 1
#------------weź zamowienie #------------weź zamowienie
for stolik in stoliki: for stolik in stoliki:
if stolik.zamowione == True: if stolik.zamowione == True:
@ -129,19 +123,20 @@ while run:
for stolik in stoliki: for stolik in stoliki:
if stolik.zamowione == True: if stolik.zamowione == True:
break break
for i in range(4): for i in range(len(stoliki)):
if random.randrange(2) == 1: if random.randrange(2) == 1:
stoliki[i].zamowione = True stoliki[i].zamowione = True
#print("kelner.x: " + str(kelner.x) + " kelner.y: " + str(kelner.y))-------------Wypisuje wspolrzedne kelnera #print(kelner.stan)--------------------------Wypisuje stan kelnera
#print(f"{kelner.x} {kelner.y}")-------------Wypisuje wspolrzedne kelnera
#----------------Zmiana pozycji kelnera #----------------Zmiana pozycji kelnera
if kelner.chodzi == True and licznik % (101 - kelner.speed) == 0: #ograniczenie prędkości
if kelner.x != kelner.cel_x: if kelner.x != kelner.cel_x:
kelner.x += kelner.speed * numpy.sign(kelner.cel_x - kelner.x) kelner.x += numpy.sign(kelner.cel_x - kelner.x)
else: else:
kelner.y += kelner.speed * numpy.sign(kelner.cel_y - kelner.y) #zmieniamy pozycje Y dopiero, gdy pozycja X bedzie prawidlowa kelner.y += 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 #----------------Sprawdzenie, czy kelner jest u celu
if kelner.x == kelner.cel_x and kelner.y == kelner.cel_y: if kelner.x == kelner.cel_x and kelner.y == kelner.cel_y: