超級(jí)瑪麗、魂斗羅、坦克大戰(zhàn)、冒險(xiǎn)島……提到這些游戲,“80后”、"90后"滔滔不絕,掀起一波回憶殺。
最近不少媒體發(fā)文稱:“小霸王被申請(qǐng)破產(chǎn)”。其實(shí),不管有沒有破產(chǎn),小霸王終究只能成為童年回憶了,它的落寞是不爭(zhēng)的事實(shí),曾風(fēng)靡全國(guó)的光輝再也回不去了。
今天我來(lái)用 Python 制作一個(gè)曾經(jīng)標(biāo)志性的游戲:「貪吃蛇」。學(xué)習(xí)和趣味兩不耽誤的coding。讓我們開始構(gòu)建游戲吧。
導(dǎo)入庫(kù)
首先,我們需要將庫(kù)導(dǎo)入到代碼中,這些代碼將用于構(gòu)建游戲。我們需要下面的庫(kù)來(lái)構(gòu)建和運(yùn)行我們的游戲。
import pygame import time import random
說(shuō)明如下:
-
pygame:此庫(kù)將幫助我們獲取所有圖形組件來(lái)構(gòu)建游戲。
-
random:這個(gè)庫(kù)將幫助我們?cè)谟螒蛑须S機(jī)位置生成食物。
-
time:這有助于我們?cè)谟螒蛑信c時(shí)間相關(guān)的功能,如蛇的速度。
啟動(dòng)游戲并設(shè)置圖形
現(xiàn)在,讓我們開始構(gòu)建游戲部分。我們將首先初始化游戲。
pygame.init()
我們?cè)谟螒蛑卸x了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)
接下來(lái),我們應(yīng)該定義游戲運(yùn)行的顯示的大小。將高度定義為 600px,寬度定義為 800px。
width = 800 height = 600
接下來(lái),我們將使用定義游戲標(biāo)題的游戲名稱。
dis = pygame.display.set_mode((width, height)) pygame.display.set_caption("Snake Game")
定義游戲中使用的變量
現(xiàn)在我們將初始化時(shí)鐘變量,該變量將使用我們之前導(dǎo)入的時(shí)間包。
clock = pygame.time.Clock()
定義我們的蛇的速度,以及蛇塊的大小。
snake_block = 10 snake_speed = 12
接下來(lái),我們定義字體大小和字體樣式,用于顯示分?jǐn)?shù)。
font_style = pygame.font.SysFont(“bahnschrift”, 25) score_font = pygame.font.SysFont(“comicsansms”, 35)
定義幫助器函數(shù)
在這里,我們需要定義三個(gè)幫助器函數(shù),用于以下目的:用于顯示分?jǐn)?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ùn)行并通過(guò)鍵盤響應(yīng)用戶輸入。
我們首先定義兩個(gè)布爾變量:game_over和game_close。他們將描述游戲狀態(tài)。
第一個(gè)會(huì)告訴游戲是否結(jié)束。下一個(gè)變量定義游戲是否關(guān)閉,我們需要再次玩游戲。我們把兩者定義為假。
game_over = False game_close = False
下一步,我們的目標(biāo)是定義游戲中需要的其他變量。
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
接下來(lái),我們將啟動(dòng)一個(gè)循環(huán),該循環(huán)將game_over變?yōu)門rue。
在該循環(huán)中,我們將首先定義要執(zhí)行的指令,以防game_close為 True。
下面是代碼,這將有助于我們解決這種情況時(shí),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條件后,我們接下來(lái)將定義所有必需的步驟,這些步驟將允許我們的蛇通過(guò)用戶的輸入移動(dòng)。我們將接受 W, A, S, D 和向上, 向下, 左右鍵組合玩游戲。您可以自由選擇您選擇的鍵來(lái)玩游戲。
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
接下來(lái),我們將定義輸?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ù),以顯示更新的蛇和玩家的分?jǐn)?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()`
接下來(lái),我們將蛇速作為時(shí)鐘的參數(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)完成了貪吃蛇游戲。
點(diǎn)擊下方安全鏈接前往獲取
CSDN大禮包:《Python入門&進(jìn)階學(xué)習(xí)資源包》免費(fèi)分享文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-841587.html
??Python實(shí)戰(zhàn)案例??
光學(xué)理論是沒用的,要學(xué)會(huì)跟著一起敲,要?jiǎng)邮謱?shí)操,才能將自己的所學(xué)運(yùn)用到實(shí)際當(dāng)中去,這時(shí)候可以搞點(diǎn)實(shí)戰(zhàn)案例來(lái)學(xué)習(xí)。
??Python書籍和視頻合集??
觀看零基礎(chǔ)學(xué)習(xí)視頻,看視頻學(xué)習(xí)是最快捷也是最有效果的方式,跟著視頻中老師的思路,從基礎(chǔ)到深入,還是很容易入門的。
??Python副業(yè)創(chuàng)收路線??
這些資料都是非常不錯(cuò)的,朋友們?nèi)绻行枰禤ython學(xué)習(xí)路線&學(xué)習(xí)資料》,點(diǎn)擊下方安全鏈接前往獲取
CSDN大禮包:《Python入門&進(jìn)階學(xué)習(xí)資源包》免費(fèi)分享
本文轉(zhuǎn)自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系刪除。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-841587.html
到了這里,關(guān)于太好玩了!我用 Python 制作一款小游戲!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!