版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
random庫——隨機生成驗證碼任務(wù)描述
很多網(wǎng)站的注冊登錄業(yè)務(wù)都加入了驗證碼技術(shù),以區(qū)分用戶是人還是計算機,有效地防止刷票、論壇灌水、惡意注冊等行為。目前驗證碼的種類層出不窮,其生成方式也越來越復(fù)雜,常見的驗證碼是由大寫字母、小寫字母、數(shù)字組成的6位驗證碼。
本任務(wù)要求編寫程序,實現(xiàn)隨機生成6位驗證碼的功能。
01庫與模塊、包的關(guān)系02庫的導(dǎo)入04任務(wù)實現(xiàn)random內(nèi)置庫03庫與模塊、包的關(guān)系01
庫與模塊、包的關(guān)系
Python中模塊有內(nèi)置模塊、第三方模塊和自定義模塊三種類型。
模塊、包和庫是Python組織代碼的三種方式。其中,模塊是最基礎(chǔ)的代碼組織方式,Python中的每個擴展名為py的文件都是一個模塊,文件名就是模塊名。包以類似目錄的結(jié)構(gòu)組織模塊文件或子包,簡單來說,一個包含__init__.py文件的目錄就是一個包。包中必有__init__.py文件,可以有多個模塊或子包。庫是一個抽象概念,它是指具有相關(guān)功能的模塊的集合。
庫與模塊、包的關(guān)系
內(nèi)置模塊是指Python安裝時自帶的模塊,可直接導(dǎo)入程序供開發(fā)人員使用,譬如random模塊就屬于內(nèi)置模塊。
第三方模塊指由第三方制作發(fā)布的、供給大家使用的Python模塊,在使用前需要開發(fā)人員自行安裝。
而自定義模塊是指開發(fā)人員在編寫程序的過程中自行編寫的、存放功能性代碼的.py文件。庫的導(dǎo)入02
庫的導(dǎo)入在使用庫中定義的內(nèi)容之前,需先將庫導(dǎo)入到當(dāng)前程序。Python使用import關(guān)鍵字導(dǎo)入庫,其語法格式如下:庫導(dǎo)入后,可通過點字符“.”調(diào)用庫中的內(nèi)容,其語法格式如下:庫.函數(shù)庫.變量import庫1,庫2,…
庫與模塊、包的關(guān)系通過點字符調(diào)用庫中的內(nèi)容可避免多個庫中存在同名函數(shù)時代碼產(chǎn)生歧義,但若不存在同名函數(shù),可使用from…import…語句直接將庫的指定內(nèi)容導(dǎo)入程序,并在程序中直接使用庫中的內(nèi)容。frompygameimportinitinit()
庫與模塊、包的關(guān)系使用from…import…語句也可將指定庫的全部內(nèi)容導(dǎo)入當(dāng)前程序,此時可使用“*”指代庫中的全部內(nèi)容。雖然from…import*可以方便地導(dǎo)入一個庫中的所有內(nèi)容,但考慮到代碼的可維護(hù)性,此種方式不應(yīng)被過多地使用。frompygameimport*random內(nèi)置模塊03random庫是Python的內(nèi)置庫,導(dǎo)入該庫后,可利用庫中的函數(shù)生成隨機數(shù)據(jù),其常用函數(shù)如表所示。
random內(nèi)置模塊random庫中常用函數(shù)函數(shù)說明random()返回(0,1]之間的隨機小數(shù)。randint(x,y)返回[x,y]之間的整數(shù)。choice(seq)從序列seq中隨機返回一個元素。由表可知,random()可生成(0,1]之間的隨機小數(shù);randint(x,y)可生成[x,y]之間的隨機整數(shù);choice(seq)可從序列seq中隨機返回一個元素。有關(guān)random庫的應(yīng)用,有一個經(jīng)典的案例,就是隨機生成旅游信息。
random內(nèi)置模塊
想要出去旅游,但時間還沒有確定,需要在10號~19號之間挑選一個日期作為出游時間,同時在北京、云南、浙江、海南、四川中挑選一個出游的地方。
實例本實例擬采用random庫的來完成,其代碼如下:importrandomprint("旅游的時間為:",end='')print(random.randint(10,19),"號",sep='')place=['北京','云南','浙江','海南','四川']print("出游的地方是:",end='')print(random.choice(place))任務(wù)實現(xiàn)——隨機生成驗證碼04
隨機生成驗證碼
根據(jù)題意,6位驗證碼是由6個字符組成,每個字符都是隨機字符,要實現(xiàn)隨機字符的功能需要用到隨機數(shù)random庫。具體思路是先導(dǎo)入random模塊;然后創(chuàng)建一個空字符串code_list用來存放生成的驗證碼;最后生成6個隨機字符逐個拼接到code_list后面。這最后一步是生成驗證碼的核心。為確保每次生成的字符類型只能為大寫字母、小寫字母、數(shù)字的任意一種,我們使用1、2、3分別代表生成大寫字母、生成小寫字母、生成數(shù)字。同時,為確保每次生成的是所選類型中的字符,需要按類型給隨機數(shù)函數(shù)指定范圍,數(shù)字對應(yīng)的范圍為0~9,大寫字母對應(yīng)的范圍為65~90,小寫字母對應(yīng)范圍為97~122。
判斷是否是閏年#隨機生成驗證碼importrandomdefverify_code():code_list=''foriinrange(6):#控制驗證碼生成的位數(shù)state=random.randint(1,3)ifstate==1:first_kind=random.randint(65,90)#大寫字母random_uppercase=chr(first_kind)code_list=code_list+random_uppercaseelifstate==2:second_kinds=random.randint(97,122)#小寫字母random_lowercase=chr(second_kinds)code_list=code_list+random_lowercaseelifstate==3:third_kinds=random.randint(0,9)#阿拉伯?dāng)?shù)字code_list=code_list+str(third_kinds)returncode_listif__name__=='__main__':verifycode=verify_code()print(verifycode)
代碼如下:任務(wù)總結(jié)模塊、包和庫是Python組織代碼的三種方式。其中,模塊是最基礎(chǔ)的代碼組織方式,Python中的每個擴展名為py的文件都是一個模塊,文件名就是模塊名。包以類似目錄的結(jié)構(gòu)組織模塊文件或子包,簡單來說,一個包含__init__.py文件的目錄就是一個包。包中必有__init__.py文件,可以有多個模塊或子包。庫是一個抽象概念,它是指具有相關(guān)功能的模塊的集合它有內(nèi)置模塊、第三方模塊和自定義模塊三種類型。庫的導(dǎo)入有兩種方法,一是使用import導(dǎo)入,二是使用from…import…導(dǎo)入。random庫是Python的內(nèi)置庫,可直接導(dǎo)入程序供開發(fā)人員使用。謝謝觀看turtle庫——繪制指定顏色的N邊形任務(wù)描述
如果你喜歡繪畫,那么一定要嘗試Python的內(nèi)置模塊turtle模塊,turtle是一個專門的繪圖模塊,你可以利用該模塊通過程序繪制一些簡單圖形。本任務(wù)要求編寫程序,使用turtle模塊繪制如下圖所示的指定顏色的N邊形。
01Turtle及其功能02繪圖坐標(biāo)系04任務(wù)實現(xiàn)turtle庫函數(shù)03turtle及其功能01
turtle及其功能
什么是Turtle庫?turtle英文是海龜?shù)囊馑?。turtle庫是Python語言中一個很流行的繪制圖像的外部函數(shù)庫。
turtle及其功能使用turtle庫,同學(xué)們頭腦里需要有這樣一個概念:想象一個小海龜,在一個橫軸為x、縱軸為y的坐標(biāo)系原點,(0,0)位置開始;根據(jù)一組函數(shù)指令的控制,在這個平面坐標(biāo)系中進(jìn)行移動,從而在它爬行的路徑上繪制了圖形。在程序中導(dǎo)入turtle庫后,可利用庫中的函數(shù)創(chuàng)建圖形窗口,在圖形窗口中通過簡單重復(fù)的動作直觀地繪制界面和圖形。
turtle及其功能
由此可以看到,turtle庫的邏輯非常簡單,利用其內(nèi)置的函數(shù),用戶可以像使用筆在紙上繪圖一樣,在turtle畫布上繪制圖形。turtle庫的導(dǎo)入:importturtlefromturtleimport*turtle坐標(biāo)系02
turtle坐標(biāo)系turtle.setup(width,height,startx,starty)作用:設(shè)置主窗體的大小和位置。例如:turtle.setup(650,350,200,200)turtle庫函數(shù)03
turtle庫函數(shù)turtle庫的函數(shù)主要有創(chuàng)建窗口、設(shè)置畫筆和繪制圖形三種類型。這是turtle庫中用于創(chuàng)建窗口的函數(shù)。函數(shù)說明shape(name)設(shè)置海龜展示的形狀。默認(rèn)形狀為箭頭。這里,name必須為TurtleScreen形狀庫里的形狀,可以填寫以下形狀:arrow(箭頭),turtle(海龜),circle(圓),square(方塊),triangle(三角形),classic(帶尾箭頭)。setup(width,height,startx,starty)設(shè)置主窗體的大小和位置。screensize(width,height,color)設(shè)置畫布的大小為weight*hight,顏色為color。
turtle庫函數(shù)這是turtle庫中用于設(shè)置畫筆的函數(shù)。函數(shù)說明pensize(width)或turtle.width()設(shè)置畫筆寬度,若為None或者為空則為當(dāng)前畫筆寬度。pencolor(colorstring)或pencolor((r,g,b))設(shè)置畫筆顏色,若為空則為當(dāng)前畫筆顏色。grey(灰)darkgreen(深綠)gold(金)violet(紫羅蘭)purple(紫)。penup()或pu()或up()抬起畫筆,之后移動畫筆不繪制形狀。goto(x,y)將畫筆移到絕對坐標(biāo)(x,y)處。pendown()或pd()或down()落下畫筆,之后移動畫筆繪制形狀。
turtle庫函數(shù)這是turtle庫中用于繪制圖形的函數(shù)。函數(shù)說明forward(distance)或fd(distance)
沿著前進(jìn)的方向行進(jìn)distance像素的距離。當(dāng)為負(fù)數(shù)時,表示向相反方向前進(jìn)。back(distance)或bk(distance)
沿著后退的方向行進(jìn)distance像素的距離。當(dāng)為負(fù)數(shù)時,表示向相反方向前進(jìn)。setheading(to_angle)或seth(to_angle)設(shè)置當(dāng)前行進(jìn)的方向為to_angle(按逆時針方向)絕對角度。left(to_angle)或right(to_angle)設(shè)置當(dāng)前行進(jìn)的方向為向左(右)to_angle度。circle(radius,extent/None)根據(jù)半徑radius繪制extent角度的弧形。當(dāng)radius為正數(shù)時,半徑在左側(cè)(沿逆時針方向畫?。?,當(dāng)radius為負(fù)數(shù)時,半徑在右側(cè)(沿順時針方向畫?。?。當(dāng)extent為空或為None,則繪制圓形。turtle.fillcolor(color)設(shè)置要填充的顏色。turtle.begin_fill()或end_fill()開始填充或結(jié)束填充
利用所學(xué)函數(shù)繪制在藍(lán)色天空中閃耀著一顆小星星。
實例其代碼如下:importturtleturtle.screensize(None,None,"blue")turtle.fillcolor("yellow")turtle.shape("turtle")turtle.begin_fill()turtle.fd(100)turtle.left(144)turtle.fd(100)turtle.left(144)turtle.fd(100)turtle.left(144)turtle.fd(100)turtle.left(144)turtle.fd(100)turtle.end_fill()任務(wù)實現(xiàn)——繪制指定顏色的N邊形04
繪制指定顏色的N邊形
根據(jù)題意,繪制N邊形的功能可以視為將畫筆沿順時針方向旋轉(zhuǎn)固定角度畫指定顏色的直線的操作,直到繪制指定邊數(shù)為止結(jié)束繪圖,之后在畫好的圖形上填充顏色知道了的顏色即可。此N邊形繪制的過程中涉及到的turtle模塊中的函數(shù)及說明如下:(1)begin_fill():開始填充。(2)end_fill():停止填充。(3)fillcolor():設(shè)置填充的顏色。(4)forward():將畫筆向前方移動指定的距離。(5)right():將畫筆順時針旋轉(zhuǎn)指定的角度。(6)done():啟動事件循環(huán),必須位于末尾位置。
判斷是否是閏年#繪制指定顏色的N邊形importturtlen=int(input('請輸入邊數(shù)N='))c=input('請輸入顏色:')turtle.fillcolor(c)angle=180-(n-2)*180/nturtle.begin_fill()foriinrange(n):turtle.forward(150)turtle.right(angle)turtle.end_fill()turtle.done()代碼如下:任務(wù)總結(jié)turtle庫是Python語言中一個很流行的繪制圖形的外部函數(shù)庫。在程序中導(dǎo)入該庫后,可利用庫中的函數(shù)創(chuàng)建圖形窗口,在圖形窗口中通過簡單重復(fù)的動作直觀地繪制界面和圖形。turtle庫的邏輯非常簡單,利用其內(nèi)置的函數(shù),用戶可以像使用筆在紙上繪圖一樣,在turtle畫布上繪制圖形。turtle庫的使用主要分為創(chuàng)建窗口、設(shè)置畫筆和繪制圖形三個方面。。謝謝觀看time庫——模擬時鐘任務(wù)描述
鐘表是一種計時裝置,其樣式千變?nèi)f化,但用來顯示時間的表盤卻相差無幾。對于指針式鐘表的表盤一般是由刻度、時針、分針和秒針、星期顯示、日期顯示組成。本任務(wù)要求編寫程序,使用time模塊繪制并控制所示時鐘。
時間管理
在Python程序開發(fā)過程中根據(jù)時間來選擇不同的處理場景的情況很多,譬如,動態(tài)時鐘秒針的運動時間、游戲的防沉迷控制、外賣平臺店鋪的營業(yè)時間管理、數(shù)據(jù)的記錄及日志的處理等。Python語言提供了兩個與時間管理有關(guān)的庫,它們是time庫、datetime庫。01time庫02datetime庫04任務(wù)實現(xiàn)time庫01
time庫time庫是Python中最常用的與時間處理相關(guān)的庫。中常用的time庫函數(shù)如表所示。函數(shù)說明time()獲取當(dāng)前時間,結(jié)果為實數(shù),單位為秒。sleep(secs)進(jìn)入休眠狀態(tài),時長由secs確定,單位為秒。strptime(string[,format])將一個年月日時間格式的字符串解析為時間元組。
localtime([secs])以struct_time類型輸出本地時間。asctime([tuple])獲取時間字符串,或?qū)r間元組轉(zhuǎn)換為字符串。mktime(tuple)將時間元組轉(zhuǎn)換為秒數(shù)。strftime(format[,tuple])返回字符串表示的當(dāng)?shù)貢r間,格式由format決定。計算時間。時間是可以進(jìn)行加減運算的,一般情況下,時間是以時間戳的形式來進(jìn)行加減運算。本實例首先導(dǎo)入time庫,獲取系統(tǒng)的第一個當(dāng)前時間,這個時間是以時間戳的形式表示。然后讓系統(tǒng)等待幾秒后,再獲取系統(tǒng)的第二個當(dāng)前時間,計算這兩個時間的和和差,即完成時間的計算。
time實例其代碼如下:importtimetime_1=time.time()time.sleep(3)time_2=time.time()print(time_1+time_2)print(time_1+time_2)Datetime庫02
datetime庫
以不同格式顯示日期和時間是程序中最常用到的功能。datetime
庫可以從系統(tǒng)中獲得時間,并以用戶選擇的格式進(jìn)行輸出。常用的datetime庫函數(shù)如表所示。函數(shù)說明date()獲取當(dāng)前的日期。time()獲取當(dāng)前的時間。datetime()獲取當(dāng)前的日期和時間。timedelta()獲取兩個時間的時間差。tzinfo()獲取時區(qū)信息。
編程確定某天是該年的第幾天。時間和日期是可以進(jìn)行操作的。本實例首先導(dǎo)入datetime庫,獲取指定的日期,然后從這一年的1月1日起計算天數(shù)。
datetime實例其代碼如下:importdatetimedefday_year(year,month,day):date1=datetime.date(year=int(year),month=int(month),day=int(day))date2=datetime.date(year=int(year),month=1,day=1)return(date1-date2).days+1y=input('請輸入年份:')m=input('請輸入月份:')d=input('請輸入日期:')n=day_year(y,m,d)print(f'{y}年{m}月xpatd0q日是這一年的第{n}天')任務(wù)實現(xiàn)——模擬時鐘03
模擬時鐘
根據(jù)題意,使用turtle模塊繪制如下表盤(屏幕顯示表盤)。表盤有三根指針:時針、分針、秒針。它們的一端被固定在表盤中心,另一端可以沿順時針方向進(jìn)行旋轉(zhuǎn)。表盤中最頂端的刻度為12,它是所有指針的起始點,指針按順時針刻度依次是1,2,3……59。這里,秒針旋轉(zhuǎn)一周,分針移動一個刻度,同樣,分針移動一周,時針移動一格刻度。它們是通過datetime模塊控制時鐘動態(tài)顯示。
模擬時鐘#模擬時鐘fromturtleimport*fromdatetimeimport*defskip(step):'''
跳躍給定的距離'''penup()forward(step)pendown()defsetup_clock(radius):'''
建立鐘表的外框'''reset()pensize(7) #設(shè)置畫筆線條的粗細(xì)foriinrange(60):skip(radius) #在距離圓心為r的位置落筆ifi%5==0:#若能整除5,則畫一條短直線forward(20)skip(-radius-20)else: #否則畫點dot(5)skip(-radius)right(6)代碼如下:
模擬時鐘defmake_hand(name,length):'''
注冊turtle形狀,建立名字為name的形狀'''reset()skip(-0.1*length)#開始記錄多邊形的頂點begin_poly()forward(1.1*length)#停止記錄多邊形的頂點,并與第一個頂點相連end_poly()#返回最后記錄的多邊形handForm=get_poly()#注冊形狀,命名為nameregister_shape(name,handForm)definit():globalsecHand,minHand,hurHand,printer#重置turtle指針向北mode("logo")#建立3個表示表針的Turtle對象并初始化secHand=Turtle()make_hand("secHand",130)#秒針secHand.shape("secHand")
代碼如下:
模擬時鐘minHand.shape("minHand")hurHand=Turtle()make_hand("hurHand",90)#時針hurHand.shape("hurHand")forhandinsecHand,minHand,hurHand:hand.shapesize(1,1,3)#調(diào)整3根指針的粗細(xì)hand.speed(0) #設(shè)置移動速度#建立并輸出文字的Turtle對象printer=Turtle()printer.hideturtle()printer.penup()defweek(t):week=["星期一","星期二","星期三","星期四","星期五","星期六","星期七"]returnweek[t.weekday()]defday(t):return"%s%d%d"%(t.year,t.month,t.day)deftick():'''
繪制鐘表的動態(tài)顯示'''t=datetime.today()#獲取本地當(dāng)前的日期與時間#處理時間的秒數(shù)、分鐘數(shù)、小時數(shù)
代碼如下:
模擬時鐘second=t.second+t.microsecond*0.000001minute=t.minute+t.second/60.0hour=t.hour+t.minute/60.0#將secHand、minHand和hurHand的方向設(shè)為指定的角度secHand.setheading(second*6)minHand.setheading(minute*6)hurHand.setheading(hour*30)tracer(False)printer.fd(70)#向前移動指定的距離#根據(jù)align(對齊方式)和font(字體),在當(dāng)前位置寫入文本printer.write(week(t),align="center",font=("Courier",14,"bold"))printer.back(130)printer.write(day(t),align="center",font=("Courier",14,"bold"))#調(diào)用home()方法將位置和方向恢復(fù)到初始狀態(tài),位置的初始坐標(biāo)為(0,0),#初始方向有兩種情況:若為"standard"模式,則初始方向為right,表示朝向東;#若為"logo"模式,則初始方向是up,表示朝向北
代碼如下:
模擬時鐘printer.home()tracer(True)#設(shè)置計時器,100ms后繼續(xù)調(diào)用tick()函數(shù)ontimer(tick,100)defmain():#關(guān)閉繪畫追蹤,可以用于加速繪畫復(fù)雜圖形tracer(False)init()#畫表框setup_clock(200)#開啟動畫tracer(True)tick() #啟動事件循環(huán),開始接收鼠標(biāo)的和鍵盤的操作done()代碼如下:任務(wù)總結(jié)
time庫是Python中最常用的與時間管理相關(guān)的庫。time()函數(shù)用于獲取當(dāng)前時間,單位為秒;sleep(secs)函數(shù)讓系統(tǒng)進(jìn)入指定時長的休眠狀態(tài),單位為秒。以不同格式顯示日期和時間是程序中最常用到的功能。datetime
庫可以從系統(tǒng)中獲得時間,并以用戶選擇的格式進(jìn)行輸出。謝謝觀看pygame庫—猴子接桃游戲任務(wù)描述
猴子接桃是一款測試反應(yīng)力的游戲。桃子從屏幕頂端任意位置隨機出現(xiàn),勻速垂直落下,玩家使用鼠標(biāo)左右鍵控制猴子左右方向來回移動接住桃子,若猴子接到桃子,游戲得分,玩家可隨時單擊關(guān)閉按鈕結(jié)束游戲。本任務(wù)要求編寫程序,實現(xiàn)猴子接桃子的游戲。
游戲開發(fā)
pygame庫是為開發(fā)2D游戲而設(shè)計的第三方庫,由于第三方庫在使用前需要先行安裝,其安裝方法在項目1的任務(wù)4中已經(jīng)介紹過,這里就不再贅述。pygame庫提供了游戲開發(fā)的一些常用功能,譬如:創(chuàng)建圖形用戶界面、繪制圖形和圖像、監(jiān)聽用戶的鍵盤和鼠標(biāo)操作及播放音頻等。01初始化和退出pygame03游戲循環(huán)及游戲時鐘06任務(wù)實現(xiàn)創(chuàng)建游戲窗口0204繪制圖形及文本05元素位置及動態(tài)效果07鍵盤鼠標(biāo)事件初始化和退出pygame01
初始化和退出pygame
為了滿足不同的開發(fā)需求,pygame庫定義了不同的子模塊,有些子模塊在使用前必須進(jìn)行初始化。Python提供了兩個初始化函數(shù)。函數(shù)說明init()一次性初始化pygame的所有模塊。該函數(shù)使得開發(fā)人員開發(fā)程序時無須再單獨調(diào)用每個子模塊進(jìn)行初始化,而是直接使用所有子模塊。quit()卸載之前被初始化的所有pygame模塊。該函數(shù)并非必須調(diào)用,但在誰申請誰釋放的原則下,開發(fā)人員應(yīng)當(dāng)在需要時主動調(diào)用quit()函數(shù)卸載模塊資源。
初始化和退出pygameimportpygame #導(dǎo)入pygamedefmain():pygame.init() #初始化所有模塊pygame.quit() #卸載所有模塊if__name__=='__main__': main()創(chuàng)建游戲窗口02
創(chuàng)建游戲窗口
當(dāng)需要開發(fā)帶圖形界面的游戲時,應(yīng)先創(chuàng)建一個圖形界面窗口。pygame通過display子模塊創(chuàng)建圖形界面窗口,其與窗口相關(guān)的常用函數(shù)如表所示。函數(shù)說明set_mode()初始化游戲窗口set_caption()設(shè)置窗口標(biāo)題update()更新屏幕顯示內(nèi)容
創(chuàng)建游戲窗口set_mode()函數(shù)用于為游戲創(chuàng)建圖形窗口。語法格式:set_mode(resolution=(0,0),flags=0,depth=0)—>Surfaceset_caption()函數(shù)用于設(shè)置窗口標(biāo)題。語法格式:set_caption(title,icontitle=None)—>Noneupdate()函數(shù)用于刷新窗口,以便顯示修改后的新窗口。
窗口代碼importpygame #導(dǎo)入pygameimportsysWINWIDTH=640 #窗口寬度WINHEIGHT=480BGCOLOR=(33,199,51)#預(yù)設(shè)顏色defmain():pygame.init() #初始化所有模塊WINSET=pygame.display.set_mode((WINWIDTH,WINHEIGHT))WINSET.fill(BGCOLOR)#填充背景顏色pygame.display.set_caption('小游戲') #設(shè)置窗口標(biāo)題whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUIT:sys.exit()pygame.quit() #卸載所有模塊if__name__=='__main__':main()游戲循環(huán)及游戲時鐘03
游戲循環(huán)游戲的啟動和關(guān)閉一般是由玩家手動完成的。目前當(dāng)啟動游戲窗口后游戲就結(jié)束了。若想使游戲繼續(xù)運行,需要在程序中添加一個游戲循環(huán)。whileTrue: pass游戲時鐘
為了降低游戲循環(huán)的頻率,需要在循環(huán)中設(shè)置游戲時鐘。游戲時鐘用于控制幀率,利用人類眼睛的視覺暫留形成動畫。如果幀率大于60幀/每秒,就能實現(xiàn)連續(xù)、高品質(zhì)動畫效果。但幀率過高就意味高負(fù)荷,需要設(shè)置游戲時鐘來解決。pygame的time模塊專門提供了一個Clock類,通過Clock類的tick()方法可以方便地設(shè)置游戲循環(huán)的執(zhí)行頻率。游戲時鐘FPS=60#預(yù)設(shè)頻率defmain():pygame.init()#初始化所有模塊
FPSCLOCK=pygame.time.Clock()#創(chuàng)建Clock對象……pygame.display.update()i=0whileTrue:i=i+1print(i)
FPSCLOCK.tick(FPS) #控制幀率
pygame.quit()#卸載所有模塊if__name__=="__main__":main()繪制圖形及文本04
加載圖片
圖形化窗口是繪制文本和圖形的前提,它一個Surface對象,因此,繪制圖形和文字實質(zhì)上是在Surface對象上繪制。繪制圖形需要經(jīng)過加載圖片和繪制圖片兩步。
加載圖片是將圖片讀取到程序中,需要使用pygame中image類的load()方法完成,生成Surface對象。
其語法格式:load(filename)—>Surface這里:參數(shù)filename是被加載的文件名,返回值是一個Surface對象。
加載圖片其語法格式:load(filename)—>Surface這里:參數(shù)filename是被加載的文件名,返回值是一個Surface對象。譬如:img_surf=pygame.image.load(“aa.jpg”)#加載一個名為“aa.jpg”的圖片加載圖片
繪制圖片是將一個Surface對象疊加在另一個Surface對象上,類似于將不同尺寸的圖片進(jìn)行堆疊。通過Surface對象的blit()方法可以實現(xiàn)圖片繪制。其語法格式如下:blit(source,dest,area=None,special_flags=0)—>Rect譬如:
WINSET.blit(image,(0,0))#繪制圖片繪制文本繪制文本是通過pygame的font模塊的Font類來實現(xiàn),繪制文本需要創(chuàng)建字體對象、渲染文本內(nèi)容生成一張圖像和將生成的圖像繪制到游戲主窗口中三個步驟完成。
首先調(diào)用font模塊的Font()函數(shù)創(chuàng)建一個字體對象,然后調(diào)用字體對象的render()方法渲染成一張圖像,最后調(diào)用image類的save()方法將渲染生成的圖片保存到本地。元素位置及動態(tài)效果05
坐標(biāo)體系
上節(jié)課中繪制的圖片和文本都在圖形窗口的原點。但實際上游戲中的文字和圖片可以出現(xiàn)在窗口的任意位置。若要準(zhǔn)確控制圖片和文本的位置,需要掌握坐標(biāo)體系和Rect類。pygame圖形窗口的坐標(biāo)體系的坐標(biāo)原點在游戲窗口的左上角;x軸與水平方向平行,以向右為正;y軸與垂直方向平行,以向下為正。如下圖:
Rect類Rect類用于描述、控制可見對象在窗口中的位置,它的構(gòu)造函數(shù)如下:Rect(x,y,width,height)—>Rect
功能是:通過Rect類的構(gòu)造函數(shù)創(chuàng)建一個矩形對象,并設(shè)置該矩形在pygame窗口中的位置(x,y),寬度為width,高度為height。
元素位置
Surface對象在窗口中的位置是通過blit()方法的參數(shù)dest確定的,dest通過兩種方式控制Surface對象的繪圖位置。一是將Surface對象繪制到窗口時,以元組(x,y)的形式將坐標(biāo)傳遞給參數(shù)dest。二是使用get_rect()方法獲取Surface對象的矩形屬性,重置矩形橫縱坐標(biāo)后,再將矩形屬性傳遞給參數(shù)dest以設(shè)置繪制位置。
動態(tài)效果
游戲的動態(tài)效果就是文本或圖片的更換、位置的移動和屏幕的刷新等。移動效果:多次修改Surface對象繪制的位置并連續(xù)繪制刷新。動畫效果:在同一位置繪制不同的Surface對象。移動的動畫。連續(xù)繪制不同Surface對象的同時,修改繪制的位置。鼠標(biāo)、鍵盤事件06
交互事件
游戲需要交互,需要接收玩家操作來做出有針對性的響應(yīng)。我們把玩家對游戲的操作稱為事件(Event),根據(jù)輸入媒介的不同,游戲中的事件分為鍵盤事件、鼠標(biāo)事件和手柄事件。pygame中的鍵盤事件包括KEYDOWN和KEYUP兩種;鼠標(biāo)事件包括MOUSEMOTION、MOUSEBUTTONDOWN和MOUSEBUTTONUP三種。
事件處理
事件的處理先利用pygame的event模塊中的type屬性判斷事件類型,利用get()函數(shù)獲取當(dāng)前產(chǎn)生的所有事件的列表。通過遍歷事件列表,將其中的元素與需要處理的事件常量進(jìn)行對比,若當(dāng)前事件需要處理,再對其進(jìn)行相應(yīng)的操作。任務(wù)實現(xiàn)——猴子接桃游戲07
猴子接桃游戲#猴子接桃importrandom,pygame,sysfrompygame.localsimport*pygame.init()screen_width=450#屏幕寬度screen_height=560#屏幕高度screen=pygame.display.set_mode((screen_width,screen_height),0,32)#繪制窗口pygame.display.set_caption("猴子接桃")#游戲標(biāo)題run_time_font=pygame.font.SysFont('simhei',48)#分?jǐn)?shù)字體,字號defgame_start():monkey=pygame.image.load('monkey.png')#加載圖片peach=pygame.image.load('tao.png')game_background=pygame.image.load('background.jpg')speed=1#水蜜桃下落速度score=0#分?jǐn)?shù)monkey_x=200#猴子位置信息monkey_y=470monkey_x_speed=1#設(shè)置移動速度monkey_move={K_LEFT:0,K_RIGHT:0}pos_list=[]#水蜜桃坐標(biāo)列表foriinrange(7):#繪制初始化水蜜桃x=random.randint(0,390)y=random.randint(0,560)pos_list.append([x,y])clock=pygame.time.Clock()#幀率控制Clock對象
猴子接桃游戲while
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 班級藝術(shù)周活動方案
- 玻璃銷售承包方案
- 玻尿酸市場研究報告
- 愛護(hù)花草教案及課程設(shè)計
- 渤海小學(xué)教育理念研究報告
- 泵站工程課程設(shè)計
- 氨儲罐課程設(shè)計
- 空中加油系統(tǒng)相關(guān)行業(yè)投資規(guī)劃報告范本
- 畢業(yè)扶貧 調(diào)查研究報告
- 鉆采裝備相關(guān)行業(yè)投資規(guī)劃報告
- 小學(xué)生必背古詩“飛花令”200句
- 大班幼兒學(xué)情分析報告
- 北師大版三年級數(shù)學(xué)上冊第六單元《乘法》(大單元教學(xué)設(shè)計)
- 紡織品購銷合同(5篇)
- 體育市場營銷智慧樹知到期末考試答案章節(jié)答案2024年西華大學(xué)
- 【課件】第15課+權(quán)力與理性-17、18世紀(jì)西方美術(shù)+課件-高中美術(shù)人教版(2019)美術(shù)鑒賞
- 兒童早期的認(rèn)知發(fā)展-皮亞杰前運算階段(三座山實驗)
- 沂蒙紅色文化與沂蒙精神智慧樹知到期末考試答案2024年
- 國開一體化平臺01588《西方行政學(xué)說》章節(jié)自測(1-23)試題及答案
- 2024年度年福建省考評員考試題庫附答案(基礎(chǔ)題)
- 2024年威士忌酒相關(guān)公司行業(yè)營銷方案
評論
0/150
提交評論