<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用python寫一個簡單的貪吃蛇游戲

          共 4191字,需瀏覽 9分鐘

           ·

          2023-08-16 14:20

          入門教程、案例源碼、學習資料、讀者群

          請訪問: python666.cn

          大家好,歡迎來到 Crossin的編程教室 !


          不知道有多少同學跟我一樣,最初接觸編程的動機就是為了自己做個游戲玩?


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


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



          “貪吃蛇”這個小游戲在編程學習中的常客,因為:


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

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


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

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


          對于整個開發(fā)過程及代碼的詳細說明,我們都寫在了文檔里,一并上傳了 github。需要的同學可自行下載練習,可嘗試更改蛇的速度、顏色,添加多個食物等。(獲取地址請在公眾號 Crossin的編程教室 里回復關鍵字 貪吃蛇


          這里我們做個簡要介紹:


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


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


          開發(fā)思路


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


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

          1. 獲取鍵盤事件

          2. 繪制背景

          3. 更新蛇的位置 

          4. 畫蛇、食物

          5. 碰撞檢測

          6. 屏幕刷新


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


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


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


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

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

          while going:    lastt = clock.tick(60) # 幀率 60    dt += lastt # 累計時間    c += 1    # 0 鍵盤按壓等事件響應    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 并且當前方向不是向下 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 判斷是否移動    if dt > interval: # 移動的時間間隔        validDirect = direct        dt = 0 # 初始化時間        endPop = s.move(snake,direct)    # 1.1 畫蛇    for i in snake:        screen.blit(s.ball, i)    # 2 畫線條    b.drawGrid(screen)    # 3.1 分數(shù)更新    scoret=b.scoref.render(str(score), True, (255, 255, 255)) # 實時得分    screen.blit(scoret, (0, 0)) # 實時分數(shù)    scoret2=b.scoref.render('best:'+str(best), True, (255, 255, 255)) # 最佳得分    screen.blit(scoret2, (width-6*edge, 0)) # 最佳分數(shù)    # 3.2 食物    screen.blit(f.food, foodr) # 根據(jù) fr(Rect 對象) 更新 food(Surface 對象) 位置 ,繪圖    # 4 判斷撞擊    clli = s.strike(snake,foodr)    if clli == 0: # 撞墻 撞自己        going = False    elif clli == 1: # 吃果實        snake.append(endPop) # 長尾巴        score += 1        if not f.get_foodpos(foodr,snake): going = False # 生成 food 新位置, 如果占滿全屏,則退出    # 5 屏幕刷新    pygame.display.flip() # 顯示圖形

          完整代碼和詳細說明比較長,就不都貼在這里了,大家可以下載項目到本地后查看及運行。獲取項目地址請在公眾號 Crossin的編程教室 里回復關鍵字 貪吃蛇

              

          碼上行動的學員如有問題可直接在答疑群中討論。

          文中代碼由 清風小筑 完成。

              

          還有之前的兩篇相關文章供參考:

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

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




          Crossin的第2本書碼上行動:利用Python與ChatGPT高效搞定Excel數(shù)據(jù)分析已經(jīng)上市了

          點此查看上一本《碼上行動:零基礎學會Python編程》介紹

          本書從 Python 和 Excel 結合使用的角度講解處理分析數(shù)據(jù)的思路、方法與實戰(zhàn)應用。不論是希望從事數(shù)據(jù)分析崗位的學習者,還是其他職業(yè)的辦公人員,都可以通過本書的學習掌握 Python 分析數(shù)據(jù)的技能。書中創(chuàng)新性地將 ChatGPT 引入到教學當中,用 ChatGPT 答疑并提供實訓代碼,并介紹了使用 ChatGPT 輔助學習的一些實用技巧,給學習者帶來全新的學習方式。


          公眾號的讀者朋友們購買后可在后臺聯(lián)系我,加入讀者交流群,Crossin會為你開啟陪讀模式,解答你在閱讀本書時的一切疑問。


          感謝轉發(fā)點贊的各位~

          _往期文章推薦_

          像對象一樣對待數(shù)據(jù)




          如需了解付費精品課程教學答疑服務
          請在Crossin的編程教室內(nèi)回復: 666

          瀏覽 1065
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                    <th id="afajh"><progress id="afajh"></progress></th>
                    精品无码在线视频 | 天天射天天日综合网 | 三级片香港三级片久久久 | AV性爱在线观看 | 大肠浣肠调教一区二区三区在线 |