def main(): points = [Point(x=230, y=450), Point(x=240, y=460), Point(x=230, y=470), Point(x=240, y=480)] polygon(point_list=points) points2 = [Point(p.x + 20, p.y + 20) for p in points] lines(point_list=points2, color=COLOR_DARK_ORANGE) line(start_point=Point(x=20, y=20), end_point=Point(x=40, y=300)) square(left_bottom=Point(400, 300, ), side=100) rectangle( left_bottom=Point(x=200, y=200), right_top=Point(x=300, y=300), color=COLOR_DARK_GREEN ) rectangle( left_bottom=Point(x=400, y=300), right_top=Point(x=300, y=400), color=COLOR_DARK_GREEN ) sleep(2) clear_screen() vector(start=Point(x=230, y=260), angle=70, length=200, color=COLOR_PURPLE) for i in range(10): point = random_point() color = random_color() radius = random_number(20, 60) circle(center_position=point, radius=radius, color=color, width=0) sleep(2) clear_screen() for i in range(10): point = random_point() color = random_color() dx = random_number(30, 100) dy = random_number(30, 100) right_top = Point(x=point.x + dx, y=point.y + dy) ellipse(left_bottom=point, right_top=right_top, color=color) v3 = Vector(start_point=Point(0, 0), direction=45, length=50) for direction in range(0, 181, 20): v = Vector(start_point=Point(x=300, y=300), direction=direction, length=100) v.draw() v2 = Vector(start_point=v.end_point, direction=direction + 30, length=50) v2.draw(color=COLOR_GREEN) v2.add(v3) v2.draw(color=COLOR_ORANGE) snowflake(center=Point(), length=60, factor_b=0.2, factor_c=100) sleep(2) for k in range(2): y = 500 for i in range(10): clear_screen() y -= 30 for x in [100, 200, 300, 400, 500]: radius = random_number(30, 50) point = Point(x=x, y=y) snowflake(center=point, length=radius) mouse_point, mouse_buttons = get_mouse_state() print("mouse_state is {} + {}".format(mouse_point, mouse_buttons)) if user_want_exit(sleep_time=0.1): break if user_want_exit(0): break
def house(): point_list_1 = [] point_list_1.append(sd.get_point(230, 380)) point_list_1.append(sd.get_point(475, 480)) point_list_1.append(sd.get_point(720, 380)) left_bot = sd.get_point(0, 0) right_top = sd.get_point(1200, 80) start_point = sd.get_point(250, 80) end_point = sd.get_point(700, 80) end_point_1 = sd.get_point(700, 380) sd.rectangle(left_bottom=left_bot, right_top=right_top, color=sd.COLOR_DARK_ORANGE, width=0) # Земля v1 = sd.vector(start=start_point, angle=90, length=300, color=sd.COLOR_YELLOW, width=2) v2 = sd.vector(start=end_point, angle=90, length=300, color=sd.COLOR_YELLOW, width=2) v3 = sd.vector(start=end_point_1, angle=180, length=450, color=sd.COLOR_YELLOW, width=2) v4 = sd.vector(start=start_point, angle=0, length=450, color=sd.COLOR_YELLOW, width=2) wall(x_start=300, x_end=650, y_start=80, y_end=380, color=sd.COLOR_YELLOW) sd.square(left_bottom=sd.get_point(400, 145), side=150, color=sd.background_color, width=0) sd.square(left_bottom=sd.get_point(400, 145), side=150, color=sd.COLOR_YELLOW, width=2) sd.polygon(point_list=point_list_1, color=sd.COLOR_RED, width=0)
def sun(): x = 130 y = 480 point = sd.get_point(x, y) sd.circle(center_position=point, radius=50, color=sd.COLOR_YELLOW, width=0) sunbeam = 0 for color in sunbeam_colors: while sunbeam < 361: sd.vector(start=point, angle=sunbeam, length=100, color=color, width=3) sd.circle(center_position=point, radius=50, color=sd.COLOR_YELLOW, width=0) sunbeam += 30 sd.circle(center_position=point, radius=50, color=sd.background_color, width=5) a = sunbeam_colors[0] sunbeam_colors.remove(a) sunbeam_colors.append(a)
def draw_random_branches_recursive(start_point, angle, length, width): if length < 3: return elif length < 10: v1 = sd.vector(start=start_point, angle=angle, length=length, width=width, color=sd.COLOR_GREEN) else: v1 = sd.vector(start=start_point, angle=angle, length=length, width=width, color=(158, 104, 54)) width -= 1 random_length = length * (0.75 + 0.75 * sd.random_number(-20, 20) / 100) random_angle = 30 + 30 * sd.random_number(-40, 40) / 100.0 draw_random_branches_recursive(v1, angle=angle - random_angle, length=random_length, width=width) random_length = length * (0.75 + 0.75 * sd.random_number(-20, 20) / 100) random_angle = 30 + 30 * sd.random_number(-40, 40) / 100.0 draw_random_branches_recursive(v1, angle=angle + random_angle, length=random_length, width=width)
def draw_a_shape(start_point, angle, length, number_of_sides, color): current_point = start_point max_angle = 360 + angle angle_step = 360 // number_of_sides for angle in range(angle, max_angle, angle_step): current_vector = sd.get_vector(current_point, angle, length, 3) sd.vector(current_point, angle, length, color=color, width=5) current_point = current_vector.end_point
def draw_branches_recursive(start_point, angle, length): if length < 5: return length *= 0.75 v1 = sd.vector(start=start_point, angle=angle - 30, length=length, width=1) v2 = sd.vector(start=start_point, angle=angle + 30, length=length, width=1) draw_branches_recursive(v1, angle=angle - 30, length=length) draw_branches_recursive(v2, angle=angle + 30, length=length)
def draw_sun(point_for_sun, angle_of_rotation): length = 100 sd.circle(center_position=point_for_sun, radius=105, color=sd.background_color, width=0) sd.circle(center_position=point_for_sun, radius=50, color=sd.COLOR_YELLOW, width=0) for angle in range(angle_of_rotation, 360 + angle_of_rotation, ANGLE_BETWEEN_RAYS): sd.vector(start=point_for_sun, angle=angle, length=length, color=sd.COLOR_YELLOW, width=3)
def draw_sun(_x, _y, _color=sd.COLOR_YELLOW, _step=30): # """Функция рисуюет смайл""" for i in range(0, 360, _step): sd.vector(start=sd.get_point(_x, _y), angle=i, length=80, color=_color) center_position = sd.Point(_x, _y) radius = 50 sd.circle(center_position=center_position, radius=radius, color=sd.COLOR_YELLOW, width=0)
def draw(self, color=sd.COLOR_WHITE): start_point = sd.get_point(self.x, self.y) for i in range(6): new_point = sd.vector(start=start_point, angle=i * 60, length=self.line_len * 0.55, color=color) for j in range(3): sd.vector(start=new_point, angle=(i * 60 - 35 + j * 35), length=self.line_len * 0.45, color=color)
def sun(): sd.circle(center_position=sd.get_point(200, 500), radius=40, color=sd.COLOR_YELLOW, width=0) x = 0 for _ in range(13): sd.vector(start=sd.get_point(200, 500), angle=x, length=100, width=2, color=sd.COLOR_YELLOW) x += 30
def sun(): position = sd.get_point(275, 700) radius = 50 sd.circle(center_position=position, radius=radius, color=sd.COLOR_YELLOW, width=0) for i in range(0, 360, 36): sd.vector(start=position, angle=i, length=radius + 35, color=sd.COLOR_YELLOW, width=3)
def draw_sun(x, y, length): global angle radius = length // 2 sd.start_drawing() sd.vector(sd.get_point(x, y), angle=angle, length=length, color=sd.background_color, width=3) angle += 30 sd.vector(sd.get_point(x, y), angle=angle, length=length, color=(255, 255, 0), width=3) sd.vector(sd.get_point(x, y), angle=angle + 30, length=length, color=(255, 255, 0), width=3) sd.vector(sd.get_point(x, y), angle=angle + 60, length=length, color=(255, 255, 0), width=3) sd.finish_drawing() sd.circle(sd.get_point(x, y), radius=radius, width=0) sd.sleep(0.01)
def second_screen(): sd.start_drawing() sd.vector(start=sd.Point(x=230, y=260), angle=70, length=200, color=sd.COLOR_PURPLE, width=2) for i in range(10): point = sd.random_point() color = sd.random_color() radius = sd.random_number(20, 60) sd.circle(center_position=point, radius=radius, color=color, width=0) sd.finish_drawing() if TAKE_SNAPSHOTS: sd.take_snapshot(file_name='second_screen.png', path=SNAPSHOTS_PATH)
def hexagon(point, color, angle=30, length=100): v1 = sd.vector(start=point, angle=angle, length=length, color=color, width=3) return v1
def common_part(start_point, angle, length, color, kol_povt): for _ in range(kol_povt): start_point = sd.vector(start=start_point, angle=angle, length=length, color=color) angle += 360 / kol_povt
def draw_branches(start_point, angle, length): if length < 10: return plus_point = sd.vector(start_point, angle + 30, length, width=2) minus_point = sd.vector(start_point, angle - 30, length, width=2) next_plus_point = sd.get_point(plus_point.x, plus_point.y) next_minus_point = sd.get_point(minus_point.x, minus_point.y) next_length = length * (0.75 + (sd.random_number(-15, 15) / 100)) next_plus_angle = angle + 30 + sd.random_number(-12, 12) next_minus_angle = angle - 30 - sd.random_number(-12, 12) draw_branches(next_plus_point, next_plus_angle, next_length) draw_branches(next_minus_point, next_minus_angle, next_length)
def count_angle(start_point, zero_angle, side_length, sides_count, color_id): end_point = start_point angle_shift = int(360 / sides_count) for angle in range(0, 360 - angle_shift, angle_shift): start_point = sd.vector(start_point, angle + zero_angle, side_length, colors[color_id]) sd.line(start_point, end_point, colors[color_id])
def draw_house(start_of_wall, end_of_wall, height_of_wall, height_brick=50): wall.paint_wall(start_of_wall=start_of_wall, end_of_wall=end_of_wall, height_of_wall=height_of_wall, height_brick=height_brick) point_for_wall = sd.get_point(start_of_wall, 0) sd.vector(start=point_for_wall, angle=90, length=height_of_wall) point_for_wall = sd.get_point(end_of_wall+height_brick, 0) sd.vector(start=point_for_wall, angle=90, length=height_of_wall) point_for_window_left_bottom = sd.get_point((end_of_wall-start_of_wall)/2+start_of_wall-150, 100) point_for_window_right_top = sd.get_point((end_of_wall-start_of_wall)/2+start_of_wall+50, height_of_wall-50) sd.rectangle(point_for_window_left_bottom, point_for_window_right_top, width=0, color=sd.COLOR_BLUE) list_for_roof = [sd.get_point(start_of_wall-50, height_of_wall), sd.get_point(end_of_wall+100, height_of_wall), sd.get_point((end_of_wall-start_of_wall)/2+start_of_wall, height_of_wall+100)] sd.polygon(point_list=list_for_roof, color=sd.COLOR_BLUE, width=0)
def draw_tree(x=650, trunk_length=150, init_branch_length=100, color=simple_draw.COLOR_BLUE): """Рекурсивно риует дерево: ствол и рандомизованные ветви Parameters ---------- x: int, default=0 Горизонтальная координата, из которой будет расти дерево. вертикальная не нужна, ибо она очевидно равна нулю. trunk_length: int, default=100 Длина ствола init_branch_length: int, default=100 Начальная длина веток color: tuple(int, int, int), default=(0, 0, 255) Цвет ствола и начальный цвет веток. Это кортеж (red, green, blue), где для каждый из трёх элементов цвета принимает значения от 0 до 255 включительно """ pass root_point = simple_draw.get_point(x, 0) init_branches_point = simple_draw.vector(start=root_point, angle=90, width=2, length=trunk_length, color=color) _draw_branches(start_point=init_branches_point, angle=90, length=init_branch_length, color=color)
def draw_sun(center_x=0, center_y=0, angle=0, ray_length=100, core_radius=50, ray_gap=10, ray_count=8, ray_width=3): """Рисует солнце в соответствии с параметрами Parameters ---------- center_x, center_y: int, default=0, 0 Координаты центра солнца angle: int, default=0 Угол поворота лучей солнца ray_length: int, default=100 Длина лучей core_radius: int, default=50 Радиус внутренней части ray_gap: int, default=10 Расстояние между ядром и лучами ray_count: int, default=8 Количество лучей ray_width: int, default=3 Толщина лучей """ origin = simple_draw.get_point(center_x, center_y) angle_step = round(360 / ray_count) for next_angle in range(angle, 360 + angle, angle_step): ray_start_point = simple_draw.get_vector(origin, next_angle, length=core_radius + ray_gap).end_point simple_draw.vector(start=ray_start_point, angle=next_angle, length=ray_length, width=ray_width) simple_draw.circle(origin, core_radius, width=0)
def closed_figure(start_point, angle=0, step=90, length=100, color=(255, 255, 255)): point = sd.vector(start=start_point, angle=angle, length=length, color=color, width=1) for next_angle in range(step, 359, step): point = sd.vector(start=point, angle=angle + next_angle, length=length, color=color, width=1) sd.line(start_point=point, end_point=start_point, color=color, width=1)
def draw_a_shape(start_point, angle, length, number_of_sides): current_point = start_point max_angle = 360 + angle angle_step = 360 // number_of_sides for angle in range(angle, max_angle, angle_step): # I've removed two extra lines and all still work correctly! It's magic! # current_vector = sd.get_vector(current_point, angle, length, 3) current_point = sd.vector(current_point, angle, length)
def sun_core(self): sd.start_drawing() if self.ANGLES is None: self.ANGLES = [angle for angle in range(0, 361, 10)] for num_ray, angle in enumerate(self.ANGLES): sd.vector(self.point_centre, angle=self.ANGLES[num_ray], length=90, color=sd.background_color, width=3) angle += 3 self.ANGLES[num_ray] = angle sd.vector(self.point_centre, angle=angle, length=90, width=3) self.body_sun() sd.finish_drawing()
def draw_animate_sun(x_center=100, y_center=100, radius=50, ray_len=80, ray_width=8, shift_angle=5): sd.circle(sd.get_point(x_center, y_center), radius=ray_len + 5, width=0, color=sd.background_color) sd.circle(sd.get_point(x_center, y_center), radius=radius, width=0) # Крутим лучиками for angle in range(shift_angle, shift_angle + 361, 60): # angle += animate_factor sd.vector(start=sd.get_point(x_center, y_center), angle=angle, width=ray_width, length=ray_len)
def build_roof( start_point=sd.get_point(100, 100), length=50, color=sd.COLOR_YELLOW): for roof_length in range(length): vector_start_point = start_point for figure_angle in range(0, 240, 120): rib = sd.vector(start=vector_start_point, angle=figure_angle, length=roof_length, color=color, width=2) vector_start_point = rib sd.line(start_point, vector_start_point, color=color)
def draw_branches(start_point, start_angle, branch_length): if branch_length < 10: return start_point = sd.vector(start_point, start_angle, branch_length) delta = 30 branch_length *= .75 shift_angle = start_angle + delta draw_branches(start_point, shift_angle, branch_length) shift_angle = start_angle - delta draw_branches(start_point, shift_angle, branch_length)
def draw_line(sides, start, stop, angle, length, width, colored): decode_color = figure_color[colored] zero_point = sd.get_point(start, stop) amount_sides_angle = int(360 / sides) for i in range(0, 360, amount_sides_angle): draw_lines = sd.vector(zero_point, angle, length, decode_color, width) zero_point = sd.get_point(draw_lines.x, draw_lines.y) angle += amount_sides_angle
def draw_random_branches(start_point, start_angle, branch_length): if branch_length < 8: return start_point = sd.vector(start_point, start_angle, branch_length) delta = int(30 + rand_delta(30, percent=40)) branch_length *= (.75 + rand_delta(0.75, percent=20, is_positive=True)) print(rand_delta(30, percent=40), rand_delta(0.75, percent=20)) shift_angle = start_angle + delta draw_random_branches(start_point, shift_angle, branch_length) shift_angle = start_angle - delta draw_random_branches(start_point, shift_angle, branch_length)
def sun_draw(point, angle_list): sd.start_drawing() def plus(number): return number + 5 for index, angle in enumerate(angle_list): sd.vector(start=point, angle=angle, length=130, color=sd.background_color, width=3) angles = list(map(plus, angle_list)) for index, angle in enumerate(angles): sd.vector(start=point, angle=angle, length=130, color=sd.COLOR_YELLOW, width=3) sd.circle(center_position=point, radius=70, color=sd.COLOR_YELLOW, width=0) sd.finish_drawing() return angles
def figure(face, point, angle=0, length=300, color=sd.COLOR_YELLOW): if face < 3: print('Количество граней должно более 2') return None # if face > 20: # print('Количество граней не должно быть более 20') # return None start_point = point current_angle = angle current_length = (length * 5) / face for n in range(face-1): start_point = sd.vector(start=start_point, angle=current_angle, length=current_length, width=2, color=color) current_angle = current_angle + 360/face sd.line(start_point=start_point, end_point=point, width=2, color=color)
def wall(color, width): raw_step = 50 col_step = 100 for num_r, raw in enumerate(range(100, 701, raw_step)): sd.vector(start=sd.get_point(0, 700 - raw), angle=0, length=600, color=color, width=5) for num, col in enumerate(range(0, 701, col_step)): start = 0 if num_r % 2: start = -(col_step / 2) # col_step ширина кирпича x = col_step + col y = raw - col_step sd.vector(start=sd.get_point(start + x, y), angle=90, length=50, color=color, width=width)