def spring_DLT(x, y, base, d=15): t_val = Terrain.GetTerrainVal(pix[x, y]) e_val = float(elevations[y][x]) diff = e_val - base if (diff > 1): return if (d == 0): return pix[x, y] = (113, 237, 255, 255) for tup in pixel_neighbors((x, y)): i, j = tup t_val = Terrain.GetTerrainVal(pix[i, j]) if (t_val != Terrain.Water() and t_val != Terrain.Ice()): spring_DLT(i, j, base, d - 1)
def MakeSuccessor(x, y, gX, gY): if (x < 0 or x >= MAX_X() or y < 0 or y >= MAX_Y()): return None ele = elevations[x][y] ter = Terrain.GetTerrainVal(pix[x, y]) if ter == Terrain.OutOfBounds(): return None s = State.State(ele, ter, x, y, gX, gY) return s
def winter_DLT(x, y, d=7): t_val = Terrain.GetTerrainVal(pix[x, y]) if (t_val != Terrain.Water()): return if (d == 0): return pix[x, y] = (113, 237, 255, 255) for tup in pixel_neighbors((x, y)): i, j = tup winter_DLT(i, j, d - 1)
def do_fall(): print("do fall was called") newColor = (128, 128, 128, 255) oldColor = (255, 255, 255, 255) print(Terrain.GetTerrainVal((255, 255, 255, 255))) s = time.time() for x in range(MAX_X()): for y in range(MAX_Y()): if (pix[x, y] == oldColor): for tup in pixel_neighbors((x, y)): i, j = tup t_val = Terrain.GetTerrainVal(pix[i, j]) if pix[i, j] != pix[x, y] and t_val != Terrain.Water( ) and t_val != Terrain.ImpassibleVeg( ) and t_val != Terrain.RoughMeadow(): pix[i, j] = newColor pix[x, y] = newColor e = time.time() print(e - s)
def make_neighbor(x, y): # validates out of bound indices if (x < 0 or x >= MAX_X() or y < 0 or y >= MAX_Y()): return None ter = Terrain.GetTerrainVal(pix[x, y]) # filters out of bound neighbors if ter == Terrain.OutOfBounds(): return None # must be a valid neighbor at this point return (x, y)
def main(): global pix global elevations img = Image.open('elevations_pixels.PNG') pix = img.load() with open('elevations.txt') as f: elevations = [line.split() for line in f] img.show() #do_fall() #do_winter() #do_spring() #img.show() #return print("done") print(len(elevations)) points = [] if (len(sys.argv) > 2): print("argument was passed!") with open(sys.argv[1]) as f: points = [tuple([int(i) for i in line.split()]) for line in f] season = int(sys.argv[2]) change_season(season) paths = [] stime = time.time() for i in range(len(points) - 1): start = points[i] end = points[i + 1] init = State.State(elevations[start[0]][start[1]], Terrain.GetTerrainVal(pix[start[0], start[1]]), start[0], start[1], end[0], end[1]) paths.append(A_star(init)) etime = time.time() counter = 1 for path in paths: path.reverse() hr_output(path, counter) counter += 1 for s in path: pix[s.x, s.y] = (255, 0, 0, 255) print(etime - stime) img.show() img.close() #print(points) # no file parameter passed, defaults to using points for brown path else: print("Usage: python3 orienteering.py file [season mode bit]") print("\tSEASON MODE BITS") print("\t0 -> summmer") print("\t1 -> fall") print("\t2 -> winter") print("\t3 -> spring") points = [(230, 327), (276, 279), (303, 240), (306, 286), (290, 310), (304, 331), (306, 341), (253, 372), (246, 355), (288, 338), (282, 321), (243, 327), (230, 327)]
def main(): global pix global elevations print('hello') img = Image.open('elevations_pixels.PNG') pix = img.load() print(pix) print(pix[0, 0]) print(pix[228, 308]) print(pix[230, 327]) #pix[168,236] = (255,0,0,255) #pix[178,222] = (255,0,0,255) #pix[0,0] = (0,0,0,255) #img.show() x = img.size[0] y = img.size[1] print(x) print(y) with open('elevations.txt') as f: elevations = [line.split() for line in f] print("done") print(len(elevations)) if (len(sys.argv) > 1): print("argument was passed!") return points = [(230, 327), (276, 279), (303, 240), (306, 286), (290, 310), (304, 331), (306, 341), (253, 372), (246, 355), (288, 338), (282, 321), (243, 327), (230, 327)] paths = [] """ #init = State.State(elevations[168][236], Terrain.GetTerrainVal(pix[168,236]), 168, 236, 178, 222) init = State.State(elevations[230][327], Terrain.GetTerrainVal(pix[230,327]), 230, 327, 276, 279) start = time.time() paths.append(A_star(init)) end = time.time() print(end-start) """ stime = time.time() for i in range(len(points) - 1): start = points[i] end = points[i + 1] init = State.State(elevations[start[0]][start[1]], Terrain.GetTerrainVal(pix[start[0], start[1]]), start[0], start[1], end[0], end[1]) paths.append(A_star(init)) etime = time.time() for path in paths: for s in path: pix[s.x, s.y] = (255, 0, 0, 255) print(etime - stime) img.show() img.close()
def GetSuccessors(state): succ = [] # successors above succ.append( State.State(elevations[state.x + 1][state.y - 1], Terrain.GetTerrainVal(pix[state.x + 1, state.y - 1]), state.x + 1, state.y - 1, state.goalX, state.goalY)) succ.append( State.State(elevations[state.x + 1][state.y], Terrain.GetTerrainVal(pix[state.x + 1, state.y]), state.x + 1, state.y, state.goalX, state.goalY)) succ.append( State.State(elevations[state.x + 1][state.y + 1], Terrain.GetTerrainVal(pix[state.x + 1, state.y + 1]), state.x + 1, state.y + 1, state.goalX, state.goalY)) succ.append( State.State(elevations[state.x][state.y - 1], Terrain.GetTerrainVal(pix[state.x, state.y - 1]), state.x, state.y - 1, state.goalX, state.goalY)) succ.append( State.State(elevations[state.x][state.y + 1], Terrain.GetTerrainVal(pix[state.x, state.y + 1]), state.x, state.y + 1, state.goalX, state.goalY)) succ.append( State.State(elevations[state.x - 1][state.y - 1], Terrain.GetTerrainVal(pix[state.x - 1, state.y - 1]), state.x - 1, state.y - 1, state.goalX, state.goalY)) succ.append( State.State(elevations[state.x - 1][state.y], Terrain.GetTerrainVal(pix[state.x + 1, state.y]), state.x + 1, state.y, state.goalX, state.goalY)) succ.append( State.State(elevations[state.x - 1][state.y + 1], Terrain.GetTerrainVal(pix[state.x - 1, state.y + 1]), state.x - 1, state.y + 1, state.goalX, state.goalY)) return succ