<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>

          一個(gè)高質(zhì)量Python俄羅斯方塊項(xiàng)目

          共 1834字,需瀏覽 4分鐘

           ·

          2021-11-10 05:23

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

          最近想找一些Python相關(guān)的游戲開發(fā)例子,正好在itch.io上閑逛看到這個(gè)俄羅斯方塊項(xiàng)目,瞬間被驚艷到了。

          作者是 Mikhail ,項(xiàng)目(tetris_for_two)地址是:
          https://gitlab.com/2pi360/tetris_for_two

          1.游戲介紹



          下面就給大家介紹一下這個(gè)用Python寫的俄羅斯方塊具體功能。

          它一共有七個(gè)游戲模式:

          1. 單人模式
          2. 普通雙人模式
          3. 鏡像雙人模式(即掉落方塊都一樣)
          4. 雙人加速模式(每消去一行都會(huì)給對(duì)方加速)
          5. 雙人交換控制模式(一次控制自己的方塊,一次控制對(duì)方的)
          6. 雙人平衡模式(會(huì)改變對(duì)方的容量)
          7. 雙人單容器模式

          沒錯(cuò),是不是被這豐富的游戲模式震驚到了?而且這款游戲的界面設(shè)計(jì)也是相當(dāng)簡(jiǎn)潔舒服(而且玩這樣的Python開源游戲,你永遠(yuǎn)不會(huì)被廣告氣到):

          不僅如此,除了wasd和上下左右鍵,它還支持用游戲手柄(僅一個(gè))進(jìn)行游戲,并且能切換兩個(gè)玩家的按鍵設(shè)置:

          雙人模式類似如下, 非常適合小情侶之間消耗時(shí)光哦(如果你們都喜歡玩俄羅斯方塊的話)


          尤其是雙人協(xié)作模式,兩個(gè)人一起解決問題也是增進(jìn)感情的好方法:


          還有其他幾種游戲模式,大家可以上?itch?上下載游戲體驗(yàn)

          2.源碼剖析



          當(dāng)然,我們首要目的還是學(xué)習(xí)這款游戲的源代碼,下面就給大家介紹一些這款游戲的部分核心代碼。下載該開源項(xiàng)目后,你會(huì)發(fā)現(xiàn)它的py文件分布如下:

          │ base.py
          │ game_modes.py
          │ main.py
          │ run_to_release.py
          │ tetris.py
          │ ... ....
          ├─assets
          │ ... ...

          └─screens
          ... ...

          其中,main.py是程序的入口點(diǎn),首先看看模塊引入,sys的引入是當(dāng)然的,游戲結(jié)束的時(shí)候需要調(diào)用:

          sys.exit()


          使得Python程序正常退出。這個(gè)游戲的引擎使用了pygame,是一個(gè)比較老的基于Python的2D游戲引擎,不過也是因?yàn)榇嬖跁r(shí)間長,它已經(jīng)成為一個(gè)很成熟且易上手的2D游戲開發(fā)庫 。


          作者自己寫了兩個(gè)模塊,一個(gè)是base,里面有畫布配置、按鍵配置、玩家配置等等一系列游戲的基礎(chǔ)設(shè)置。而 game_modes 則是七種游戲模式的邏輯所在模塊,里頭還引用了tetris.py,這個(gè)模塊定義了整個(gè)俄羅斯方塊旋轉(zhuǎn)的方法及其數(shù)據(jù)結(jié)構(gòu)。

          不過由于篇幅關(guān)系,我們重點(diǎn)看看base里的主循環(huán)main_loop:


          ?pygame.time.Clock()?用于配置游戲的幀數(shù),Clock.tick(frameate) 代表每秒framerate幀運(yùn)行,也就是說,每秒不會(huì)執(zhí)行超過 framerate 次循環(huán)?。這個(gè)參數(shù)的值,我們可以在主函數(shù)里看到是600. 也就是這個(gè)循環(huán)每秒不會(huì)超過600次。

          ?pygame.event.get()??是pygame游戲引擎的事件處理器,它用于處理所有的事件,好像打開大門讓所有的人進(jìn)入,然后我們可以根據(jù)事件不同的屬性做相應(yīng)的操作,如 event.type == pgl.KEYDOWN 表示鍵盤被按下時(shí),執(zhí)行條件中的語句:

          pressed_keys.add(event.key)


          便將其加入到pressed_keys集合中,yield返回生成器,也就是說只要程序不被終止,這個(gè)函數(shù)就會(huì)不斷地返回四個(gè)值: events, time_passed, pressed_keys 或 {(0, 0)}。events就是用戶觸發(fā)的事件,time_passed就是這些事件的時(shí)長,pressed_keys即用戶按下的鍵。

          這樣就完成了一次用戶事件的傳遞,然后再由后端對(duì)用戶的事件進(jìn)行處理,展示在游戲當(dāng)中。當(dāng)然,更復(fù)雜的還在后面,這里只是一個(gè)簡(jiǎn)單的事件處理,當(dāng)然也是最重要的事件處理部分。

          獲取完整源碼和體驗(yàn)游戲,請(qǐng)?jiān)诠娞?hào)后臺(tái)回復(fù)關(guān)鍵字?俄羅斯方塊

          如果文章對(duì)你有幫助,歡迎轉(zhuǎn)發(fā)/點(diǎn)贊/收藏~

          作者:Ckend

          來源:Python實(shí)用寶典


          _往期文章推薦_

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




          如需了解付費(fèi)精品課程教學(xué)答疑服務(wù)
          請(qǐng)?jiān)?strong style="max-width: 100%;overflow-wrap: break-word !important;box-sizing: border-box !important;">Crossin的編程教室內(nèi)回復(fù): 666

          瀏覽 54
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  99精品视频播放 | 人人草视频在线 | 大鸡吧视频 | 国产精品久久久久久9999 | 国产精品人妻无码八区牛牛 |