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