一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

用python寫一個(gè)簡(jiǎn)單的貪吃蛇游戲

 編程教室 2021-03-18

不知道有多少同學(xué)跟我一樣,最初接觸編程的動(dòng)機(jī)就是為了自己做個(gè)游戲玩?

Python 雖然并不是一個(gè)“為游戲而生”的語(yǔ)言,但也有著自己的游戲引擎。最常用的就是 pygame。另外還有一個(gè)知名游戲引擎 cocos2d,它的最初版本就是基于 python 的 cocos2d-python。這兩個(gè)引擎我們都有過案例,其中 pygame 更是做過一個(gè)較為詳盡的入門教程 --《打飛機(jī)》小游戲,鏈接見文末。

今天要給大家分享的是一個(gè) pygame 寫的“貪吃蛇”小游戲:

“貪吃蛇”這個(gè)小游戲在編程學(xué)習(xí)中的???,因?yàn)椋?/span>

1. 簡(jiǎn)單,最基本的游戲元素只需要蛇和食物兩個(gè)就可以進(jìn)行了。(打飛機(jī)還需要三個(gè)元素呢,想想分別是什么?)方向的話只要上下左右4個(gè)固定方向就可以了。

2. 有基本的數(shù)據(jù)結(jié)構(gòu)面向?qū)ο?/strong>的思想在其中。游戲開發(fā)本身就會(huì)用到很多面向?qū)ο蟮母拍睿叩纳眢w又是一個(gè)天然的“鏈表”結(jié)構(gòu),太適合用來(lái)練習(xí)數(shù)據(jù)結(jié)構(gòu)了。

另外比較有趣的一點(diǎn)是,Python 這個(gè)單詞在英語(yǔ)里就是蟒蛇的意思,貪吃蛇可以算是“同名游戲”了。

很多學(xué)校里程序開發(fā)課程的作業(yè)都會(huì)有貪吃蛇的選題,也經(jīng)常會(huì)有同學(xué)問到我們相關(guān)的代碼。(諾基亞手機(jī)對(duì)這款游戲也是情有獨(dú)鐘。)之前我做過一個(gè)《貪吃蛇大作戰(zhàn)》的 Python 版本,基于 cocos2d-python 開發(fā)。但那個(gè)對(duì)于初學(xué)者來(lái)說有些復(fù)雜了。這次是由我們的助教 @清風(fēng)小筑 開發(fā)的一個(gè)更加適合初學(xué)者學(xué)習(xí)的簡(jiǎn)易版本。

對(duì)于整個(gè)開發(fā)過程及代碼的詳細(xì)說明,我們都寫在了文檔里,一并上傳了 github。需要的同學(xué)可自行下載練習(xí),可嘗試更改蛇的速度、顏色,添加多個(gè)食物等。(獲取地址請(qǐng)?jiān)诠娞?hào) Crossin的編程教室 里回復(fù)關(guān)鍵字 貪吃蛇

這里我們做個(gè)簡(jiǎn)要介紹:

此代碼基于 pygame 開發(fā),所以運(yùn)行前請(qǐng)確保你的 Python 里已成功安裝 pygame。然后直接運(yùn)行代碼中的 mySnake.py 即可開始游戲。

除了最終的代碼外,我們還特意分解了幾個(gè)過程中的 py 文件,供想要自己開發(fā)的同學(xué)參考。

開發(fā)思路

游戲開發(fā)通常都會(huì)采用面向?qū)ο?/strong>的設(shè)計(jì)。這里我們有三個(gè)類:、食物,另外還有背景(用來(lái)繪制格子)。

游戲的主循環(huán)里主要依次做這么幾件事:

  1. 獲取鍵盤事件

  2. 繪制背景

  3. 更新蛇的位置 

  4. 畫蛇、食物

  5. 碰撞檢測(cè)

  6. 屏幕刷新

蛇和食物的繪制都是通過 pygame 里的 Surface 對(duì)象實(shí)現(xiàn),繪制不同顏色的格子。

蛇的身體使用 Rect 對(duì)象,通過 list 保存。

蛇的移動(dòng)是這個(gè)游戲的核心操作。我們沒有選擇修改蛇的位置,而是每次移動(dòng)時(shí),根據(jù)蛇的前進(jìn)方向增加一個(gè)頭部節(jié)點(diǎn),其余位置都向前移動(dòng)一個(gè)節(jié)點(diǎn),并刪除尾端節(jié)點(diǎn),這樣就等于實(shí)現(xiàn)了蛇的移動(dòng)。如果是吃到了食物,就在尾部再加上節(jié)點(diǎn),就實(shí)現(xiàn)了增長(zhǎng)。

