python可愛的小貓動畫_菜根譚小貓

"""
   菜根譚小貓.py
   本程序演示四隻行走的小貓,碰到屏幕邊緣會反向,有時候它也會向後轉。
   它會時不時地說《菜根譚》裏面的句子。它有時候還會發出貓叫聲。
   作者:李興球,日期:2018/10/2。
"""

import os
from turtle import *
from random import randint,choice

class Sprite(Turtle):
    def __init__(self,ycor,imagesL,imagesR,sentence,sound = None):
        """參數說明:
           ycor:初始y座標
           imagesL: 左行列表圖
           imgaesR: 右行列表圖
           sentence:話語列表
           sound:喵叫聲
        """
        Turtle.__init__(self,visible=False)
        self.screen_width = self.screen.window_width()   #屏幕寬度屬性
        self.up()
        self.sety(ycor)          #設置初始y座標
        self.sentence = sentence # 句子列表
        self.sound = sound       #貓叫聲
        self.imagesL = imagesL   #左造型列表         
        self.imagesR = imagesR   #右造型列表         
        self.index = 0
        self.images_amount = len(imagesL)   #造型數量 
        self.images = self.imagesL if self.heading()==180 else self.imagesR
        self.word_turtle = Turtle(visible = False,shape='blank')  #用於在self頭頂上顯示字符的海龜對象
        self.word_turtle.penup()
        self.word_turtle.pencolor("green")
        self.st()
        self.move()
        
    def move(self):
        """讓小貓移動,讓它有時候會向後轉,有時候會說話。"""
        pass
           
    def turn_back(self):
        """向後轉"""
        
        self.rt(180)             
        self.images = self.imagesL if self.heading()==180 else self.imagesR
        self.index = 0
        
    def next_image(self):
        """切換到下一個造型"""
        pass
        
    def bounce_on_edge(self):
        
        """對象是離邊緣50像素時,讓它向後轉"""
        pass                             #到了邊緣會向後轉
            
    def miao(self):
        """設置一定的機率,讓小貓發出喵叫聲"""
        if randint(1,300) == 1:
            try:self.sound.play()
            except:pass
        
    def speak(self):
        """讓小貓的頭頂上顯示一行句子,好像小貓在說話"""
        words = choice(self.sentence)
        x = self.xcor()
        y = self.ycor() + 55
        self.word_turtle.goto(x,y)
        self.word_turtle.write(words,align='center',font=("黑體",12,"normal"))
        wait_time = 1000 * len(words) //2         #設定等待時間
        self.screen.ontimer(self.move,wait_time)  # 根據句子的長度決定等待時間
        
        
def load_sentence(filename):
    """讀文件內容,返回句子組成的列表,參數爲文件名路徑"""
    words = []
    f = open(filename)
    for line in f:
        if line.strip() != "": words.append(line)
    f.close()
    return words

def init_screen(width,height,title,background):
    """初始化屏幕,參數分別是:寬度,高度,窗口標題,背景圖路徑"""
    screen = Screen()
    screen.bgpic(background)
    screen.setup(width,height)
    screen.title(title)    
    screen.delay(0)
    return screen
    
def register_gif(screen):
    """註冊gif圖形,參數爲屏幕對象"""
    pass

def init_audio():
    """播放背景音樂,加載‘喵’聲。"""
    try:
        import pygame
        pygame.mixer.init()                  #初始化混音器
        pygame.mixer.music.load("BGM10.mp3") #加載背景音樂
        pygame.mixer.music.play(-1,0)        #循環播放背影音樂
        miao = pygame.mixer.Sound("喵.wav")  #生成音效對象
    except:
        print("音頻初始化失敗,可能沒有安裝pygame模塊。")
        miao = None
    return miao


def main():
    
    """定義主程序,它的執行步驟爲:
    初始化屏幕,註冊gif圖形,初始化音頻,裝載菜根譚名句,新建4個小貓對象,主循環
    """    
    screen = init_screen(960,720,"《菜根譚》小貓","stripes.png")  #初始化屏幕
    
    images0,images1 = register_gif(screen)                        #註冊gif圖到形狀列表

    miao = init_audio()                                           #初始化音頻
    
    句子 = load_sentence("菜根譚名句摘要.txt")                    #裝載菜根譚名句到列表

    [Sprite(y,images0,images1,句子,miao) for y in (80,260,-120,-290)] #生成4只小貓
    
    screen.mainloop()                                            #主循環
    
               
    
if __name__=="__main__":

    main()








    
        
        
        

 

python可愛的小貓動畫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章