DFS cały działa

This commit is contained in:
Arkadiusz 2019-05-08 00:24:04 +01:00
parent fe478e5ff8
commit 129ad65d56
4 changed files with 142 additions and 113 deletions

View File

@ -2,7 +2,6 @@
<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>
@ -23,11 +22,15 @@
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/game.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="273">
<caret line="54" column="8" selection-start-line="54" selection-start-column="8" selection-end-line="54" selection-end-column="8" />
<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>
</provider>
</entry>
@ -71,21 +74,16 @@
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/waiter.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="281">
<caret line="290" column="53" selection-start-line="290" selection-start-column="53" selection-end-line="290" selection-end-column="53" />
<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#778#1419#0" />
<element signature="e#1460#2110#0" />
<element signature="e#2789#3398#0" />
<element signature="e#3436#3808#0" />
<element signature="e#3728#4080#0" />
<element signature="e#3839#4047#0" />
<element signature="e#4099#4564#0" />
<element signature="e#4621#8896#0" />
</folding>
</state>
</provider>
@ -127,8 +125,8 @@
<option value="$PROJECT_DIR$/table.py" />
<option value="$PROJECT_DIR$/orderTable.py" />
<option value="$PROJECT_DIR$/pool.py" />
<option value="$PROJECT_DIR$/game.py" />
<option value="$PROJECT_DIR$/waiter.py" />
<option value="$PROJECT_DIR$/game.py" />
</list>
</option>
</component>
@ -332,6 +330,28 @@
</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">
@ -428,13 +448,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/order.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="132">
<caret line="6" selection-start-line="6" selection-end-line="6" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/table.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="308">
@ -459,6 +472,26 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/order.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="132">
<caret line="6" selection-start-line="6" selection-end-line="6" />
</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">
@ -468,25 +501,11 @@
</entry>
<entry file="file://$PROJECT_DIR$/game.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="273">
<caret line="54" column="8" selection-start-line="54" selection-start-column="8" selection-end-line="54" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/waiter.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="281">
<caret line="290" column="53" selection-start-line="290" selection-start-column="53" selection-end-line="290" selection-end-column="53" />
<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#0#13#0" expanded="true" />
<element signature="e#572#736#0" />
<element signature="e#778#1419#0" />
<element signature="e#1460#2110#0" />
<element signature="e#2789#3398#0" />
<element signature="e#3436#3808#0" />
<element signature="e#3839#4047#0" />
<element signature="e#4099#4564#0" />
<element signature="e#4621#8896#0" />
<element signature="e#3097#3397#0" />
<element signature="e#3437#3616#0" />
</folding>
</state>
</provider>

Binary file not shown.

23
game.py
View File

@ -48,13 +48,11 @@ class Game(object):
if i == self.x-1:
self.grid.append(list(self.row))
self.row.clear()
#copyGrid = copy.copy(self.grid)
#copyGrid = []
#kopia = copy.deepcopy(self.grid[9][4])
#kopia = [[num for num in line] for line in self.grid]
path = self.waiter.dfsFind([self.waiter.positionX, self.waiter.positionY], [], 2)
#print("Prawdziwa pozycja kelnera: {0}, {1} ", self.waiter.positionX, self.waiter.positionY)
#print(self.waiter.findWaiter(self.grid[:]))
self.dfs(self.waiter, 1, [])
#self.dfs(self.waiter, 3, [])
while True:
@ -65,7 +63,7 @@ class Game(object):
self.draw()
self.waiter.move(self)
#print(self.waiter.checkPoss(self.grid, self.waiter.lastStep))
pygame.display.flip()
#print(self.waiterNumberInGrid)
self.fpsClock.tick(10)
@ -79,6 +77,7 @@ class Game(object):
tempTable.append(gridElement)
for otherElement in tempTable:
otherElement.draw()
pygame.display.flip()
def convert(self, object):
if object.type == "gridElement":
@ -100,7 +99,13 @@ class Game(object):
charakterList.append(row)
print(row)
def dfs(self, waiter, soughtID, operation=[]):
waiter.dfsFind([waiter.positionX, waiter.positionY], operation, soughtID)
paths = waiter.allPath
paths.sort(key=len)
bestPath = paths[0]
waiter.allPath = []
waiter.followThePath(bestPath)
if __name__ == "__main__":
Game()

135
waiter.py
View File

