Dodanie kierunku agenta; rozstawienie stolow; dodanie kuchni; agent nie wchodzi na pola z obiektem stol i kuchnia

This commit is contained in:
s444447 2020-04-25 14:31:02 +02:00
parent 1a23e2bebf
commit d88933f530
9 changed files with 180 additions and 54 deletions

6
Restaurant/.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

View File

@ -1,7 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="76f12f94-8135-4028-8378-41c67cca6cd2" name="Default Changelist" comment="" /> <list default="true" id="76f12f94-8135-4028-8378-41c67cca6cd2" name="Default Changelist" comment="Dodanie kierunku agenta; rozstawienie stolow; dodanie kuchni; agent nie wchodzi na pola z obiektem stol i kuchnia">
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/kitchen1.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/kitchen2.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/kitchen3.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/kitchen4.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/waiter_left.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/waiter_right.png" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -9,12 +19,15 @@
<option name="LAST_RESOLUTION" value="IGNORE" /> <option name="LAST_RESOLUTION" value="IGNORE" />
</component> </component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="true"> <file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/main.py"> <entry file="file://$PROJECT_DIR$/main.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="277"> <state relative-caret-position="4">
<caret line="18" column="61" selection-start-line="18" selection-start-column="61" selection-end-line="18" selection-end-column="61" /> <caret line="20" column="51" lean-forward="true" selection-start-line="20" selection-start-column="51" selection-end-line="20" selection-end-column="51" />
<folding>
<element signature="e#0#13#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -28,6 +41,14 @@
</list> </list>
</option> </option>
</component> </component>
<component name="Git.Settings">
<option name="PREVIOUS_COMMIT_AUTHORS">
<list>
<option value="Kinga Molik" />
</list>
</option>
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
</component>
<component name="IdeDocumentHistory"> <component name="IdeDocumentHistory">
<option name="CHANGED_PATHS"> <option name="CHANGED_PATHS">
<list> <list>
@ -35,18 +56,17 @@
</list> </list>
</option> </option>
</component> </component>
<component name="ProjectFrameBounds" extendedState="7"> <component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="574" /> <option name="x" value="950" />
<option name="y" value="-19" /> <option name="width" value="979" />
<option name="width" value="694" /> <option name="height" value="1040" />
<option name="height" value="735" />
</component> </component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView"> <component name="ProjectView">
<navigator proportions="" version="1"> <navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" /> <foldersAlwaysOnTop value="true" />
</navigator> </navigator>
<panes> <panes>
<pane id="Scope" />
<pane id="ProjectPane"> <pane id="ProjectPane">
<subPane> <subPane>
<expand> <expand>
@ -58,10 +78,11 @@
<select /> <select />
</subPane> </subPane>
</pane> </pane>
<pane id="Scope" />
</panes> </panes>
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
<property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" /> <property name="settings.editor.selected.configurable" value="settings.github" />
</component> </component>
<component name="RecentsManager"> <component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS"> <key name="MoveFile.RECENT_KEYS">
@ -122,33 +143,48 @@
<servers /> <servers />
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="-8" y="-8" width="1382" height="744" extended-state="6" /> <frame x="-7" y="-7" width="1550" height="838" extended-state="6" />
<editor active="true" />
<layout> <layout>
<window_info id="Favorites" side_tool="true" /> <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.019828156" />
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.122023806" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" /> <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="Version Control" /> <window_info id="Favorites" order="2" side_tool="true" />
<window_info anchor="bottom" id="Python Console" />
<window_info anchor="bottom" id="Terminal" />
<window_info anchor="bottom" id="Event Log" sideWeight="0.50074404" side_tool="true" weight="0.3289689" />
<window_info anchor="bottom" id="Message" order="0" /> <window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" /> <window_info anchor="bottom" id="Find" order="1" />
<window_info active="true" anchor="bottom" id="Run" order="2" sideWeight="0.49925596" visible="true" weight="0.3289689" /> <window_info anchor="bottom" id="Run" order="2" sideWeight="0.49925596" weight="0.3045326" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.39934534" /> <window_info anchor="bottom" id="Debug" order="3" weight="0.39934534" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" /> <window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Version Control" order="7" weight="0.53824365" />
<window_info anchor="bottom" id="Terminal" order="8" weight="0.9575071" />
<window_info anchor="bottom" id="Event Log" order="9" sideWeight="0.50074404" side_tool="true" weight="0.3289689" />
<window_info anchor="bottom" id="Python Console" order="10" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
</layout> </layout>
</component> </component>
<component name="VcsManagerConfiguration">
<MESSAGE value="Dodanie kierunku agenta; rozstawienie stolow; dodanie kuchni; agent nie wchodzi na pola z obiektem stol i kuchnia" />
<option name="LAST_COMMIT_MESSAGE" value="Dodanie kierunku agenta; rozstawienie stolow; dodanie kuchni; agent nie wchodzi na pola z obiektem stol i kuchnia" />
</component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$USER_HOME$/Downloads/DSZI_2020_Projekt-master/dszi_2020_projekt/Restaurant/main.py">
<provider selected="true" editor-type-id="text-editor">
<state>
<folding>
<element signature="e#0#13#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/main.py"> <entry file="file://$PROJECT_DIR$/main.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="277"> <state relative-caret-position="4">
<caret line="18" column="61" selection-start-line="18" selection-start-column="61" selection-end-line="18" selection-end-column="61" /> <caret line="20" column="51" lean-forward="true" selection-start-line="20" selection-start-column="51" selection-end-line="20" selection-end-column="51" />
<folding>
<element signature="e#0#13#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>

