BFS
This commit is contained in:
parent
129ad65d56
commit
f7e3227185
@ -2,6 +2,7 @@
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="152ea650-8e02-4ed6-aa8c-04d44b275be4" name="Default Changelist" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/game.py" beforeDir="false" afterPath="$PROJECT_DIR$/game.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/waiter.py" beforeDir="false" afterPath="$PROJECT_DIR$/waiter.py" afterDir="false" />
|
||||
</list>
|
||||
@ -22,15 +23,11 @@
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/game.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="250">
|
||||
<caret line="54" column="34" lean-forward="true" selection-start-line="54" selection-start-column="34" selection-end-line="54" selection-end-column="34" />
|
||||
<folding>
|
||||
<element signature="e#3097#3397#0" />
|
||||
<element signature="e#3437#3616#0" />
|
||||
</folding>
|
||||
<state relative-caret-position="116">
|
||||
<caret line="57" column="32" selection-start-line="57" selection-start-column="32" selection-end-line="57" selection-end-column="32" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@ -74,16 +71,16 @@
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/waiter.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="208">
|
||||
<caret line="137" selection-start-line="137" selection-end-line="137" />
|
||||
<state relative-caret-position="387">
|
||||
<caret line="361" column="20" selection-start-line="361" selection-start-column="20" selection-end-line="361" selection-end-column="20" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
<element signature="e#572#736#0" />
|
||||
<element signature="e#3728#4080#0" />
|
||||
<element signature="e#3839#4047#0" />
|
||||
<element signature="e#0#14#0" expanded="true" />
|
||||
<element signature="e#4604#5028#0" />
|
||||
<element signature="e#5089#9586#0" />
|
||||
<element signature="e#9658#12817#0" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
@ -101,6 +98,7 @@
|
||||
<component name="FindInProjectRecents">
|
||||
<findStrings>
|
||||
<find>self.last</find>
|
||||
<find>tmp</find>
|
||||
</findStrings>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
@ -125,14 +123,14 @@
|
||||
<option value="$PROJECT_DIR$/table.py" />
|
||||
<option value="$PROJECT_DIR$/orderTable.py" />
|
||||
<option value="$PROJECT_DIR$/pool.py" />
|
||||
<option value="$PROJECT_DIR$/waiter.py" />
|
||||
<option value="$PROJECT_DIR$/game.py" />
|
||||
<option value="$PROJECT_DIR$/waiter.py" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds" extendedState="6">
|
||||
<option name="x" value="-7" />
|
||||
<option name="width" value="974" />
|
||||
<option name="width" value="1660" />
|
||||
<option name="height" value="1047" />
|
||||
</component>
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
|
||||
@ -164,7 +162,7 @@
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
||||
<property name="settings.editor.selected.configurable" value="editor.preferences.fonts.default" />
|
||||
<property name="settings.editor.selected.configurable" value="xml.catalog" />
|
||||
</component>
|
||||
<component name="RecentsManager">
|
||||
<key name="MoveFile.RECENT_KEYS">
|
||||
@ -267,13 +265,13 @@
|
||||
<frame x="-8" y="-8" width="1936" height="1056" extended-state="6" />
|
||||
<editor active="true" />
|
||||
<layout>
|
||||
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.18335089" />
|
||||
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.21443625" />
|
||||
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
||||
<window_info id="Favorites" order="2" side_tool="true" />
|
||||
<window_info anchor="bottom" id="Message" order="0" />
|
||||
<window_info anchor="bottom" id="Find" order="1" weight="0.32936078" />
|
||||
<window_info active="true" anchor="bottom" id="Run" order="2" sideWeight="0.49894625" visible="true" weight="0.29577464" />
|
||||
<window_info anchor="bottom" id="Debug" order="3" weight="0.27193934" />
|
||||
<window_info active="true" anchor="bottom" id="Run" order="2" sideWeight="0.49894625" visible="true" weight="0.2979415" />
|
||||
<window_info anchor="bottom" id="Debug" order="3" weight="0.2713348" />
|
||||
<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="TODO" order="6" weight="0.32936078" />
|
||||
@ -330,28 +328,6 @@
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager>
|
||||
<breakpoints>
|
||||
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
||||
<url>file://$PROJECT_DIR$/waiter.py</url>
|
||||
<line>135</line>
|
||||
<option name="timeStamp" value="56" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
||||
<url>file://$PROJECT_DIR$/waiter.py</url>
|
||||
<line>137</line>
|
||||
<option name="timeStamp" value="57" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
||||
<url>file://$PROJECT_DIR$/waiter.py</url>
|
||||
<line>227</line>
|
||||
<option name="timeStamp" value="58" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
||||
<url>file://$PROJECT_DIR$/waiter.py</url>
|
||||
<line>78</line>
|
||||
<option name="timeStamp" value="59" />
|
||||
</line-breakpoint>
|
||||
</breakpoints>
|
||||
<default-breakpoints>
|
||||
<breakpoint type="python-exception">
|
||||
<properties notifyOnTerminate="true" exception="BaseException">
|
||||
@ -448,6 +424,13 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/gridElement.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="154">
|
||||
<caret line="7" column="17" selection-start-line="7" selection-start-column="17" selection-end-line="7" selection-end-column="17" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/table.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="308">
|
||||
@ -479,33 +462,22 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/waiter.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="208">
|
||||
<caret line="137" selection-start-line="137" selection-end-line="137" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
<element signature="e#572#736#0" />
|
||||
<element signature="e#3728#4080#0" />
|
||||
<element signature="e#3839#4047#0" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/gridElement.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="154">
|
||||
<caret line="7" column="17" selection-start-line="7" selection-start-column="17" selection-end-line="7" selection-end-column="17" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/game.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="250">
|
||||
<caret line="54" column="34" lean-forward="true" selection-start-line="54" selection-start-column="34" selection-end-line="54" selection-end-column="34" />
|
||||
<state relative-caret-position="116">
|
||||
<caret line="57" column="32" selection-start-line="57" selection-start-column="32" selection-end-line="57" selection-end-column="32" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/waiter.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="387">
|
||||
<caret line="361" column="20" selection-start-line="361" selection-start-column="20" selection-end-line="361" selection-end-column="20" />
|
||||
<folding>
|
||||
<element signature="e#3097#3397#0" />
|
||||
<element signature="e#3437#3616#0" />
|
||||
<element signature="e#0#14#0" expanded="true" />
|
||||
<element signature="e#4604#5028#0" />
|
||||
<element signature="e#5089#9586#0" />
|
||||
<element signature="e#9658#12817#0" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
|
Binary file not shown.
22
game.py
22
game.py
@ -40,8 +40,8 @@ class Game(object):
|
||||
self.row.append(self.waiter)
|
||||
self.waiterNumberInGrid.x = i
|
||||
self.waiterNumberInGrid.y = b
|
||||
elif (((b > 0 and b < 6) and (i > 0 and i < 9)) and not((i==1 or i == 8) and (b==1 or b==5))) \
|
||||
or (b>6 and (i<4 or i > 5) ):
|
||||
elif ((((b > 0 and b < 6) and (i > 0 and i < 9)) and not((i==1 or i == 8) and (b==1 or b==5))) \
|
||||
or (b>6 and (i<4 or i > 5) ) ):
|
||||
self.row.append(Pool(i * 50, b * 50, self))
|
||||
else:
|
||||
self.row.append(GridElement(i * 50, b * 50, self))
|
||||
@ -50,10 +50,15 @@ class Game(object):
|
||||
self.row.clear()
|
||||
|
||||
|
||||
self.dfs(self.waiter, 1, [])
|
||||
#self.dfs(self.waiter, 1, [])
|
||||
|
||||
#self.dfs(self.waiter, 3, [])
|
||||
|
||||
self.bfs(self.waiter, 1, [])
|
||||
self.bfs(self.waiter, 3, [])
|
||||
|
||||
#path = self.waiter.bfsFind([self.waiter.positionX, self.waiter.positionY], [], 1)
|
||||
|
||||
while True:
|
||||
|
||||
for event in pygame.event.get():
|
||||
@ -107,5 +112,14 @@ class Game(object):
|
||||
waiter.allPath = []
|
||||
waiter.followThePath(bestPath)
|
||||
|
||||
def bfs(self, waiter, soughtID, operation=[]):
|
||||
waiter.bfsFind([waiter.positionX, waiter.positionY], operation, soughtID)
|
||||
paths = waiter.bfsPaths
|
||||
paths.sort(key=len)
|
||||
bestPath = paths[0]
|
||||
waiter.bfsPaths = []
|
||||
waiter.followThePath(bestPath)
|
||||
|
||||
if __name__ == "__main__":
|
||||
Game()
|
||||
v1 = Game()
|
||||
|
||||
|
84
waiter.py
84
waiter.py
@ -1,7 +1,10 @@
|
||||
import asyncio
|
||||
from multiprocessing import Queue
|
||||
import pygame
|
||||
import time
|
||||
from pygame.math import Vector2
|
||||
|
||||
|
||||
class Waiter(object):
|
||||
|
||||
def __init__(self, game, x, y):
|
||||
@ -17,10 +20,16 @@ class Waiter(object):
|
||||
self.image.set_colorkey((255, 255, 255))
|
||||
self.type = "waiter"
|
||||
self.lastStep = []
|
||||
self.tmp = []
|
||||
|
||||
|
||||
self.dfsStack = []
|
||||
self.allPath = []
|
||||
|
||||
|
||||
self.bfsQueue = []
|
||||
self.bfsPaths = []
|
||||
|
||||
|
||||
def findWaiter(self, grid):
|
||||
for y in range(10):
|
||||
for x in range(10):
|
||||
@ -277,16 +286,16 @@ class Waiter(object):
|
||||
if i == "Down":
|
||||
newPosition[1] += 1
|
||||
|
||||
self.tmp.append([newPosition, newCurrentOperation, idTable])
|
||||
while self.tmp:
|
||||
move = self.tmp.pop()
|
||||
self.dfsStack.append([newPosition, newCurrentOperation, idTable])
|
||||
while self.dfsStack:
|
||||
move = self.dfsStack.pop()
|
||||
self.dfsFind(move[0], move[1], move[2])
|
||||
|
||||
else:
|
||||
step = allstep.pop()
|
||||
|
||||
print("Wybrałem: ", step)
|
||||
print("Pozycja tego cwela: ", position)
|
||||
print("Pozycja kelnera: ", position)
|
||||
if step == "Left":
|
||||
position[0] -= 1
|
||||
currentOperation.append("Left")
|
||||
@ -302,6 +311,71 @@ class Waiter(object):
|
||||
|
||||
self.dfsFind(position, currentOperation, idTable)
|
||||
|
||||
def bfsFind(self, position, currentOperation, idTable):
|
||||
print("Sprawdzam czy stolik")
|
||||
|
||||
positionX = position[0]
|
||||
positionY = position[1]
|
||||
print(position)
|
||||
if self.isMoveInRange("Up", position):
|
||||
if self.grid[positionY - 1][positionX].type == "table":
|
||||
if self.grid[positionY - 1][positionX].id == idTable:
|
||||
self.bfsPaths.append(currentOperation)
|
||||
print("Dodalem do BFS path sciezke jedna z miliona")
|
||||
print(self.bfsPaths)
|
||||
return 0
|
||||
if self.isMoveInRange("Down", position):
|
||||
if self.grid[positionY + 1][positionX].type == "table":
|
||||
if self.grid[positionY + 1][positionX].id == idTable:
|
||||
self.bfsPaths.append(currentOperation)
|
||||
print("Dodalem do BFS path sciezke jedna z miliona")
|
||||
print(self.bfsPaths)
|
||||
return 0
|
||||
if self.isMoveInRange("Left", position):
|
||||
if self.grid[positionY][positionX - 1].type == "table":
|
||||
if self.grid[positionY][positionX - 1].id == idTable:
|
||||
self.bfsPaths.append(currentOperation)
|
||||
print("Dodalem do BFS path sciezke jedna z miliona")
|
||||
print(self.bfsPaths)
|
||||
return 0
|
||||
if self.isMoveInRange("Right", position):
|
||||
if self.grid[positionY][positionX + 1].type == "table":
|
||||
if self.grid[positionY][positionX + 1].id == idTable:
|
||||
self.bfsPaths.append(currentOperation)
|
||||
print("Dodalem do BFS path sciezke jedna z miliona")
|
||||
print(self.bfsPaths)
|
||||
return 0
|
||||
# print("Sprawdzilem nie jest to stolik")
|
||||
steps = []
|
||||
steps.append(self.checkPoss(position, currentOperation))
|
||||
allstep = steps[-1]
|
||||
print("Naszymi mozliwosciami sa ", allstep)
|
||||
if not allstep:
|
||||
return 0
|
||||
else:
|
||||
for step in allstep:
|
||||
newCurrentOperation = currentOperation[:]
|
||||
newCurrentOperation.append(step)
|
||||
newPosition = position[:]
|
||||
if step == "Left":
|
||||
newPosition[0] -= 1
|
||||
|
||||
|
||||
elif step == "Right":
|
||||
newPosition[0] += 1
|
||||
|
||||
elif step == "Up":
|
||||
newPosition[1] -= 1
|
||||
|
||||
else:
|
||||
newPosition[1] += 1
|
||||
|
||||
self.bfsQueue.append([newPosition, newCurrentOperation, idTable])
|
||||
#print("Liczba elementow w kolejce", self.bfsQueue)
|
||||
while self.bfsQueue:
|
||||
move = self.bfsQueue.pop(0)
|
||||
self.bfsFind(move[0], move[1], move[2])
|
||||
|
||||
def followThePath(self, path):
|
||||
for direction in path:
|
||||
if direction == "Left":
|
||||
|
Loading…
Reference in New Issue
Block a user