-
Notifications
You must be signed in to change notification settings - Fork 0
/
Grid.py
74 lines (60 loc) · 2.38 KB
/
Grid.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
68
69
70
71
72
73
74
import numpy as np
from Node import Node
import logging
class Grid:
def __init__(self,time, row, col, blocks):
self.time = time
self.rows = row
self.cols = col
self.grid = [[[Node( t,y ,x ) for x in range(self.cols)] for y in range(self.rows)] for t in range(self.time)]
self.movement_col = (1,-1,0,0)
self.movement_row = (0,0,1,-1)
self.movement_time = (1,1,1,1)
self.blocks = blocks
self.openSet = [[False for x in range(self.cols)] for y in range(self.rows)]
self.closeSet = [[False for x in range(self.cols)] for y in range(self.rows)]
def reNew(self):
self.openSet = [[False for x in range(self.cols)] for y in range(self.rows)]
self.closeSet = [[False for x in range(self.cols)] for y in range(self.rows)]
def isClosed(self, node):
return self.closeSet[node.y][node.x]
def setClosed(self, node, state):
self.closeSet[node.y][node.x] = state
def isOpened(self, node):
return self.openSet[node.y][node.x]
def setOpened(self, node, state):
self.openSet[node.y][node.x] = state
def generateBlock(self):
for item in self.blocks:
# print(item[0], item[1])
for i in range(self.time):
self.grid[i][item[0]][item[1]].walkable = False
def getDistance(self,node_1,node_2):
return abs(node_1.x- node_2.x) + abs(node_1.y- node_2.y)
def isInside(self, x, y):
return x >= 0 and x < self.cols and y >= 0 and y < self.rows
def isWalkableAt(self, x, y,t):
# if t > len(self.grid)-1:
# print("route fails, time is not enough")
# return -2
return self.isInside(x,y) and (self.grid[t][y][x].walkable)
def getNeighbors(self,node):
neighbors = []
for i in range(4):
newX = node.x + self.movement_col[i]
newY = node.y + self.movement_row[i]
newT = node.t + self.movement_time[i]
if self.isWalkableAt(newX,newY,newT):
neighbors.append(self.grid[newT][newY][newX])
return neighbors
if __name__ == '__main__':
rows = 32
cols =20
time = 30
a =[[5,5],[5,3]]
grid = Grid(time = time, row = rows, col = cols, blocks = a)
testNode = grid.grid[29][31][19]
grid.grid[0][0][0].x = 1
grid.generateBlock()
print(len(grid.grid))
print(testNode.x)