目錄
game_functions.py
game_functions.py
game_functions.py
alien_invasion.py
14.4 小結(jié)
第15 章
生成數(shù)據(jù)
15.1 安裝 matplotlib
15.1.1 在 Linux 系統(tǒng)中安裝 matplotlib
15.1.2 在 OS X 系統(tǒng)中安裝 matplotlib
注意
15.1.3 在 Windows 系統(tǒng)中安裝 matplotlib
注意
15.1.4 測(cè)試 matplotlib
注意
15.1.5 matplotlib 畫廊
15.2 繪制簡(jiǎn)單的折線圖
mpl_squares.py
15.2.1 修改標(biāo)簽文字和線條粗細(xì)
mpl_squares.py
15.2.2 校正圖形
mpl_squares.py
?
為在屏幕上顯示飛船,我們對(duì)編組調(diào)用了draw()。Pygame將繪制每艘飛船。 為在游戲開(kāi)始時(shí)讓玩家知道他有多少艘飛船,我們?cè)陂_(kāi)始新游戲時(shí)調(diào)用prep_ships()。這是 在game_functions.py的check_play_button()中進(jìn)行的:
game_functions.py
def check_play_button(ai_settings, screen, stats, sb, play_button, ship,
aliens, bullets, mouse_x, mouse_y):
"""在玩家單擊Play按鈕時(shí)開(kāi)始新游戲"""
button_clicked = play_button.rect.collidepoint(mouse_x, mouse_y)
if button_clicked and not stats.game_active:
--snip--
# 重置記分牌圖像
sb.prep_score()
sb.prep_high_score()
sb.prep_level()
sb.prep_ships()
--snip--
我們還在飛船被外星人撞到時(shí)調(diào)用prep_ships(),從而在玩家損失一艘飛船時(shí)更新飛船圖像:
game_functions.py
1 def update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets):
--snip--
# 檢測(cè)外星人和飛船之間的碰撞
if pygame.sprite.spritecollideany(ship, aliens):
2 ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets)
# 檢查是否有外星人抵達(dá)屏幕底端
3 check_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets)
4 def ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets):
"""響應(yīng)被外星人撞到的飛船"""
if stats.ships_left > 0:
# 將ships_left減1
stats.ships_left -= 1
# 更新記分牌
5 sb.prep_ships()
# 清空外星人列表和子彈列表
--snip--
首先,我們?cè)趗pdate_aliens()的定義中添加了形參sb(見(jiàn)1)。然后,我們向ship_hit()(見(jiàn) 2)和check_aliens_bottom()(見(jiàn)3)都傳遞了sb,讓它們都能夠訪問(wèn)記分牌對(duì)象。 接下來(lái),我們更新了ship_hit()的定義,使其包含形參sb(見(jiàn)4)。我們?cè)趯hips_left的值 減1后調(diào)用了prep_ships()(見(jiàn)5),這樣每次損失了飛船時(shí),顯示的飛船數(shù)都是正確的。 在check_aliens_bottom()中需要調(diào)用ship_hit(),因此對(duì)這個(gè)函數(shù)進(jìn)行更新:
game_functions.py
def check_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens,
bullets):
"""檢查是否有外星人抵達(dá)屏幕底端"""
screen_rect = screen.get_rect()
for alien in aliens.sprites():
if alien.rect.bottom >= screen_rect.bottom:
# 像飛船被外星人撞到一樣處理
ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets)
break
現(xiàn)在,check_aliens_bottom()包含形參sb,并在調(diào)用ship_hit()時(shí)傳遞了實(shí)參sb。 最后,在alien_invasion.py中修改調(diào)用update_aliens()的代碼,向它傳遞實(shí)參sb:
alien_invasion.py
# 開(kāi)始游戲主循環(huán)
while True:
--snip--
if stats.game_active:
ship.update()
gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens,
bullets)
gf.update_aliens(ai_settings, screen, stats, sb, ship, aliens,
bullets)
--snip--
圖14-6顯示了完整的記分系統(tǒng),它在屏幕左上角指出了還余下多少艘飛船。
14.4 小結(jié)
在本章中,你學(xué)習(xí)了如何創(chuàng)建用于開(kāi)始新游戲的Play按鈕,如何檢測(cè)鼠標(biāo)事件,以及在游戲 處于活動(dòng)狀態(tài)時(shí)如何隱藏光標(biāo)。你可以利用學(xué)到的知識(shí)在游戲中創(chuàng)建其他按鈕,如用于顯示玩法 說(shuō)明的Help按鈕。你還學(xué)習(xí)了如何隨游戲的進(jìn)行調(diào)整其節(jié)奏,如何實(shí)現(xiàn)記分系統(tǒng),以及如何以文 本和非文本方式顯示信息。
第15 章
生成數(shù)據(jù)
15.1 安裝 matplotlib
首先,需要安裝matplotlib,我們將使用它來(lái)制作開(kāi)始的幾個(gè)圖表。如果你還未使用過(guò)pip, 請(qǐng)參閱12.2.1節(jié)。
15.1.1 在 Linux 系統(tǒng)中安裝 matplotlib
如果你使用的是系統(tǒng)自帶的Python版本,可使用系統(tǒng)的包管理器來(lái)安裝matplotlib,為此只需 執(zhí)行一行命令:
$ sudo apt-get install python3-matplotlib
如果你使用的是Python 2.7,請(qǐng)執(zhí)行如下命令:
$ sudo apt-get install python-matplotlib
如果你安裝了較新的Python版本,就必須安裝matplotlib依賴的一些庫(kù):
$ sudo apt-get install python3.5-dev python3.5-tk tk-dev
$ sudo apt-get install libfreetype6-dev g++
再使用pip來(lái)安裝matplotlib:
$ pip install --user matplotlib
15.1.2 在 OS X 系統(tǒng)中安裝 matplotlib
Apple的標(biāo)準(zhǔn)Python安裝自帶了matplotlib。要檢查系統(tǒng)是否安裝了matplotlib,可打開(kāi)一個(gè)終 端會(huì)話并嘗試導(dǎo)入matplotlib。如果系統(tǒng)沒(méi)有自帶matplotlib,且你的Python是使用Homebrew安裝 的,則可以像下面這樣安裝matplotlib:
$ pip install --user matplotlib
注意
安裝包時(shí)可能需要使用pip3,而不是pip。另外,如果這個(gè)命令不管用,你可能需要?jiǎng)h除 標(biāo)志--user。
15.1.3 在 Windows 系統(tǒng)中安裝 matplotlib
在Windows系統(tǒng)中,首先需要安裝Visual Studio。為此,請(qǐng)?jiān)L問(wèn)https://dev.windows.com/,單 擊Downloads,再查找Visual Studio Community——一組免費(fèi)的Windows開(kāi)發(fā)工具。請(qǐng)下載并運(yùn)行 該安裝程序。 接下來(lái),需要下載matplotlib安裝程序。為此,請(qǐng)?jiān)L問(wèn)https://pypi.python.org/pypi/matplotlib/, 并查找與你使用的Python版本匹配的wheel文件(擴(kuò)展名為.whl的文件)。例如,如果你使用的是 32位的Python 3.5,則需要下載matplotlib-1.4.3-cp35-none-win32.whl。
注意
如果找不到與你安裝的Python版本匹配的文件,請(qǐng)去http://www.lfd.uci.edu/-gohlke/ pythonlibs/#matplotlib看看,這個(gè)網(wǎng)站發(fā)布安裝程序的時(shí)間通常比matplotlib官網(wǎng)早些。
將這個(gè).whl文件復(fù)制到你的項(xiàng)目文件夾,打開(kāi)一個(gè)命令窗口,并切換到該項(xiàng)目文件夾,再使 用pip來(lái)安裝matplotlib:
> cd python_work
python_work> python -m pip install --user matplotlib-1.4.3-cp35-none-win32.whl
15.1.4 測(cè)試 matplotlib
安裝必要的包后,對(duì)安裝進(jìn)行測(cè)試。為此,首先使用命令python或python3啟動(dòng)一個(gè)終端會(huì) 話,再嘗試導(dǎo)入matplotlib:
$ python3
>>> import matplotlib
>>>
如果沒(méi)有出現(xiàn)任何錯(cuò)誤消息,就說(shuō)明你的系統(tǒng)安裝了matplotlib,可以接著閱讀下一節(jié)。
注意
如果你在安裝過(guò)程中遇到了麻煩,請(qǐng)參閱附錄C。如果依然無(wú)濟(jì)于事,請(qǐng)向他人尋求幫助。 對(duì)于你遇到的問(wèn)題,只要向經(jīng)驗(yàn)豐富的Python程序員提供少量的信息,他們很可能很快 就能幫你解決。
import matplotlib.pyplot as plt
squares = [1, 4, 9, 16, 25]
plt.plot(squares)
plt.show()
15.1.5 matplotlib 畫廊
要查看使用matplotlib可制作的各種圖表,請(qǐng)?jiān)L問(wèn)http://matplotlib.org/的示例畫廊。單擊畫廊 中的圖表,就可查看用于生成圖表的代碼。
15.2 繪制簡(jiǎn)單的折線圖
下面來(lái)使用matplotlib繪制一個(gè)簡(jiǎn)單的折線圖,再對(duì)其進(jìn)行定制,以實(shí)現(xiàn)信息更豐富的數(shù)據(jù)可 視化。我們將使用平方數(shù)序列1、4、9、16和25來(lái)繪制這個(gè)圖表。 只需向matplotlib提供如下數(shù)字,matplotlib就能完成其他的工作:
mpl_squares.py
我們首先導(dǎo)入了模塊pyplot,并給它指定了別名plt,以免反復(fù)輸入pyplot。在線示例大都這 樣做,因此這里也這樣做。模塊pyplot包含很多用于生成圖表的函數(shù)。
我們創(chuàng)建了一個(gè)列表,在其中存儲(chǔ)了前述平方數(shù),再將這個(gè)列表傳遞給函數(shù)plot(),這個(gè)函 數(shù)嘗試根據(jù)這些數(shù)字繪制出有意義的圖形。plt.show()打開(kāi)matplotlib查看器,并顯示繪制的圖形, 如圖15-1所示。查看器讓你能夠縮放和導(dǎo)航圖形,另外,單擊磁盤圖標(biāo)可將圖形保存起來(lái)。
15.2.1 修改標(biāo)簽文字和線條粗細(xì)
圖15-1所示的圖形表明數(shù)字是越來(lái)越大的,但標(biāo)簽文字太小,線條太細(xì)。所幸matplotlib讓你 能夠調(diào)整可視化的各個(gè)方面。 下面通過(guò)一些定制來(lái)改善這個(gè)圖形的可讀性,如下所示:
mpl_squares.py
import matplotlib.pyplot as plt
squares = [1, 4, 9, 16, 25]
1 plt.plot(squares, linewidth=5)
# 設(shè)置圖表標(biāo)題,并給坐標(biāo)軸加上標(biāo)簽
2 plt.title("Square Numbers", fontsize=24)
3 plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
# 設(shè)置刻度標(biāo)記的大小
4 plt.tick_params(axis='both', labelsize=14)
plt.show()
參數(shù)linewidth(見(jiàn)1)決定了plot()繪制的線條的粗細(xì)。函數(shù)title()(見(jiàn)2)給圖表指定標(biāo) 題。在上述代碼中,出現(xiàn)了多次的參數(shù)fontsize指定了圖表中文字的大小。
函數(shù)xlabel()和ylabel()讓你能夠?yàn)槊織l軸設(shè)置標(biāo)題(見(jiàn)3);而函數(shù)tick_params()設(shè)置刻度 的樣式(見(jiàn)4),其中指定的實(shí)參將影響x軸和y軸上的刻度(axes='both'),并將刻度標(biāo)記的字號(hào) 設(shè)置為14(labelsize=14)。 最終的圖表閱讀起來(lái)容易得多了,如圖15-2所示:標(biāo)簽文字更大,線條也更粗。
15.2.2 校正圖形
圖形更容易閱讀后,我們發(fā)現(xiàn)沒(méi)有正確地繪制數(shù)據(jù):折線圖的終點(diǎn)指出4.0的平方為25!下 面來(lái)修復(fù)這個(gè)問(wèn)題。 當(dāng)你向plot()提供一系列數(shù)字時(shí),它假設(shè)第一個(gè)數(shù)據(jù)點(diǎn)對(duì)應(yīng)的x坐標(biāo)值為0,但我們的第一個(gè) 點(diǎn)對(duì)應(yīng)的x值為1。為改變這種默認(rèn)行為,我們可以給plot()同時(shí)提供輸入值和輸出值:
mpl_squares.py
import matplotlib.pyplot as plt
input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]
plt.plot(input_values, squares, linewidth=5)
# 設(shè)置圖表標(biāo)題并給坐標(biāo)軸加上標(biāo)簽
--snip--
現(xiàn)在plot()將正確地繪制數(shù)據(jù),因?yàn)槲覀兺瑫r(shí)提供了輸入值和輸出值,它無(wú)需對(duì)輸出值的生 成方式作出假設(shè)。最終的圖形是正確的,如圖15-3所示。
使用plot()時(shí)可指定各種實(shí)參,還可使用眾多函數(shù)對(duì)圖形進(jìn)行定制。本章后面處理更有趣的 數(shù)據(jù)集時(shí),將繼續(xù)探索這些定制函數(shù)。
?
關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全37-CSDN博客
關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全25-CSDN博客文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-767847.html
關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全12-CSDN博客文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-767847.html
往期快速傳送門??(在文章最后):
感謝大家的支持!歡迎訂閱收藏!專欄將持續(xù)更新!
到了這里,關(guān)于關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全42的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!