猫史档案馆


【Python作品分享】羊了个羊(python)【作品秀】

用户:方圆三角方圆三角查看:0 回复:0 评论:0 创建时间:2022-12-17T17:56:58


【作品展示】

center_image

 

【作品介绍】

玩法:

1.点击卡片收入档。

2.满3个一样的消除。

3.消完就赢,档满就输。

难度评估:

难度由难转为简单。

作者试玩平均胜率:1/15(约每15局就赢一次)

感谢:

B站的用户“Crossin的编程教室”。

注:

GIF中仅为演示,作者故意失败,并非程序问题。

 

【作品源代码】

import pgzrun as pgz,random as ran

TITLE = "羊了个羊"
WIDTH = 600
HEIGHT = 720

T_WIDTH = 60
T_HEIGHT = 66

DOCK = Rect((90, 5喵), (T_WIDTH*7, T_HEIGHT))

tiles = []
docks = []

ts = list(range(1,17))*9
ran.shuffle(ts)
n = 0
for k in range(7):
    for i in range(7-k):
        for j in range(7-k):
            t = ts[n]
            n+=1
            tile = Actor(f"tile{t}")
            tile.pos = 120+(k*0.5+j)*tile.width,100+(k*0.5+i)*tile.height*0.9
            tile.tag = t
            tile.layer = k
            tile.status = 1 if k == 6 else 0
            tiles.append(tile)

for i in range(4):
    t = ts[n]
    n+=1
    tile = Actor(f"tile{t}")
    tile.pos = 210+i*tile.width,516
    tile.tag = t
    tile.layer = 0
    tile.status = 1
    tiles.append(tile)

def draw():
    screen.clear()
    screen.blit("back",(0,0))
    for tile in tiles:
        tile.draw()
        if tile.status == 0:
            screen.blit("mask",tile.topleft)
    for i,tile in enumerate(docks):
        tile.left = (DOCK.x + i * T_WIDTH)
        tile.top = DOCK.y
        tile.draw()

    if len(docks) >= 7:
        screen.blit("end",(0,0))
    if len(tiles) == 0:
        screen.blit("win",(0,0))

def on_mouse_down(pos):
    global docks
    if len(docks) >= 7 or len(tiles) == 0:
        return
    for tile in reversed(tiles):
        if tile.status == 1 and tile.collidepoint(pos):
            tile.status = 2
            tiles.remove(tile)
            diff = [t for t in docks if t.tag != tile.tag]
            if len(docks) - len(diff) < 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:
                        down.status = 1
            return

music.play("bgm")

pgz.go()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页