亚洲欧美日韩精品久久亚洲区_国产精品嫩草影院在线播放_亚洲看片网_黄色国产_奇米网第四色_精品视频在线一区

您現(xiàn)在所在的位置:首頁 >關(guān)于奇酷 > 媒體報(bào)道 > Python版羊了個(gè)羊,代碼不到100行

Python版羊了個(gè)羊,代碼不到100行

來源:奇酷教育 發(fā)表于:

Python版羊了個(gè)羊,代碼不到100行

  Python版羊了個(gè)羊,代碼也很簡單,一共不到100行。代碼已開源:
 
  python666.cn/c/8
 
 
  1.
 
  游戲用了 pygame-zero 這個(gè)庫(所以才能這么少的代碼實(shí)現(xiàn)),運(yùn)行前需要安裝 pgzero 庫:
 
  pip install pgzero
  (或者通過 IDE 安裝)
 
 
  2.
 
  運(yùn)行時(shí)需要帶上項(xiàng)目里的 images 和 music 文件夾(你可以替換里面的圖片和音樂)
 
 
  3.
 
  每一張牌是一個(gè) Actor 對(duì)象(相當(dāng)于一般游戲開發(fā)中的精靈類),具有種類(12種各12張)、層級(jí)、狀態(tài)(不可點(diǎn)/可點(diǎn)/已收集)等屬性。
 
  開局時(shí)隨機(jī)打亂后擺放,根據(jù)種類顯示不同圖片。
 
  除了最上層的牌可點(diǎn),其余均不可點(diǎn)。
 
  # 初始化牌組,12*12張牌隨機(jī)打亂
  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對(duì)象
              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          #記錄層級(jí)
              tile.status = 1 if k == 6 else 0        #除了最頂層,狀態(tài)都設(shè)置為0(不可點(diǎn))這里是個(gè)簡化實(shí)現(xiàn)
              tiles.append(tile)
 
  4.
 
  判斷鼠標(biāo)點(diǎn)擊的位置是否處于某張可點(diǎn)的牌內(nèi),是的話就從所有牌列表中移除,加到下方牌堆列表里。
 
  然后遍歷與這張牌有重疊的下一層牌,對(duì)于每張下層牌,反過來檢查是否有其他上層牌覆蓋它,如果沒有,就把它變成可點(diǎn)。
 
  for tile in reversed(tiles):    #逆序循環(huán)是為了先判斷上方的牌,如果點(diǎn)擊了就直接跳出,避免重復(fù)判定
      if tile.status == 1 and tile.collidepoint(pos):
          # 狀態(tài)1可點(diǎn),并且鼠標(biāo)在范圍內(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,就加進(jìn)牌堆
              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:      #如果全都沒有,說明它變成了可點(diǎn)狀態(tài)
                      down.status = 1
          return
 
  5.
 
  下方牌堆達(dá)到7張為失敗,上方?jīng)]有剩牌則為勝利
 
  # 達(dá)到7張,失敗
  if len(docks) >= 7:
      screen.blit('end', (0, 0))
  # 沒有剩牌,勝利
  if len(tiles) == 0:
      screen.blit('win', (0, 0))
 
  6.
 
  本demo距離《羊了個(gè)羊》尚有改進(jìn)空間,有興趣的小伙伴可自行嘗試擴(kuò)展,包括但不限于:
 
  道具功能
 
  增加收牌的動(dòng)畫效果(可以用 pgzero 提供的 animate 方法)
 
  更多的關(guān)卡布局
 
  打包成exe
 
  游戲排行榜
 
  當(dāng)然還有游戲最最核心的部分:觀看廣告
 
  代碼已開源:
  python666.cn/c/8
主站蜘蛛池模板: 国产精品久久久久久久一区探花 | 免费高清伧理片午夜伧理片 | 91麻豆精品一区二区三区 | 美乃雀中文字幕在线一区 | 国产人成精品 | 亚洲品质自拍视频网站 | 91精品啪国产在线观看免费牛牛 | 精品久久中文字幕 | 欧洲精品色 | 亚洲国产精品欧美综合 | 久久这里只有精品国产99 | 日韩欧美一区二区三区在线视频 | 伊人狠狠干 | 黄色免费网站在线观看 | 欧美日韩一二三区 | 亚洲精品成A人在线观看拍拍拍 | 亚婷婷洲AV久久蜜臀无码 | 日韩精品久久一区二区三区 | 精品免费久久久久欧美亚一区 | 日韩一区二区福利视频 | 91精品国产综合久久福利软件 | 中文字幕在线一区二区三区 | 4hu四虎永久免在线视看 | 91成人久久 | 91成人在线| 国产二区三区四区 | 99久久99热久久精品免费看 | 91极品在线 | 日韩免费一区 | 成人亚洲视频 | 欧美黑人性受xxxx喷水 | 99久久精品国产一区二区三区 | 91免费在线| 热久久成人 | 国产亚洲精品久久无亚洲 | 久久在线| 成人综合网站 | 国产专区在线视频 | 成人黄色免费在线观看 | 又大又粗进出白浆直流动态图 | 国产一区亚洲一区 |