BIN
Restaurant/kitchen1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
Restaurant/kitchen2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
Restaurant/kitchen3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
Restaurant/kitchen4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

View File

@ -28,9 +28,10 @@ class Plate(object):
class Kitchen(object): class Kitchen(object):
def __init__(self): def __init__(self, pos):
self.readyDishes = queue.queue(32) #kolejka o maksymalnej długości 32 self.readyDishes = queue.Queue(32) #kolejka o maksymalnej długości 32
self.orders = queue.queue(32) self.orders = queue.Queue(32) #wyskakiwał mi tu błąd - poprawiłam na dużą literę i jest ok
self.pos = pos
def makeDish(self): def makeDish(self):
if not self.orders.empty(): if not self.orders.empty():
@ -45,6 +46,24 @@ class Kitchen(object):
else: else:
return None return None
def draw(self, surface):
image1 = pygame.image.load(r'kitchen1.png')
image1 = pygame.transform.scale(image1, (sizeBetween - 1, sizeBetween - 1))
surface.blit(image1, (13*sizeBetween+1, 0*sizeBetween+1))
image2 = pygame.image.load(r'kitchen2.png')
image2 = pygame.transform.scale(image2, (sizeBetween - 1, sizeBetween - 1))
surface.blit(image2, (14*sizeBetween+1, 0*sizeBetween+1))
image3 = pygame.image.load(r'kitchen3.png')
image3 = pygame.transform.scale(image3, (sizeBetween - 1, sizeBetween - 1))
surface.blit(image3, (13*sizeBetween+1, 1*sizeBetween+1))
image4 = pygame.image.load(r'kitchen4.png')
image4 = pygame.transform.scale(image4, (sizeBetween - 1, sizeBetween - 1))
surface.blit(image4, (14*sizeBetween+1, 1*sizeBetween+1))
class Client(object): class Client(object):
def __init__(self, age, sex, budget): def __init__(self, age, sex, budget):
@ -81,43 +100,52 @@ class Table(object):
class Waiter(object): class Waiter(object):
def __init__(self, color, pos): def __init__(self, color, pos, direction):
self.color = color self.color = color
self.pos = pos #pozycja agenta, zapisana w formie dwuelementowej listy self.pos = pos #pozycja agenta, zapisana w formie dwuelementowej listy
self.dirnx = 0 #zmienne dirnx i dirny używane są do ruchu bota i ustalania, w którą stronę jest zwrócony self.dirnx = 0 #zmienne dirnx i dirny używane są do ruchu bota i ustalania, w którą stronę jest zwrócony
self.dirny = 1 self.dirny = 1
self.plates = [] #lista niesionych przez agenta talerzy, planowo lista par: (talerz, klient) self.plates = [] #lista niesionych przez agenta talerzy, planowo lista par: (talerz, klient)
self.direction = direction #kierunek, w ktory jest skierowany bot
def moveRandomly(self):
def moveRandomly(self, noWalkable):
rand = random.randrange(1, 5, 1) #losuje w zakresie 1-4 rand = random.randrange(1, 5, 1) #losuje w zakresie 1-4
print(rand) #print(rand)
if rand == 1: if rand == 1:
self.dirnx = -1 self.dirnx = -1
self.dirny = 0 self.dirny = 0
if self.pos[0] == 0: #zabezpieczenie przed wyjściem bota poza obszar okna w ruchu losowym self.direction = 'left'
self.dirnx *= (-1) if self.pos[0] == 0 or ([self.pos[0] + self.dirnx, self.pos[1] + self.dirny] in noWalkable): #zabezpieczenie przed wyjściem bota poza obszar okna w ruchu losowym
self.pos = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny) self.dirnx *= (-1) #oraz w miejsce, na ktore nie moze wejsc (stoły, kuchania)
self.direction = 'right'
self.pos = [self.pos[0] + self.dirnx, self.pos[1] + self.dirny]
elif rand == 2: elif rand == 2:
self.dirnx = 1 self.dirnx = 1
self.dirny = 0 self.dirny = 0
if self.pos[0] == 14: self.direction = 'right'
if self.pos[0] == 14 or ([self.pos[0] + self.dirnx, self.pos[1] + self.dirny] in noWalkable):
self.dirnx *= (-1) self.dirnx *= (-1)
self.pos = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny) self.direction = 'left'
self.pos = [self.pos[0] + self.dirnx, self.pos[1] + self.dirny]
elif rand == 3: elif rand == 3:
self.dirnx = 0 self.dirnx = 0
self.dirny = -1 self.dirny = -1
if self.pos[1] == 0: if self.pos[1] == 0 or ([self.pos[0] + self.dirnx, self.pos[1] + self.dirny] in noWalkable):
self.dirny *= (-1) self.dirny *= (-1)
self.pos = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny) self.pos = [self.pos[0] + self.dirnx, self.pos[1] + self.dirny]
elif rand == 4: elif rand == 4:
self.dirnx = 0 self.dirnx = 0
self.dirny = 1 self.dirny = 1
if self.pos[1] == 14: if self.pos[1] == 14 or ([self.pos[0] + self.dirnx, self.pos[1] + self.dirny] in noWalkable):
self.dirny *= (-1) self.dirny *= (-1)
self.pos = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny) self.pos = [self.pos[0] + self.dirnx, self.pos[1] + self.dirny]
def moveWithKeyboard(self): #funkcja testowa - bot sterowany z klawiatury def moveWithKeyboard(self, noWalkable): #funkcja testowa - bot sterowany z klawiatury
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
pygame.quit() pygame.quit()
@ -129,8 +157,13 @@ class Waiter(object):
if keys[pygame.K_LEFT]: if keys[pygame.K_LEFT]:
self.dirnx = -1 self.dirnx = -1
self.dirny = 0 self.dirny = 0
self.pos = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny) self.direction = 'left'
break if self.pos[0] == 0 or ([self.pos[0] + self.dirnx, self.pos[1] + self.dirny] in noWalkable): # zabezpieczenie przed wyjściem bota poza obszar okna w ruchu losowym
#self.dirnx *= (-1)
break
else:
self.pos = [self.pos[0] + self.dirnx, self.pos[1] + self.dirny]
break
# te break musiałam dodać, bo w przeciwnym wypadku zamiast jednego kroku robił 303 - jeden za drugim # te break musiałam dodać, bo w przeciwnym wypadku zamiast jednego kroku robił 303 - jeden za drugim
# nie wiem dlaczego tak było, po zmianie sterowania z klawiatury na bota samego w sobie nie powinno # nie wiem dlaczego tak było, po zmianie sterowania z klawiatury na bota samego w sobie nie powinno
# być z tym problemów, to jest na razie tylko, żeby pokazać, że ten ruch jest # być z tym problemów, to jest na razie tylko, żeby pokazać, że ten ruch jest
@ -138,20 +171,33 @@ class Waiter(object):
elif keys[pygame.K_RIGHT]: elif keys[pygame.K_RIGHT]:
self.dirnx = 1 self.dirnx = 1
self.dirny = 0 self.dirny = 0
self.pos = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny) self.direction = 'right'
break if self.pos[0] == 14 or ([self.pos[0] + self.dirnx, self.pos[1] + self.dirny] in noWalkable):
#self.dirnx *= (-1)
break
else:
self.pos = [self.pos[0] + self.dirnx, self.pos[1] + self.dirny]
break
elif keys[pygame.K_UP]: elif keys[pygame.K_UP]:
self.dirnx = 0 self.dirnx = 0
self.dirny = -1 self.dirny = -1
self.pos = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny) if self.pos[1] == 0 or ([self.pos[0] + self.dirnx, self.pos[1] + self.dirny] in noWalkable):
break #self.dirny *= (-1)
break
else:
self.pos = [self.pos[0] + self.dirnx, self.pos[1] + self.dirny]
break
elif keys[pygame.K_DOWN]: elif keys[pygame.K_DOWN]:
self.dirnx = 0 self.dirnx = 0
self.dirny = 1 self.dirny = 1
self.pos = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny) if self.pos[1] == 14 or ([self.pos[0] + self.dirnx, self.pos[1] + self.dirny] in noWalkable):
break #self.dirny *= (-1)
break
else:
self.pos = [self.pos[0] + self.dirnx, self.pos[1] + self.dirny]
break
def resetPosition(self, pos): def resetPosition(self, pos):
self.pos = pos self.pos = pos
@ -169,10 +215,23 @@ class Waiter(object):
client.takePlateAndEat(plate) client.takePlateAndEat(plate)
def draw(self, surface): def draw(self, surface):
i = self.pos[0] if self.direction == 'right':
j = self.pos[1] image = pygame.image.load(r'waiter_right.png')
image = pygame.transform.scale(image, (sizeBetween - 1, sizeBetween - 1))
pygame.draw.rect(surface, self.color, (i*sizeBetween+1, j*sizeBetween+1, sizeBetween-1, sizeBetween-1)) i = self.pos[0]
j = self.pos[1]
surface.blit(image, (i*sizeBetween+1, j*sizeBetween+1))
else:
image = pygame.image.load(r'waiter_left.png')
image = pygame.transform.scale(image, (sizeBetween - 1, sizeBetween - 1))
i = self.pos[0]
j = self.pos[1]
surface.blit(image, (i*sizeBetween+1, j*sizeBetween+1))
def drawGrid(width, rows, surface): def drawGrid(width, rows, surface):
@ -190,13 +249,21 @@ def drawGrid(width, rows, surface):
def redrawWindow(surface): def redrawWindow(surface):
surface.fill(beige) surface.fill(beige)
bot.draw(surface) bot.draw(surface)
table1.draw(surface) kitchen.draw(surface)
for i in range(len(tables)):
tables[i].draw(surface)
drawGrid(width, rows, surface) drawGrid(width, rows, surface)
pygame.display.update() pygame.display.update()
def noWalkable(tables, kitchen):
list = []
for i in range(len(tables)):
list.append(tables[i].pos)
list.append(kitchen.pos)
return list
def main(): def main():
global width, rows, bot, beige, white, black, sizeBetween, table1 global width, rows, bot, beige, white, black, sizeBetween, tables, kitchen
# skróty do kolorów # skróty do kolorów
beige = (255, 205, 178) beige = (255, 205, 178)
white = (255, 255, 255) white = (255, 255, 255)
@ -206,16 +273,33 @@ def main():
rows = 15 rows = 15
sizeBetween = width // rows #wielkość pojedynczej kratki sizeBetween = width // rows #wielkość pojedynczej kratki
window = pygame.display.set_mode((width, width)) window = pygame.display.set_mode((width, width))
bot = Waiter((255, 0, 0), [7, 7]) bot = Waiter((255, 0, 0), [12, 8], 'right')
table1 = Table([5, 5])
tables = []
tables.append(Table([0, 3], 1))
tables.append(Table([0, 6], 1))
tables.append(Table([0, 9], 2))
tables.append(Table([0, 12], 2))
tables.append(Table([4, 4], 2))
tables.append(Table([4, 7], 2))
tables.append(Table([4, 10], 2))
tables.append(Table([4, 13], 2))
tables.append(Table([8, 3], 1))
tables.append(Table([8, 6], 1))
tables.append(Table([8, 9], 2))
tables.append(Table([8, 12], 2))
flag = True flag = True
clock = pygame.time.Clock() clock = pygame.time.Clock()
kitchen = Kitchen([13, 1])
list = noWalkable(tables, kitchen) # lista pozycji, na ktore bot nie moze wejsc
while flag: while flag:
pygame.time.delay(100) pygame.time.delay(100)
clock.tick(60) clock.tick(60)
for i in range(40): #bot testowo ma wykonać 40 kroków for i in range(40): #bot testowo ma wykonać 40 kroków
bot.moveRandomly() bot.moveRandomly(list)
redrawWindow(window) redrawWindow(window)
time.sleep(0.5) #opóźnienie każdego kolejnego kroku o pół sekundy time.sleep(0.5) #opóźnienie każdego kolejnego kroku o pół sekundy
flag = False flag = False

BIN
Restaurant/waiter_left.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

BIN
Restaurant/waiter_right.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB