羊了個羊趁尼,但是Python簡(li)單(pu)版

大家好,歡迎來到 Crossin的編程教室 猖辫!
要說最近最熱門的游戲酥泞,那肯定是《羊了個羊》沒跑了。

image.png

連續(xù)上了好幾天熱搜啃憎,火到連央視都來提醒謹防有人利用游戲之名詐騙芝囤。
但游戲爆火的另一面,也是無數(shù)玩家對于第二關(guān)難度的吐槽和不滿辛萍。

image.png

如果你也像我一樣悯姊,因為過不了關(guān)而不爽,不如自己用 Python 來寫一個簡單版贩毕,想過幾關(guān)過幾關(guān)
甚至還可以調(diào)個無解關(guān)卡去霍霍其他人

image.png

我這個版本不僅難度簡單悯许,代碼也很簡單,一共不到100行辉阶。代碼已開源:
python666點cn/c/8
可下載先壕,可修改,可商用谆甜,但公開發(fā)布需署名來源:Crossin的編程教室

稍微解釋一下思路和代碼:

游戲用了 pygame-zero 這個庫(所以才能這么少的代碼實現(xiàn))垃僚,運行前需要安裝 pgzero 庫:

pip install pgzero

(或者通過 IDE 安裝)

運行時需要帶上項目里的 images 和 music 文件夾(你可以替換里面的圖片和音樂)

每一張牌是一個 Actor 對象(相當(dāng)于一般游戲開發(fā)中的精靈類),具有種類(12種各12張)规辱、層級谆棺、狀態(tài)(不可點/可點/已收集)等屬性。
開局時隨機打亂后擺放按摘,根據(jù)種類顯示不同圖片包券。
除了最上層的牌可點纫谅,其余均不可點。

# 初始化牌組溅固,12*12張牌隨機打亂
ts = list(range(1, 13))*12
random.shuffle(ts)
n = 0
for k in range(7):    # 7層
    for i in range(7-k):    #每層減1行
        for j in range(7-k):
            t = ts[n]        #獲取排種類
            n += 1
            tile = Actor(f'tile{t}')       #使用tileX圖片創(chuàng)建Actor對象
            tile.pos = 120 + (k * 0.5 + j) * tile.width, 100 + (k * 0.5 + i) * tile.height * 0.9    #設(shè)定位置
            tile.tag = t            #記錄種類
            tile.layer = k          #記錄層級
            tile.status = 1 if k == 6 else 0        #除了最頂層付秕,狀態(tài)都設(shè)置為0(不可點)這里是個簡化實現(xiàn)
            tiles.append(tile)

判斷鼠標點擊的位置是否處于某張可點的牌內(nèi),是的話就從所有牌列表中移除侍郭,加到下方牌堆列表里询吴。
然后遍歷與這張牌有重疊的下一層牌,對于每張下層牌亮元,反過來檢查是否有其他上層牌覆蓋它猛计,如果沒有,就把它變成可點爆捞。

for tile in reversed(tiles):    #逆序循環(huán)是為了先判斷上方的牌奉瘤,如果點擊了就直接跳出,避免重復(fù)判定
    if tile.status == 1 and tile.collidepoint(pos):
        # 狀態(tài)1可點煮甥,并且鼠標在范圍內(nèi)
        tile.status = 2
        tiles.remove(tile)
        diff = [t for t in docks if t.tag != tile.tag]    #獲取牌堆內(nèi)不相同的牌
        if len(docks) - len(diff) < 2:    #如果相同的牌數(shù)量<2盗温,就加進牌堆
            docks.append(tile)
        else:             #否則用不相同的牌替換牌堆(即消除相同的牌)
            docks = diff
        for down in tiles:      #遍歷所有的牌
            if down.layer == tile.layer - 1 and down.colliderect(tile):   #如果在此牌的下一層,并且有重疊
                for up in tiles:      #那就再反過來判斷這種被覆蓋的牌成肘,是否還有其他牌覆蓋它
                    if up.layer == down.layer + 1 and up.colliderect(down):     #如果有就跳出
                        break
                else:      #如果全都沒有卖局,說明它變成了可點狀態(tài)
                    down.status = 1
        return

下方牌堆達到7張為失敗,上方?jīng)]有剩牌則為勝利

# 達到7張双霍,失敗
if len(docks) >= 7:
    screen.blit('end', (0, 0))
# 沒有剩牌砚偶,勝利
if len(tiles) == 0:
    screen.blit('win', (0, 0))

本demo距離《羊了個羊》尚有改進空間,有興趣的小伙伴可自行嘗試擴展洒闸,包括但不限于:

  • 道具功能
  • 增加收牌的動畫效果(可以用 pgzero 提供的 animate 方法)
  • 更多的關(guān)卡布局
  • 打包成exe
  • 游戲排行榜
  • 當(dāng)然還有游戲最最核心的部分:觀看廣告

代碼已開源:
python666點cn/c/8
可下載染坯,可修改,可商用顷蟀,但公開發(fā)布需署名來源:Crossin的編程教室
如果喜歡的話酒请,感謝幫忙點贊和轉(zhuǎn)發(fā)骡技,你的支持是我持續(xù)更新的動力鸣个!
我是Crossin,我們下個游戲見~
對了布朦,哦囤萤,對了,如果你想學(xué)Python是趴,記得來看下我的《人人都能學(xué)Python》系列
零基礎(chǔ)python入門 圖文系列教程:python666點cn

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涛舍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子唆途,更是在濱河造成了極大的恐慌富雅,老刑警劉巖掸驱,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異没佑,居然都是意外死亡毕贼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門蛤奢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鬼癣,“玉大人,你說我怎么就攤上這事啤贩〈海” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵痹屹,是天一觀的道長章郁。 經(jīng)常有香客問我,道長志衍,這世上最難降的妖魔是什么驱犹? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮足画,結(jié)果婚禮上雄驹,老公的妹妹穿的比我還像新娘。我一直安慰自己淹辞,他們只是感情好医舆,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著象缀,像睡著了一般蔬将。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上央星,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天霞怀,我揣著相機與錄音,去河邊找鬼莉给。 笑死毙石,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颓遏。 我是一名探鬼主播徐矩,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叁幢!你這毒婦竟也來了滤灯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鳞骤,沒想到半個月后窒百,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡豫尽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年贝咙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拂募。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡庭猩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陈症,到底是詐尸還是另有隱情蔼水,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布录肯,位于F島的核電站趴腋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏论咏。R本人自食惡果不足惜优炬,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厅贪。 院中可真熱鬧蠢护,春花似錦、人聲如沸养涮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贯吓。三九已至懈凹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悄谐,已是汗流浹背介评。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留爬舰,地道東北人们陆。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像洼专,于是被迫代替她去往敵國和親棒掠。 傳聞我的和親對象是個殘疾皇子孵构,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容