太好玩了!我用 Python 制作一款小游戲!
超級瑪麗、魂斗羅、坦克大戰(zhàn)、冒險島……提到這些游戲,"80后"、"90后"滔滔不絕,掀起一波回憶殺。
最近不少媒體發(fā)文稱:"小霸王被申請破產(chǎn)"。其實,不管有沒有破產(chǎn),小霸王終究只能成為童年回憶了,它的落寞是不爭的事實,曾風靡全國的光輝再也回不去了。

今天我來用 Python 制作一個曾經(jīng)標志性的游戲:「貪吃蛇」。學習和趣味兩不耽誤的coding。讓我們開始構(gòu)建游戲吧。
導入庫
首先,我們需要將庫導入到代碼中,這些代碼將用于構(gòu)建游戲。我們需要下面的庫來構(gòu)建和運行我們的游戲。
import?pygame
import?time
import?random
說明如下:
pygame:此庫將幫助我們獲取所有圖形組件來構(gòu)建游戲。 random:這個庫將幫助我們在游戲中隨機位置生成食物。 time:這有助于我們在游戲中與時間相關(guān)的功能,如蛇的速度。
啟動游戲并設(shè)置圖形
現(xiàn)在,讓我們開始構(gòu)建游戲部分。我們將首先初始化游戲。
pygame.init()
我們在游戲中定義了6種顏色。
white?=?(255,?255,?255)
yellow?=?(255,?255,?102)
black?=?(0,?0,?0)
red?=?(213,?50,?80)
green?=?(0,?255,?0)
blue?=?(50,?153,?213)
接下來,我們應(yīng)該定義游戲運行的顯示的大小。將高度定義為 600px,寬度定義為 800px。
width?=?800
height?=?600
接下來,我們將使用定義游戲標題的游戲名稱。
dis?=?pygame.display.set_mode((width,?height))
pygame.display.set_caption("Snake?Game")
定義游戲中使用的變量
現(xiàn)在我們將初始化時鐘變量,該變量將使用我們之前導入的時間包。
clock?=?pygame.time.Clock()
定義我們的蛇的速度,以及蛇塊的大小。
snake_block?=?10
snake_speed?=?12
接下來,我們定義字體大小和字體樣式,用于顯示分數(shù)。
font_style?=?pygame.font.SysFont(“bahnschrift”,?25)
score_font?=?pygame.font.SysFont(“comicsansms”,?35)
定義幫助器函數(shù)
在這里,我們需要定義三個幫助器函數(shù),用于以下目的:用于顯示分數(shù)、處理蛇和處理游戲中其他相關(guān)信息的顯示。
def?Your_score(score):
????value?=?score_font.render("Your?Score:?"?+?str(score),?True,?yellow)
????dis.blit(value,?[0,?0]
????
def?our_snake(snake_block,?snake_list):
???for?x?in?snake_list:
???pygame.draw.rect(dis,?black,?[x[0],?x[1],?snake_block,?snake_block])
?
def?message(msg,?colour):
???mesg?=?font_style.render(msg,?True,?colour)
???dis.blit(mesg,?[width?/?6,?height?/?3])
構(gòu)建游戲循環(huán)
現(xiàn)在,我們開始構(gòu)建游戲的組件,使其運行并通過鍵盤響應(yīng)用戶輸入。
我們首先定義兩個布爾變量:game_over和game_close。他們將描述游戲狀態(tài)。
第一個會告訴游戲是否結(jié)束。下一個變量定義游戲是否關(guān)閉,我們需要再次玩游戲。我們把兩者定義為假。
game_over?=?False
game_close?=?False
下一步,我們的目標是定義游戲中需要的其他變量。
x1?=?width?/?2
y1?=?height?/?2
x1_change?=?0
y1_change?=?0
snake_List?=?[]
snake_length?=?1
foodx?=?round(random.randrange(0,?width?—?snake_block)?/?10.0)?*?10.0
foody?=?round(random.randrange(0,?height?—?snake_block)?/?10.0)?*?10.0
接下來,我們將啟動一個循環(huán),該循環(huán)將game_over變?yōu)門rue。
在該循環(huán)中,我們將首先定義要執(zhí)行的指令,以防game_close為 True。
下面是代碼,這將有助于我們解決這種情況時,game_close等于真。
while?game_close?==?True:
?dis.fill(blue)
?message(“Oops!?Your?snake?died!?Press?P?to?play?again?or?Q?to?quit”,?red)
?Your_score(snake_length?—?1)
?pygame.display.update()
?
?for?event?in?pygame.event.get():
???if?event.type?==?pygame.KEYDOWN:
?????if?event.key?==?pygame.K_q:
???????game_over?=?True
???????game_close?=?False
?????if?event.key?==?pygame.K_p:
???????gameLoop()
現(xiàn)在,在處理game_close條件后,我們接下來將定義所有必需的步驟,這些步驟將允許我們的蛇通過用戶的輸入移動。我們將接受 W, A, S, D 和向上, 向下, 左右鍵組合玩游戲。您可以自由選擇您選擇的鍵來玩游戲。
for?event?in?pygame.event.get():
?if?event.type?==?pygame.QUIT:
???game_over?=?True
?if?event.type?==?pygame.KEYDOWN:
???if?event.key?==?pygame.K_LEFT?or?event.key?==?pygame.K_a:
?????x1_change?=?-snake_block
?????y1_change?=?0
???elif?event.key?==?pygame.K_RIGHT?or?event.key?==?pygame.K_d:
?????x1_change?=?snake_block
?????y1_change?=?0
???elif?event.key?==?pygame.K_UP?or?event.key?==?pygame.K_w:
?????y1_change?=?-snake_block
?????x1_change?=?0
???elif?event.key?==?pygame.K_DOWN?or?event.key?==?pygame.K_s:
?????y1_change?=?snake_block
?????x1_change?=?0
接下來,我們將定義輸?shù)舯荣惖臈l件。
?if?x1?>=?width?or?x1?0?or?y1?>=?height?or?y1?0:
????game_close?=?True
?x1?+=?x1_change
?y1?+=?y1_change
?dis.fill(blue)
?pygame.draw.rect(dis,?green,?[foodx,?foody,?snake_block,?snake_block])
然后,我們調(diào)用our_snake Your_score(定義在之前),并傳遞給這些函數(shù)所需的參數(shù),以顯示更新的蛇和玩家的分數(shù)。
?snake_Head?=?[]
?snake_Head.append(x1)
?snake_Head.append(y1)
?snake_List.append(snake_Head)
?if?len(snake_List)?>?snake_length:
???del?snake_List[0]
?
?for?x?in?snake_List[:-1]:
???if?x?==?snake_Head:
?????game_close?=?True
?
?our_snake(snake_block,?snake_List)
?Your_score(snake_length?—?1)
?
?pygame.display.update()
接下來,我們將蛇速作為時鐘的參數(shù)。
if?x1?==?foodx?and?y1?==?foody:
??foodx?=?round(random.randrange(0,?width?—?snake_block)?/?10.0)?*?10.0
??foody?=?round(random.randrange(0,?height?—?snake_block)?/?10.0)?*?10.0
??snake_length?+=?1
?
clock.tick(snake_speed)
我們的游戲快結(jié)束了。最后一步,我們需要退出游戲,并再次調(diào)用游戲循環(huán)。
??pygame.quit()
??quit()
gameLoop()
我們已經(jīng)完成了貪吃蛇游戲。完整版貪吃蛇游戲代碼如下。
領(lǐng)取方式:
長按掃碼,發(fā)消息?[貪吃蛇]
