Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def move_one_step(maparr, population, max_y, max_x):
- for status in population:
- for idnum, person in population[status].items():
- if not person["quarantine"]:
- y, x = person['loc_y'], person['loc_x']
- y_speed, x_speed = person['y_speed'], person['x_speed']
- y_dest, x_dest, = person["y_dest"], person["x_dest"]
- new_y, new_x = _get_next_position(x, y, x_speed, y_speed)
- if new_x == x_dest:
- new_x_speed = 0
- elif abs(new_x - x_dest) >= abs(x - x_dest):
- new_x_speed = -1 * x_speed
- else:
- new_x_speed = x_speed
- if new_y == y_dest:
- new_y_speed = 0
- elif abs(new_y - y_dest) >= abs(y - y_dest):
- new_y_speed = -1 * y_speed
- else:
- new_y_speed = y_speed
- if new_x == x_dest and new_y == y_dest:
- # reached destination so now seeking new one
- new_y_dest, new_x_dest = get_new_destination(max_y, max_x)
- new_x_speed = 1 if x < new_x_dest else -1
- new_y_speed = 1 if y < new_y_dest else -1
- pu = {"x_speed": new_x_speed,
- "y_speed": 1 if y < new_y_dest else -1,
- "x_dest": new_x_dest, "y_dest": new_y_dest,
- }
- # person.update(pu)
- population[status][idnum].update(pu)
- # check if in map
- if _is_pos_in_map(new_x, new_y, max_x, max_y):
- # check if not taken already
- if maparr[new_y][new_x] is None:
- maparr[new_y][new_x] = person
- maparr[y][x] = None
- pu = {"loc_x": new_x, "loc_y": new_y,
- "x_speed": new_x_speed,
- "y_speed": new_y_speed,
- }
- population[status][idnum].update(pu)
- else:
- phase_x_speed = x_speed*2
- phase_y_speed = y_speed*2
- new_y, new_x = _get_next_position(x, y, phase_x_speed, phase_y_speed)
- for i in range(5):
- if not maparr[new_y][new_x] is None:
- phase_x_speed = x_speed*2
- phase_y_speed = y_speed*2
- new_y, new_x = _get_next_position(x, y, phase_x_speed, phase_y_speed)
- else:
- break
- if maparr[new_y][new_x] is None:
- maparr[new_y][new_x] = person
- maparr[y][x] = None
- pu = {"loc_x": new_x, "loc_y": new_y,
- "x_speed": new_x_speed,
- "y_speed": new_y_speed,
- }
- population[status][idnum].update(pu)
- return maparr, population
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement