-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSB_Driver.py
69 lines (57 loc) · 1.85 KB
/
SB_Driver.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import os
from SB_Agent import Agent
from SB_environment import Sokoban
# char == ' ' or # floor
# char == '#' or # wall
# char == '@' or # worker on floor
# char == '.' or # goal
# char == '*' or # box on goal
# char == '$' or # box
# char == '+' ): # worker on goal
if __name__=="__main__":
board=[
[' ',' ','#','#','#','#','#',' '],
['#','#','#',' ',' ',' ','#',' '],
['#','.','@','$',' ',' ','#',' '],
['#','#','#',' ','$','.','#',' '],
['#','.','#','#','$',' ','#',' '],
['#',' ','#',' ','.',' ','#','#'],
['#','$',' ','*','$','$','.','#'],
['#',' ',' ',' ','.',' ',' ','#'],
['#','#','#','#','#','#','#','#']]
workerPosX=None
workerPosY=None
boxPos =[]
goalPos= []
for x in range(len(board)):
for y in range(len(board[x])):
if board[x][y] == '@':
workerPosX=x
workerPosY=y
board[x][y]=' '
if board[x][y] == '$':
boxPos.append((x,y))
board[x][y]=' '
if board[x][y] =='.':
goalPos.append((x,y))
board[x][y]=' '
if board[x][y] == '+':
workerPosX=x
workerPosY=y
goalPos.append((x,y))
board[x][y]=' '
if board[x][y] == '*':
boxPos.append((x,y))
goalPos.append((x,y))
board[x][y]=' '
workerPos=(workerPosX,workerPosY)
SBobj=Sokoban(board,boxPos,goalPos,workerPos)
agnt=Agent(SBobj)
result,counter=agnt.DFS()
try:
os.remove("path.txt")
except:
pass
agnt.printPath(result,"path.txt")
print("Nodes explored: ",counter)
print("Path length: ",result.level)