"""
菜根譚小貓.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()