使用Python寫(xiě)一個(gè)小游戲
引言
最近python語(yǔ)言大火,除了在科學(xué)計(jì)算領(lǐng)域python有用武之地之外,在游戲、后臺(tái)等方面,python也大放異彩,本篇博文將按照正規(guī)的項(xiàng)目開(kāi)發(fā)流程,手把手教大家寫(xiě)個(gè)python小游戲,來(lái)感受下其中的有趣之處。本次開(kāi)發(fā)的游戲叫做alien invasion。
安裝pygame并創(chuàng)建能左右移動(dòng)的飛船
安裝pygame
本人電腦是windows 10、python3.6,pygame下載地址: 傳送門(mén)
請(qǐng)自行下載對(duì)應(yīng)python版本的pygame 運(yùn)行以下命令
$ pip install wheel $ pip install pygame‑1.9.3‑cp36‑cp36m‑win_amd64.whl
創(chuàng)建Pygame窗口及響應(yīng)用戶(hù)輸入
新建一個(gè)文件夾alien_invasion,并在文件夾中新建alien_invasion.py文件,輸入如下代碼。
import sys
import pygame
def run_game():
#initialize game and create a dispaly object
pygame.init()
screen = pygame.display.set_mode((1200,800))
pygame.display.set_caption("Alien Invasion")
# set backgroud color
bg_color = (230,230,230)
# game loop
while True:
# supervise keyboard and mouse item
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# fill color
screen.fill(bg_color)
# visualiaze the window
pygame.display.flip()
run_game()
運(yùn)行上述代碼,我們可以得到一個(gè)灰色界面的窗口:
$ python alien_invasion.py

創(chuàng)建設(shè)置類(lèi)
為了在寫(xiě)游戲的過(guò)程中能便捷地創(chuàng)建一些新功能,下面額外編寫(xiě)一個(gè)settings模塊,其中包含一個(gè)Settings類(lèi),用于將所有設(shè)置存儲(chǔ)在一個(gè)地方。這樣在以后項(xiàng)目增大時(shí)修改游戲的外觀就更加容易。 我們首先將alien_invasion.py中的顯示屏大小及顯示屏顏色進(jìn)行修改。 首先在alien_invasion文件夾下新建python文件settings.py,并向其中添加如下代碼:
class Settings(object):
"""docstring for Settings"""
def __init__(self):
# initialize setting of game
# screen setting
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230,230,230)
然后再alien_invasion.py中導(dǎo)入Settings類(lèi),并使用相關(guān)設(shè)置,修改如下:
import sys
import pygame
from settings import Settings
def run_game():
#initialize game and create a dispaly object
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion")
# set backgroud color
bg_color = (230,230,230)
# game loop
while True:
# supervise keyboard and mouse item
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# fill color
screen.fill(ai_settings.bg_color)
# visualiaze the window
pygame.display.flip()
run_game()
添加飛船圖像
接下來(lái),我們需要將飛船加入游戲中。為了在屏幕上繪制玩家的飛船,我們將加載一幅圖像,再使用Pygame()方法blit()繪制它。 在游戲中幾乎可以使用各種類(lèi)型的圖像文件,但是使用位圖(.bmp)文件最為簡(jiǎn)單,這是因?yàn)镻ygame默認(rèn)加載位圖。雖然其他類(lèi)型的圖像也能加載,但是需要安裝額外的庫(kù)。我們推薦去免費(fèi)的圖片素材網(wǎng)站上去找圖像: 傳送門(mén) 。我們?cè)谥黜?xiàng)目文件夾(alien_invasion)中新建一個(gè)文件夾叫images,將如下bmp圖片放入其中。

