Поздравляем кого-то с днем рождения, используя питон

24 июня 2018 г.

Иногда у кого-нибудь день рождения, и ты хочешь ее/его поздравить, но не знаешь как. Но ты знаешь, что хочешь сделать что-то своими руками. Можно, конечно чего-нибудь придумать с ардуино, но часто просто лень. Может быть, можно сделать какую-нибудь простую анимацию? Да, и в стандартной библиотеке есть модуль turtle.

Исходная идея не моя, взял тут. Торт хороший, мне очень нравится, но, разумеется, надо добавить что-то свое, попробую нарисовать солнышко:

 1# -*- coding: utf-8 -*-
 2import turtle
 3import time
 4
 5# set the background color for the page
 6bg = turtle.Screen()
 7bg.bgcolor("light blue")
 8
 9
10my_turtle = turtle.Turtle()
11my_turtle.shape("turtle")
12my_turtle.speed(1)
13
14# draw sun
15my_turtle.color("yellow")
16my_turtle.pensize(3)
17my_turtle.penup()
18my_turtle.setposition(150, 150)
19my_turtle.begin_fill()
20my_turtle.pendown()
21my_turtle.circle(50)
22my_turtle.end_fill()
23
24# draw rays
25my_turtle.penup()
26my_turtle.goto(150, 140)
27my_turtle.pendown()
28my_turtle.goto(150, 130)
29
30my_turtle.penup()
31my_turtle.goto(150, 260)
32my_turtle.pendown()
33my_turtle.goto(150, 270)
34
35my_turtle.penup()
36my_turtle.goto(210, 200)
37my_turtle.pendown()
38my_turtle.goto(220, 200)
39
40my_turtle.penup()
41my_turtle.goto(90, 200)
42my_turtle.pendown()
43my_turtle.goto(80, 200)
44
45# I quad
46my_turtle.penup()
47my_turtle.goto(185+7, 165-7)
48my_turtle.pendown()
49my_turtle.goto(185+14, 165-14)
50
51# II quad
52my_turtle.penup()
53my_turtle.goto(185+7, 235+7)
54my_turtle.pendown()
55my_turtle.goto(185+14, 235+14)
56
57# III quad
58my_turtle.penup()
59my_turtle.goto(115-7, 235+7)
60my_turtle.pendown()
61my_turtle.goto(115-14, 235+14)
62
63# IV quad
64my_turtle.penup()
65my_turtle.goto(115-7, 165-7)
66my_turtle.pendown()
67my_turtle.goto(115-14, 165-14)

