1 效果圖
2 知識點
======
2.1 turtle的動畫設計,透過遊戲設計,增強學習興趣。
2.2 turtle.shape已有圖形呼叫和自定義shape圖形(gif格式)。
2.3 python程式設計設計思維和相關知識複習。
2.4 程式碼講解清楚,小白秒懂,一秒入門,值得收藏。
2.5 python3.8+deepin-linux作業系統。
3 圖片初步處理
============
3.2 截圖成1.png,然後將圖片背景透明化處理
import PIL.Image as Image# 以第一個畫素為準,相同色改為透明def transparent_back(img): img = img.convert('RGBA') L, H = img.size color_0 = img.getpixel((0,0)) for h in range(H): for l in range(L): dot = (l,h) color_1 = img.getpixel(dot) if color_1 == color_0: color_1 = color_1[:-1] + (0,) img.putpixel(dot,color_1) return imgif __name__ == '__main__': img=Image.open('/home/xgj/Desktop/guiturace/1.png') img=transparent_back(img) img.save('/home/xgj/Desktop/guiturace/11.png')
3.3 然後將圖片11.png大小縮小到48*48
from PIL import Image def Image_PreProcessing(): # 待處理圖片儲存路徑 im = Image.open('/home/xgj/Desktop/guiturace/11.png') # Resize圖片大小,入口引數為一個tuple,新的圖片大小 imBackground = im.resize((48,48)) #處理後的圖片的儲存路徑,以及儲存格式 imBackground.save('/home/xgj/Desktop/guiturace/111.png','PNG')if __name__ == "__main__": Image_PreProcessing()
3.4 新建資料夾png,將111.png複製6個,取名為1~6.png,生成/png/rabbit.gif
import imageio,osfrom PIL import ImageGIF=[]filepath="/home/xgj/Desktop/guiturace/png"#檔案路徑filenames=os.listdir(filepath)for filename in os.listdir(filepath): GIF.append(imageio.imread(filepath+"/"+filename))#這個duration是播放速度,數值越小,速度越快imageio.mimsave(filepath+"/"+'rabbit.gif',GIF,duration=0.1)
3.5 效果圖
4 turtle版龜兔賽跑的主程式碼
====================
4.1 第1步:匯入模組
from turtle import *import turtle as t
4.2 第2步:大視窗設定,自定義圖形先註冊和文字說明
#設定標題t.title("龜兔賽跑turtle版")#設定背景色t.bgcolor("black")#需要在這裡註冊自定義的圖形#僅僅支援gif格式t.register_shape('/home/xgj/Desktop/guiturace/png/rabbit.gif')#書寫文字說明t.goto(-400,400)t.pencolor('white')t.write('說明:\n白色是小白兔\n紅色是小烏龜')t.ht() #隱藏畫筆
4.3 畫終點小紅旗
#小白兔終點的小紅旗t.penup()t.speed(1)t.goto(200,0)t.pendown()t.color("red")t.begin_fill()t.left(90)t.forward(60)t.right(90)t.forward(40)t.right(150)t.forward(50)t.end_fill()t.penup()t.ht()#小烏龜的終點的小紅旗t.penup()t.speed(1)t.goto(200,-100)t.pendown()t.color("red")t.begin_fill()t.right(120)t.forward(60)t.right(90)t.forward(40)t.right(150)t.forward(50)t.end_fill()t.penup()t.ht()
4.4 第4步:定義小白兔
rabbit=Turtle()#定義兔rabbit.hideturtle()#讓兔子隱形#獲取已有圖形#rabbit.shape('arrow')#兔子的形狀#形狀:“arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”。#前面需要先註冊自定義圖形,後面才能呼叫自定義圖形rabbit.shape('/home/xgj/Desktop/guiturace/png/rabbit.gif')rabbit.shapesize(3) #兔子的大小rabbit.color("white") #兔子的顏色rabbit.up()#將兔子移動到起點,準備比賽rabbit.back(400)#把兔子往後移400rabbit.showturtle()#讓兔子顯露出來rabbit.down()#兔子移動時劃線def rabbitmove():#定義一個新的函式 兔子移動 if usedtime<50:#如果用時小於50 rabbit.forward(3)#兔子向前奔跑 rabbit.color("white")#兔子的顏色是白色 elif usedtime<415:#如果用時 50<=usedtime<415 兔子就去睡覺,位移不變 rabbit.forward(0)#兔子向前0 else:#否則就追趕 rabbit.forward(6)#兔子向前6 #顏色可變性,對自定義圖形不變色 if usedtime%2==0: rabbit.color("white") else: rabbit.color("blue")
4.5 定義小烏龜
tortoise=Turtle()#引入烏龜圖案tortoise.hideturtle()#讓烏龜隱形tortoise.shape('turtle')#確定烏龜的形狀tortoise.shapesize(3) #烏龜大小tortoise.color("purple")#確定烏龜的顏色tortoise.pensize(3)#確定筆畫的粗細tortoise.up()#將烏龜移動到起點,準備比賽#小烏龜下移tortoise.goto(0,-100)tortoise.back(400)#將烏龜後移400tortoise.showturtle()#把烏龜顯露出來tortoise.down()#烏龜移動時劃線def tortoisemove():#定義一個新的函式 烏龜移動 tortoise.forward(1)#烏龜一直在緩慢的爬行 #顏色可變性 if usedtime%2==0: tortoise.color("green") else: tortoise.color("red")
4.6 第6步:移動設定
usedtime=0#定義用時 賦初值為0def move():#定義函式 移動 global usedtime#全域性形式 移動均參照usedtime rabbitposition = rabbit.xcor()#兔子的位置是兔子的x座標 tortoiseposition = tortoise.xcor()#烏龜的位置是烏龜的x座標 if max(rabbitposition,tortoiseposition)>200:#如果兔子和烏龜的位置中最大的超過200 writer= Turtle()#writer定義為Turtle writer.hideturtle()#隱藏烏龜(兔子) if tortoiseposition >200:#如果烏龜的位置大於200 msg='小烏龜贏了!' else: msg ='小白兔贏了!' writer.color("white") writer.write(msg, align='center',font=('simfang', 20,'bold')) else:#否則就移動 rabbitmove()#兔子移動 tortoisemove()#烏龜移動 ontimer(move,100)#定時讓它們有動畫效果 usedtime= usedtime+1#迴圈,用時+1
4.7 第7步:結尾
#第7步:定時器開啟,移動引數ontimer(move,100)#比賽開始,定時#畫面顯示,並等待關閉done()
5 參考這裡的程式碼,對下面的程式碼進行刪減,修改,註釋,增加功能等。感謝。
https://blog.csdn.net/qq_45381011/article/details/95789558?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-6&spm=1001.2101.3001.4242