def _fill_maze(self): for x in range(0, self.XSize): for y in range(0, self.YSize): ordinal_values = self.Map.get_ordinal_values(x,y,0) if ordinal_values.get(self.Ground, 0) > 0 and self.Map.get_value(x, y, 0) == -1: self.Map.set_value(x, y, 1, 1) maze_regions = [] for x in range(0, self.XSize): for y in range(0, self.YSize): if self.Map.get_value(x, y, 0) == -1 and self.Map.get_value(x, y, 1) == -1: is_in_region = False for region in maze_regions: if region.contains((x, y)): is_in_region = True if not is_in_region: r = self.Map.build_cardinal_region_on_point(x, y, 1, [-1]) maze_regions.append(r) self.Map.clear_layer(1) for region in maze_regions: region_points = copy.deepcopy(region.Points) while len(region_points) > 0: eligible_points = [] start_point = Common.pop_random(region_points) if self.Map.get_cardinal_values(start_point[0], start_point[1], 1).get(self.Ground, 0) <= 1 and 0 < \ start_point[0] > self.XSize - 1 and 0 < start_point[1] > self.YSize - 1: self.Map.set_value(start_point[0], start_point[1], 1, self.Ground) eligible_points += region.get_cardinal_points(start_point) while len(eligible_points) > 0: candidate = Common.pop_random(eligible_points) if self.Map.get_cardinal_values(candidate[0], candidate[1], 1).get(self.Ground, 0) == 1: if 0 < candidate[0] > self.XSize-1 and 0 < candidate[1] > self.YSize-1: self.Map.set_value(candidate[0], candidate[1], 1, self.Ground) cards_in_region = region.get_cardinal_points(candidate) for cardPoint in cards_in_region: if self.Map.get_value(cardPoint[0], cardPoint[1], 1) == -1 and \ self.Map.get_cardinal_values(cardPoint[0], cardPoint[1], 1).get(self.Ground, 0) == 1: eligible_points.append(cardPoint) if candidate in region_points: region_points.remove(candidate)