89 lines
3.9 KiB
Markdown
89 lines
3.9 KiB
Markdown
##### Raport przygotowały: Sara Kowalska, Marta Roszak, Kinga Molik i Natalia Plitta
|
|
|
|
##### Raportowany okres: 27 kwietnia - 15 czerwca
|
|
|
|
##### Niniejszy raport poświęcony jest przekazaniu informacji na temat końcowego stanu projektu grupowego realizowanego na przedmiot Sztuczna Inteligencja w roku akademickim 2019/2020.
|
|
|
|
W ramach projektu były realizowane 4 mini projekty:
|
|
|
|
- "Rozpoznawanie talerzy" - Sara Kowalska
|
|
- "Ocenianie ciężkostrawności potraw" - Marta Roszak
|
|
- "Rozpoznawanie banknotów" - Kinga Molik
|
|
- "Polecanie dań" - Natalia Plitta
|
|
|
|
## Integracja mini projektów w programie głównym ##
|
|
|
|
Działanie projektów indywidualnych zostało opisane w odpowiednich osobnych raportach. Sposób działania ("chodzenia") agenta został opisany w raporcie dotyczącym działania algorytmu A*. Wszystkie 4 podprojekty zostały zintegrowane w głównym programie w ten sam sposób. W oknie programu zostały umieszczone 4 przyciski uruchamiające poszczególne programy:
|
|
|
|
![alt text](https://git.wmi.amu.edu.pl/s444412/DSZI_2020_Projekt/raw/master/Restaurant/okno_z_przyciskami.png)
|
|
|
|
Naciśnięcie któregoś z nich wywołuje odpowiednią funkcję - *classify() / evaluate() / payment() / Tree_natalia()*, która wykonuje przykładowy ruch agenta prezentujący dane zagadnienie:
|
|
|
|
```python
|
|
flag = True
|
|
clock = pygame.time.Clock()
|
|
while flag:
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
pygame.quit()
|
|
quit()
|
|
button("Rozpoznawanie talerzy", 0, width + 1, 150, 48, light_beige, white, classify)
|
|
button("Ciężkostrawność dań", 150, width + 1, 150, 48, light_beige, white, evaluate)
|
|
button("Rozpoznawanie banknotów", 300, width + 1, 150, 48, light_beige, white, payment)
|
|
button("Polecanie dań", 450, width + 1, 150, 48, light_beige, white, Tree_natalia)
|
|
redrawWindow(window)
|
|
|
|
```
|
|
|
|
Funkcja *button()* zdefiniowana jest następująco:
|
|
|
|
```python
|
|
def button(msg, x, y, w, h, ic, ac, action=None):
|
|
mouse = pygame.mouse.get_pos()
|
|
click = pygame.mouse.get_pressed()
|
|
|
|
if x+w > mouse[0] > x and y+h > mouse[1] > y:
|
|
pygame.draw.rect(window, ac, (x, y, w, h))
|
|
if click[0] == 1 and action != None:
|
|
print("pressed")
|
|
action(1)
|
|
else:
|
|
pygame.draw.rect(window, ic, (x, y, w, h))
|
|
|
|
smallText = pygame.font.Font("freesansbold.ttf", 15)
|
|
words = [msg.split(' ')]
|
|
textSurf, textRect = text_objects(words[0][0], smallText)
|
|
textRect.center = ((x+(w/2)), (y+(h/4)))
|
|
window.blit(textSurf, textRect)
|
|
|
|
textSurf, textRect = text_objects(words[0][1], smallText)
|
|
textRect.center = ((x + (w / 2)), (y + (3*h / 4)))
|
|
window.blit(textSurf, textRect)
|
|
```
|
|
|
|
Sczytywana jest tutaj pozycja myszki - "sprawdzane jest", czy został naciśnięty lewy przycisk myszy i jeśli tak, to na który przycisk kliknął użytkownik. Zdefiniowany jest również wygląd tekstu znajdującego się na przyciskach.
|
|
|
|
Funkcja *button()* wywoływana jest też w funkcji *redrawWindow()*, która odpowiada za odświeżanie wyświetlanego okna:
|
|
|
|
```python
|
|
def redrawWindow(surface):
|
|
surface.fill(beige)
|
|
bot.draw(surface)
|
|
kitchen.draw(surface)
|
|
for i in range(len(tables)):
|
|
tables[i].draw(surface)
|
|
for i in range(len(puddles)):
|
|
image = pygame.image.load(r'puddle.png')
|
|
image = pygame.transform.scale(image, (sizeBetween - 1, sizeBetween - 1))
|
|
surface.blit(image, (puddles[i][0] * sizeBetween + 1, puddles[i][1] * sizeBetween + 1))
|
|
|
|
drawGrid(width, rows, surface)
|
|
button("Rozpoznawanie talerzy", 0, width + 1, 150, 48, light_beige, white)
|
|
button("Ciężkostrawność dań", 150, width + 1, 150, 48, light_beige, white)
|
|
button("Rozpoznawanie banknotów", 300, width + 1, 150, 48, light_beige, white)
|
|
button("Polecanie dań", 450, width + 1, 150, 48, light_beige, white)
|
|
|
|
pygame.display.update()
|
|
```
|
|
|
|
Po bezawaryjnym wykonaniu funkcji - ruchu agenta, aplikacja zostaje wyłączona. |