游戲中要做碰撞檢測(cè),這個(gè)用 pygame 的 colliderect 就行。我們要判斷:1.撞墻了沒?2.撞自己了沒?3.撞到食物了沒?然后分別做不同的處理

游戲主循環(huán)的核心代碼:

while going: lastt = clock.tick(60) # 幀率 60 dt += lastt # 累計(jì)時(shí)間 c += 1 # 0 鍵盤按壓等事件響應(yīng) for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == KEYDOWN: if event.key == K_UP and validDirect != 0: direct = 1 # 按了向上 1 并且當(dāng)前方向不是向下 0 ,則向上 elif event.key == K_DOWN and validDirect != 1: direct = 0 # 向上 1 ,向下 0 elif event.key == K_LEFT and validDirect != 2: direct = 3 # 向左 3, 向右 2            elif event.key == K_RIGHT and validDirect != 3: direct = 2  # 0.1 畫全屏的黑色背景 screen.fill(black) # 1 判斷是否移動(dòng) if dt > interval: # 移動(dòng)的時(shí)間間隔 validDirect = direct dt = 0 # 初始化時(shí)間 endPop = s.move(snake,direct) # 1.1 畫蛇 for i in snake:        screen.blit(s.ball, i) # 2 畫線條 b.drawGrid(screen) # 3.1 分?jǐn)?shù)更新 scoret=b.scoref.render(str(score), True, (255, 255, 255)) # 實(shí)時(shí)得分 screen.blit(scoret, (0, 0)) # 實(shí)時(shí)分?jǐn)?shù) scoret2=b.scoref.render('best:'+str(best), True, (255, 255, 255)) # 最佳得分 screen.blit(scoret2, (width-6*edge, 0)) # 最佳分?jǐn)?shù) # 3.2 食物 screen.blit(f.food, foodr) # 根據(jù) fr(Rect 對(duì)象) 更新 food(Surface 對(duì)象) 位置 ,繪圖 # 4 判斷撞擊 clli = s.strike(snake,foodr) if clli == 0: # 撞墻 撞自己 going = False elif clli == 1: # 吃果實(shí) snake.append(endPop) # 長(zhǎng)尾巴 score += 1 if not f.get_foodpos(foodr,snake): going = False # 生成 food 新位置, 如果占滿全屏,則退出 # 5 屏幕刷新 pygame.display.flip() # 顯示圖形

完整代碼和詳細(xì)說明比較長(zhǎng),就不都貼在這里了,大家可以下載項(xiàng)目到本地后查看及運(yùn)行。獲取項(xiàng)目地址請(qǐng)?jiān)诠娞?hào) Crossin的編程教室 里回復(fù)關(guān)鍵字 貪吃蛇

文中代碼由 清風(fēng)小筑 完成,碼上行動(dòng)的學(xué)員如有問題可直接在答疑群中找他討論。

還有之前的兩篇相關(guān)文章供參考:

爆款游戲《貪吃蛇大作戰(zhàn)》的 Python 實(shí)現(xiàn)

【Pygame 第1課】 hello pygame(回復(fù)關(guān)鍵詞game查看此系列文章)

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲欧美精品伊人久久| 日本加勒比系列在线播放| 大香蕉久草网一区二区三区| 日本高清中文精品在线不卡| 99国产高清不卡视频| 中文字幕亚洲人妻在线视频| 欧美黄色黑人一区二区| 欧美人妻免费一区二区三区| 色老汉在线视频免费亚欧| 热久久这里只有精品视频| 国产色第一区不卡高清| 国产精品日韩精品一区| 国产精品久久熟女吞精| 色婷婷成人精品综合一区| 精品一区二区三区人妻视频| 欧洲日本亚洲一区二区| 日韩aa一区二区三区| 免费观看一区二区三区黄片| 亚洲中文字幕视频一区二区| 色综合视频一区二区观看| 亚洲黄色在线观看免费高清| 亚洲欧洲成人精品香蕉网| 国产日韩欧美专区一区| 欧美性猛交内射老熟妇| 成人三级视频在线观看不卡| 亚洲综合激情另类专区老铁性| 国产内射在线激情一区| 国产毛片不卡视频在线| 欧洲亚洲精品自拍偷拍| 亚洲精品黄色片中文字幕| 成在线人免费视频一区二区| 草草草草在线观看视频| 一区二区三区日韩中文| 亚洲一区二区亚洲日本| 国产精品蜜桃久久一区二区| 亚洲伦片免费偷拍一区| 91精品国产综合久久不卡| 久久国产人妻一区二区免费| 亚洲中文字幕剧情在线播放| 99国产成人免费一区二区| 日韩在线一区中文字幕|