@ -29,76 +29,64 @@ class Waiter(object):
return [x, y]
def moveLeft(self, grid):
position = self.findWaiter(grid)
positionX = position[0]
positionY = position[1]
if positionX != 0:
collisionObject = grid[positionY][positionX - 1]
def moveLeft(self):
if self.positionX != 0:
collisionObject = self.game.grid[self.positionY][self.positionX - 1]
if collisionObject.type == "gridElement":
grid[positionY][positionX - 1].x += 50
grid[positionY][positionX].x -= 50
grid[positionY][positionX - 1], \
grid[positionY][positionX] = \
grid[positionY][positionX], \
grid[positionY][positionX - 1]
self.game.grid[self.positionY][self.positionX - 1].x += 50
self.game.grid[self.positionY][self.positionX].x -= 50
self.game.grid[self.positionY][self.positionX - 1], \
self.game.grid[self.positionY][self.positionX] = \
self.game.grid[self.positionY][self.positionX], \
self.game.grid[self.positionY][self.positionX - 1]
self.positionX -= 1
#print(self.positionX)
return grid
self.lastStep.append("Left")
else:
pass
def moveRight(self, grid):
position = self.findWaiter(grid)
positionX = position[0]
positionY = position[1]
if positionX != 9:
collisionObject = grid[positionY][positionX + 1]
def moveRight(self):
if self.positionX != self.game.x-1:
collisionObject = self.game.grid[self.positionY][self.positionX + 1]
if collisionObject.type == "gridElement":
grid[positionY][positionX + 1].x -= 50
grid[positionY][positionX].x += 50
grid[positionY][positionX + 1], \
grid[positionY][positionX] = \
grid[positionY][positionX], \
grid[positionY][positionX + 1]
# print(self.positionX)
return grid
self.game.grid[self.positionY][self.positionX + 1].x -= 50
self.game.grid[self.positionY][self.positionX].x += 50
self.game.grid[self.positionY][self.positionX + 1], \
self.game.grid[self.positionY][self.positionX] = \
self.game.grid[self.positionY][self.positionX], \
self.game.grid[self.positionY][self.positionX + 1]
self.positionX += 1
#print(self.positionX)
self.lastStep.append("Right")
else:
pass
def moveUp(self, grid):
position = self.findWaiter(grid)
positionX = position[0]
positionY = position[1]
if positionY != 0:
collisionObject = grid[positionY - 1][positionX]
def moveUp(self):
if self.positionY != 0:
collisionObject = self.game.grid[self.positionY - 1][self.positionX]
if collisionObject.type == "gridElement":
grid[positionY - 1][positionX].y += 50
grid[positionY][positionX].y -= 50
grid[positionY - 1][positionX], \
grid[positionY][positionX] = \
grid[positionY][positionX], \
grid[positionY - 1][positionX]
return grid
self.game.grid[self.positionY - 1][self.positionX].y += 50
self.game.grid[self.positionY][self.positionX].y -= 50
self.game.grid[self.positionY - 1][self.positionX], \
self.game.grid[self.positionY][self.positionX] = \
self.game.grid[self.positionY][self.positionX], \
self.game.grid[self.positionY - 1][self.positionX]
self.positionY -= 1
self.lastStep.append("Up")
else:
pass
def moveDown(self, grid):
position = self.findWaiter(grid)
positionX = position[0]
positionY = position[1]
if positionY != 9:
collisionObject = grid[positionY + 1][positionX]
def moveDown(self):
if self.positionY != self.game.y-1:
collisionObject = self.game.grid[self.positionY + 1][self.positionX]
if collisionObject.type == "gridElement":
grid[positionY + 1][positionX].y -= 50
grid[positionY][positionX].y += 50
grid[positionY + 1][positionX], \
grid[positionY][positionX] = \
grid[positionY][positionX], \
grid[positionY + 1][positionX]
return grid
self.game.grid[self.positionY + 1][self.positionX].y -= 50
self.game.grid[self.positionY][self.positionX].y += 50
self.game.grid[self.positionY + 1][self.positionX], \
self.game.grid[self.positionY][self.positionX] = \
self.game.grid[self.positionY][self.positionX], \
self.game.grid[self.positionY + 1][self.positionX]
self.positionY += 1
self.lastStep.append("Down")
else:
pass
@ -108,13 +96,13 @@ class Waiter(object):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.moveLeft(game.grid)
self.moveLeft()
if keys[pygame.K_RIGHT]:
self.moveRight(game.grid)
self.moveRight()
if keys[pygame.K_UP]:
self.moveUp(game.grid)
self.moveUp()
if keys[pygame.K_DOWN]:
self.moveDown(game.grid)
self.moveDown()
if keys[pygame.K_s]:
game.showGrid(game.grid)
@ -159,7 +147,7 @@ class Waiter(object):
stackMove.append("Up")
if self.isMoveInRange("Down", position):
collisionObjectDown = self.grid[positionY + 1][positionX]
if collisionObjectDown.type == "gridElement" or collisionObjectDown.type == "waiter":
if collisionObjectDown.type == "gridElement":
stackMove.append("Down")
if self.isMoveInRange("Left", position):
collisionObjectLeft = self.grid[positionY][positionX - 1]
@ -254,24 +242,28 @@ class Waiter(object):
if self.grid[positionY + 1][positionX].type == "table":
if self.grid[positionY + 1][positionX].id == idTable:
self.allPath.append(currentOperation)
print("Dodalem do all path sciezke jedna z miliona")
return 0
if self.isMoveInRange("Left", position):
if self.grid[positionY][positionX - 1].type == "table":
if self.grid[positionY][positionX - 1].id == idTable:
self.allPath.append(currentOperation)
print("Dodalem do all path sciezke jedna z miliona")
return 0
if self.isMoveInRange("Right", position):
if self.grid[positionY][positionX + 1].type == "table":
if self.grid[positionY][positionX + 1].id == idTable:
self.allPath.append(currentOperation)
print("Dodalem do all path sciezke jedna z miliona")
return 0
print("Sprawdzilem nie jest to stolik")
#print("Sprawdzilem nie jest to stolik")
steps = []
steps.append(self.checkPoss(position, currentOperation))
allstep = steps[-1]
print("Naszymi mozliwosciami sa ", allstep)
if len(allstep) != 1:
if not allstep:
return 0
elif len(allstep) != 1:
for i in allstep:
newCurrentOperation = currentOperation[:]
newCurrentOperation.append(i)
@ -309,3 +301,16 @@ class Waiter(object):
currentOperation.append("Down")
self.dfsFind(position, currentOperation, idTable)
def followThePath(self, path):
for direction in path:
if direction == "Left":
self.moveLeft()
if direction == "Right":
self.moveRight()
if direction == "Up":
self.moveUp()
if direction == "Down":
self.moveDown()
self.game.draw()
time.sleep(.500)