На строке 12 задается скорость отрисовки, можете поиграть с этим параметром. Стр. 15-22 - отрисовка самого тела солнца. Потом стр. 25-43 я рисую сначала перпендикулярные лучи, а потом строки 46-67 - четыре диагональные луча. Ну а потом, просто добавлю отрисовку торта, в итоге получилось:

  1# -*- coding: utf-8 -*-
  2import turtle
  3import time
  4
  5# set the background color for the page
  6bg = turtle.Screen()
  7bg.bgcolor("light blue")
  8
  9
 10my_turtle = turtle.Turtle()
 11my_turtle.shape("turtle")
 12my_turtle.speed(1)
 13
 14# draw sun
 15my_turtle.color("yellow")
 16my_turtle.pensize(3)
 17my_turtle.penup()
 18my_turtle.setposition(150, 150)
 19my_turtle.begin_fill()
 20my_turtle.pendown()
 21my_turtle.circle(50)
 22my_turtle.end_fill()
 23
 24# draw rays
 25my_turtle.penup()
 26my_turtle.goto(150, 140)
 27my_turtle.pendown()
 28my_turtle.goto(150, 130)
 29
 30my_turtle.penup()
 31my_turtle.goto(150, 260)
 32my_turtle.pendown()
 33my_turtle.goto(150, 270)
 34
 35my_turtle.penup()
 36my_turtle.goto(210, 200)
 37my_turtle.pendown()
 38my_turtle.goto(220, 200)
 39
 40my_turtle.penup()
 41my_turtle.goto(90, 200)
 42my_turtle.pendown()
 43my_turtle.goto(80, 200)
 44
 45# I quad
 46my_turtle.penup()
 47my_turtle.goto(185+7, 165-7)
 48my_turtle.pendown()
 49my_turtle.goto(185+14, 165-14)
 50
 51# II quad
 52my_turtle.penup()
 53my_turtle.goto(185+7, 235+7)
 54my_turtle.pendown()
 55my_turtle.goto(185+14, 235+14)
 56
 57# III quad
 58my_turtle.penup()
 59my_turtle.goto(115-7, 235+7)
 60my_turtle.pendown()
 61my_turtle.goto(115-14, 235+14)
 62
 63# IV quad
 64my_turtle.penup()
 65my_turtle.goto(115-7, 165-7)
 66my_turtle.pendown()
 67my_turtle.goto(115-14, 165-14)
 68
 69shift = 90
 70# draw lines
 71my_turtle.penup()
 72my_turtle.goto(-190, -180-shift)
 73my_turtle.color("yellow")
 74my_turtle.pensize(6)
 75my_turtle.pendown()
 76my_turtle.goto(190, -180-shift)
 77
 78my_turtle.penup()
 79my_turtle.goto(-160, -150-shift)
 80my_turtle.color("purple")
 81my_turtle.pensize(6)
 82my_turtle.pendown()
 83my_turtle.goto(160, -150-shift)
 84
 85my_turtle.penup()
 86my_turtle.goto(-130, -120-shift)
 87my_turtle.color("teal")
 88my_turtle.pensize(6)
 89my_turtle.pendown()
 90my_turtle.goto(130, -120-shift)
 91
 92# draw cake
 93my_turtle.penup()
 94my_turtle.goto(-74, -110-shift)
 95my_turtle.pendown()
 96my_turtle.color("white")
 97my_turtle.goto(50, -110-shift)
 98my_turtle.left(90)
 99my_turtle.forward(60)
100my_turtle.left(90)
101my_turtle.forward(125)
102my_turtle.left(90)
103my_turtle.forward(60)
104
105# draw candles
106my_turtle.penup()
107my_turtle.goto(-60, -40-shift)
108my_turtle.color("aquamarine")
109my_turtle.pendown()
110my_turtle.pensize(3)
111my_turtle.goto(-60, -20-shift)
112
113my_turtle.penup()
114my_turtle.goto(-40, -40-shift)
115my_turtle.color("yellow")
116my_turtle.pendown()
117my_turtle.pensize(3)
118my_turtle.goto(-40, -20-shift)
119
120my_turtle.penup()
121my_turtle.goto(-20, -40-shift)
122my_turtle.color("green")
123my_turtle.pendown()
124my_turtle.pensize(3)
125my_turtle.goto(-20, -20-shift)
126
127my_turtle.penup()
128my_turtle.goto(0, -40-shift)
129my_turtle.color("pink")
130my_turtle.pendown()
131my_turtle.pensize(3)
132my_turtle.goto(0, -20-shift)
133
134my_turtle.penup()
135my_turtle.goto(20, -40-shift)
136my_turtle.color("blue")
137my_turtle.pendown()
138my_turtle.pensize(3)
139my_turtle.goto(20, -20-shift)
140
141
142# print message
143my_turtle.penup()
144my_turtle.goto(-300, 70-shift)
145my_turtle.color("grey")
146my_turtle.pendown()
147my_turtle.write(
148    "С днём рождения, %username%!", move=False,
149    font=("Helvetica", 24, "bold"))
150
151
152# send the turtle to the corner
153my_turtle.penup()
154my_turtle.goto(-250, 250)
155time.sleep(10)

Вроде ок, но чего-то не хватает, можно попробовать каким-то образом добавить проигрывание трека happy birthday, может переделать это все на pygame. Но я сделал проще: записал видео с экрана и потом на него добавил трек. Если хотите, то вы можете использовать pyinstaller, чтобы сделать из этого скриптика exe.

Метки

Оставить комментарий

Нужен для связи
captcha

Комментарий отправлен

Спасибо! Он появится на странице после проверки.