##### 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.