def get_state(cls, value): if value == cls.DIFFICULT: return DIFFICULT.LOCALISED_SPEED.get( DIFFICULT.get_speed(cls.get_speed())[0]) return Color("ВКЛЮЧЕНО", Color.GREEN) if cls.DATA.get(value) else Color( "ВЫКЛЮЧЕНО", Color.RED)
def count_pixels(self): for i in range(self.sz): print(i / self.sz * 100, '%') self.height.append([]) for j in range(self.sz): h = self.landscape[i, j] self.height[-1].append(h) global color if h < self.water_level: # Water color = Color(0, 0, h / 2 * 1000 / self.range) elif h < self.snow_level: color = Color(h * 100 / self.range, h / 4 * 1000 / self.range, h / 30 * 1000 / self.range) else: c = 1000 color = Color(c, c, c) if self.make_clouds: color *= 0.2 else: color *= 0.4 # Clouds if self.make_clouds: h = (self.clouds[i, j] / self.range) ** 3 * self.range color = (color + Color(h / 4 * 1000 / self.range, h / 4 * 1000 / self.range, h / 4 * 1000 / self.range) * 0.8) self.pixels[i, j] = int(color.r), int(color.g), int(color.b) arr = [int(filename.split('_')[0]) for filename in filter(lambda name: '_' in name, os.listdir('map_results'))] n = 1 if arr: n += max(arr) self.im.save(f'map_results/{n}_map.png')
def count_color(self, i, j): color = Color(0, 0, 0) for layer in self.layers: color += layer.pixels(i, j) return color
def edit_page(cls, size: SIZE_TYPE, val, title): if val == cls.DIFFICULT: p = cls.PAGES[1] % (cls.get_state(cls.DIFFICULT), '\n'.join( " %s) %s" % i for i in enumerate(DIFFICULT.LOCALISED_SPEED.values(), 1)), len(DIFFICULT.LOCALISED_SPEED) + 1) elif val in cls.LOCALIZED_FUNCS: p = cls.PAGES[0] % (cls.LOCALIZED_FUNCS[val], cls.get_state(val)) else: return clear() print('\r%s' % Color(center_text(size, title), 30, 47), end='', flush=True) slow_print(p, 0) i = input() while True: if i.isnumeric(): i = int(i) if i == 0: return "back" if val == cls.DIFFICULT and i in range(1, 6): cls.set_difficult( list(DIFFICULT.LOCALISED_SPEED.keys())[i - 1]) elif i in range(1, 3): cls.set_any_bool(val, bool(i - 2)) else: i = input( "Вы ввели данные некорректно! Попробуйте снова: ") continue print("Изменения сохранены!", end='', flush=True) time.sleep(1.5) return i = input("Вы ввели данные некорректно! Попробуйте снова: ")
class DIFFICULT: SUPER_HARD = 5 HARD = 4 NORMAL = 3 EASY = 2 SUPER_EASY = 1 STR_SUPER_HARD = "super-hard" STR_HARD = "hard" STR_NORMAL = "normal" STR_EASY = "easy" STR_SUPER_EASY = "super-easy" LOCALISED_SPEED = { STR_SUPER_HARD: Color("ОЧЕНЬ СЛОЖНО", Color.RED), STR_HARD: Color("Сложно", Color.RED), STR_NORMAL: Color("Нормально", Color.YELLOW), STR_EASY: Color("Просто", Color.GREEN), STR_SUPER_EASY: Color("ОЧЕНЬ ПРОСТО", Color.GREEN), } SPEED = { STR_SUPER_HARD: 0.025, SUPER_HARD: 0.025, 0.025: (STR_SUPER_HARD, SUPER_HARD), STR_HARD: 0.05, HARD: 0.05, 0.05: (STR_HARD, HARD), STR_NORMAL: 0.1, NORMAL: 0.1, 0.1: (STR_NORMAL, NORMAL), STR_EASY: 0.2, EASY: 0.2, 0.2: (STR_EASY, EASY), STR_SUPER_EASY: 0.4, SUPER_EASY: 0.4, 0.4: (STR_SUPER_EASY, SUPER_EASY), } @classmethod def get_speed(cls, diff): return cls.SPEED.get(diff.lower() if type(diff) is str else diff)
def count_color(self, i, j): c = self[i, j] / self.start_range * 255 return Color(c, c, c)
if isinstance(color, Color): color = color.tuple() pygame.draw.rect(self.win, color, [i, j, 1, 1]) pygame.display.update() def __getitem__(self, item): return sum([layer[item] for layer in self.layers]) class ColorLayerGroup(LayerGroup): def __init__(self, *args, win=None, layer_class=ColorLayer): super().__init__(*args, win=win, layer_class=ColorLayer) def count_color(self, i, j): color = Color(0, 0, 0) for layer in self.layers: color += layer.pixels(i, j) return color if __name__ == '__main__': pygame.init() win = pygame.display.set_mode((1024, 1024)) layer_group = ColorLayerGroup(33, 512, Color(1, 256, 256), win=win) layer_group.show() input()
def new_random_item(self): return Color(color_range=self.range)
def color(self, i, j): color = self.pixels(i, j) / self.range * 255 return Color(color, color, color)
def center_text(size: SIZE_TYPE, text: str, add_right=True): y, x = size de_colored_text = Color.de_color(text) space_l = " " * (x // 2 - len(de_colored_text) // 2) space_r = " " * (x - len(space_l) - len(de_colored_text)) return space_l + text + (space_r if add_right else '')