接下來(lái),我們創(chuàng)建飛船類(lèi)ship.py:
import pygame
class Ship():
def __init__(self,screen):
#initialize spaceship and its location
self.screen = screen
# load bmp image and get rectangle
self.image = pygame.image.load('image/ship.bmp')
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
#put spaceship on the bottom of window
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
def blitme(self):
#buld the spaceship at the specific location
self.screen.blit(self.image,self.rect)
最后我們?cè)谄聊簧侠L制飛船,即在alien_invasion.py文件中調(diào)用blitme方法:
import sys
import pygame
from settings import Settings
from ship import Settings
def run_game():
#initialize game and create a dispaly object
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
ship = Ship(screen)
pygame.display.set_caption("Alien Invasion")
# set backgroud color
bg_color = (230,230,230)
# game loop
while True:
# supervise keyboard and mouse item
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# fill color
screen.fill(ai_settings.bg_color)
ship.blitme()
# visualiaze the window
pygame.display.flip()
run_game()
重構(gòu):模塊game_functions
在大型項(xiàng)目中,經(jīng)常需要在添加新代碼前重構(gòu)既有代碼。重構(gòu)的目的是為了簡(jiǎn)化代碼的結(jié)構(gòu),使其更加容易擴(kuò)展。我們將實(shí)現(xiàn)一個(gè)game_functions模塊,它將存儲(chǔ)大量讓游戲Alien invasion運(yùn)行的函數(shù)。通過(guò)創(chuàng)建模塊game_functions,可避免alien_invasion.py太長(zhǎng),使其邏輯更容易理解。
函數(shù)check_events()
首先我們將管理事件的代碼移到一個(gè)名為check_events()的函數(shù)中,目的是為了隔離事件循環(huán)
import sys
import pygame
def check_events():
#respond to keyboard and mouse item
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
然后我們修改alien_invasion.py代碼,導(dǎo)入game_functions模塊,并將事件循環(huán)替換成對(duì)函數(shù)check_events()的調(diào)用:
import sys import pygame from settings import Settings from ship import Ship import game_functions as gf def run_game(): #initialize game and create a dispaly object pygame.init() ai_settings = Settings()
總結(jié)
以上所述是小編給大家介紹的Python寫(xiě)一個(gè)小游戲,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Python導(dǎo)入數(shù)值型Excel數(shù)據(jù)并生成矩陣操作
這篇文章主要介紹了Python導(dǎo)入數(shù)值型Excel數(shù)據(jù)并生成矩陣操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
把Anaconda中的環(huán)境導(dǎo)入到Pycharm里面的方法步驟
這篇文章主要介紹了把Anaconda中的環(huán)境導(dǎo)入到Pycharm里面的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
python 識(shí)別登錄驗(yàn)證碼圖片功能的實(shí)現(xiàn)代碼(完整代碼)
這篇文章主要介紹了python 識(shí)別登錄驗(yàn)證碼圖片功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Python字符串的常見(jiàn)操作實(shí)例小結(jié)
這篇文章主要介紹了Python字符串的常見(jiàn)操作,結(jié)合實(shí)例形式總結(jié)分析了Python字符串的查詢(xún)、轉(zhuǎn)換、分割、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下2019-04-04
python3下實(shí)現(xiàn)搜狗AI API的代碼示例
這篇文章主要介紹了python3下實(shí)現(xiàn)搜狗AI API的代碼示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Python中reduce()函數(shù)的用法詳細(xì)解讀
這篇文章主要介紹了Python中reduce()函數(shù)的用法詳細(xì)解讀,reduce函數(shù)是通過(guò)函數(shù)對(duì)迭代器對(duì)象中的元素進(jìn)行遍歷操作,但需要注意的是?reduce?函數(shù)返回的是計(jì)算的結(jié)果,而?map/filter?返回的是作用后的迭代器對(duì)象,需要的朋友可以參考下2023-08-08
Python的flask接收前臺(tái)的ajax的post數(shù)據(jù)和get數(shù)據(jù)的方法
這篇文章主要介紹了Python的flask接收前臺(tái)的ajax的post數(shù)據(jù)和get數(shù)據(jù)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
python標(biāo)識(shí)符命名規(guī)范原理解析
這篇文章主要介紹了python標(biāo)識(shí)符命名規(guī)范原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01

