1. 程式人生 > >Python少兒創意程式設計_新年快樂音樂賀卡.py 作者:李興球

Python少兒創意程式設計_新年快樂音樂賀卡.py 作者:李興球

"""Python少兒創意程式設計_新年快樂音樂賀卡.py    風火輪少兒程式設計就是原來的星空培訓(萍鄉星空少兒程式設計).    本程式使用python3.7,需要準備枕頭模組(PIL在python3中已更名為pillow模組)    更新制作日期:2018年11月12日    作者:李興球,本原始碼及素材下載網址:    http://www.scratch8.net/download/newyear.rar

   這是一個用python製作的多媒體動畫,以前做過類似的,這個是更新版。把拆幀的程式碼單獨分出去一個模組叫yeartools.py。它在最下面,沒有素材執行不了,會報錯,當然你也可以自己準備好素材,需要素材請聯絡本人。Python的海龜模組可不僅僅是用來畫圖哦,這裡用它來做多媒體動畫。 """ __author__ = "李興球" __date__ = "2018年11月12日"

from winsound import PlaySound,SND_ASYNC from turtle import * from time import sleep from random import randint import time,os from yeartools import *

#nezha_sentence = "哪吒作為頂天立地的神話英雄,他不僅神力通天,法力高強,武功高強,還是位鎮守在一帶其信仰地區的大型吉祥物,他英勇善戰,驅邪除惡,誅滅牛鬼蛇神,是妖魔鬼怪的剋星,象徵著福娃類的福神之尊,被供為斬妖除魔、降龍伏虎的少年英雄。"

project_name = "風火輪少兒程式設計過新年音樂賀卡" imagefile = "新年快樂.gif" images_list,width,height = split_gifimage(imagefile) color_list = ['cyan','yellow','white','yellow','yellow'] position_list = [(-150,50),(-280,0),(-200,-50),(-240,-170),(-240,-200)] strings = ['風火輪少兒程式設計','祝大家新年快樂,幸福美滿,吉祥如意!','本作品更新日期:2018年11月12日! 作者:李興球','本作品原始碼與素材下載網址:','http://www.scratch8.net/download/newyear.rar'] fonts = [("微軟雅黑",32,"normal"),("",20,"normal"),("",12,"normal"),("",12,"normal"),("",16,"normal")] dx_list  = [45,30,16,16,12] delay_list  = [0.1,0.1,0,0,0]

screen = Screen() screen.setup(width,height+100)  screen.title(project_name) screen.bgcolor((0,0,51)) screen.bgpic("背景.png") 

piter=Turtle(visible=False ) piter.pencolor("white") piter.penup() piter.speed(0)  """打星星程式碼段""" for i in range(30):                                 #隨機打點     piter.goto(randint(-300,250),randint(-150,150))     piter.dot(randint(2,4))

"""寫字程式碼段""" for i in range(5):                                  #寫五line字,內容,大小,風格,顏色都不同     stepwrite(piter,color_list[i],position_list[i],strings[i],fonts[i],dx_list[i],delay_list[i])                        

for i in range(300):     sleep(0.01)     screen.update() screen.cv.postscript(file="風火輪少兒程式設計(請用photoshop開啟).ps") #儲存為ps影象檔案,photoshop能解析. f = open("風火輪少兒程式設計.txt",mode= 'w')      #開啟檔案,以寫模式 f.write(__doc__)                              #儲存python原始碼檔案的說明文件 f.close()                                     #關閉檔案

piter.clear() piter.color("white")

"""背景切換程式碼段""" index=0 def alt_background():     global index     screen.bgpic(images_list[index])     index=index+1     index=index % 5     screen.ontimer(alt_background,100)     alt_background()

"""在舞臺上印歌詞程式碼段""" piter.goto(0,-230) song_file="中國娃娃 - 發財發福中國年.wav"    #歌曲檔案 lrc_file="發財發福中國年歌詞.lrc"            #歌詞檔案 words_list=[]                                #歌詞列表 words_index=0

f=open(lrc_file) words_=f.readlines()                          f.close() words_list=[ line.strip() for line in words_ if len(line)>1]   words_lines=len(words_list)

PlaySound(song_file, SND_ASYNC) #非同步播放音效

def get_time_axis(index):     """獲取時間軸"""     songtime=words_list[index]     songtime=songtime.split("]")[0]     songtime=songtime.split(":")     songtimef=songtime[0][1:3]     songtimef=int(songtimef)*60         songtimem=float(songtime[1])     return int((songtimef+songtimem)*1000)  

words_index=0 begin_time=time.time() def display_subtitle():     """隨著音樂顯示歌詞函式"""     global words_index            #歌詞索引號     global words_lines            #歌詞line數          current_time=time.time()     running_time=(current_time-begin_time)*1000     screen.title(project_name + "," + str(running_time))     if get_time_axis(words_index)<running_time:         piter.clear()         display_words_=words_list[words_index].split("]")[1]         piter.goto(0,-230)         piter.pencolor("black")         piter.write(display_words_,align='center',font=("",24,"normal"))         piter.goto(-1,-229)         piter.pencolor("white")         piter.write(display_words_,align='center',font=("",24,"normal"))                  #print("當前words_index:" + str(words_index) + ",words_:" + display_words_)          words_index=words_index+1     if words_index<words_lines:                 screen.ontimer(display_subtitle,100)          display_subtitle() screen.mainloop()

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

以下是yeartools.py模組原始碼:

from PIL import Image,ImageSequence import os,time

def split_gifimage(filename):     """拆幀到資料夾,形成png檔案"""     if not os.path.exists(filename):return     filename = os.path.split(filename)[-1]     basename = os.path.splitext(filename)[0]     if not os.path.exists(basename):os.mkdir(basename)          gif_image = Image.open(filename)  #載入圖片     w,h=gif_image.size     #ImageSequence.Iterator(圖象) 能返回圖形中的每一幀。

    index = 1     frames_list=[]

    for frame in ImageSequence.Iterator(gif_image):  #對於圖形中的每一幀         檔名= basename + os.sep + basename + str(index) + ".png"         frame.save(檔名)         frames_list.append(檔名)         index += 1

    print( "拆分gif完畢!共拆成了" + str(index-1) + "張png圖片")     return frames_list,w,h

def stepwrite(t,color,position,string,fontstyle,dx,delay):     """ t:海龜物件,color:畫筆顏色,position:座標元組,string:要寫的字         fontstyle:字的風格,三元組,dx:水平方向移動的間隔     """     t.color(color)     t.goto(position)     for char in string:         t.write(char,font = fontstyle)         time.sleep(delay)         t.setx(t.xcor() + dx)