• 小学生Python编程——拼图


    ​​​​​​​

    from pgzrun import *

    #{
    empty = [
             [186, 352],
             [266, 352],
             [345, 352],
             [425, 352],
             [186, 432],
             [266, 432],
             [346, 432],
             [425, 432],
             [186, 512],
             [266, 512],
             [346, 512],
             [425, 512],
             [186, 592],
             [266, 592],
             [345, 592],
             [425, 592]
            ]
    #} #empty坐标列表在这里,用于吸附
    #{     
    from random import *
    from PIL import Image
    import os
    def open(images):
        images = images.lstrip()
        images = images.rstrip()
        im = Image.open("images/" + images)
        im1 = im.resize((320,320))
        im1.save("images/" + images, "png")
        im3 = im.resize((240,240))
        im3.save("images/" + images, "png")
        list = []
        for y in range(4): 
            for x in range(4):
                loc = (x * 80,y * 80,(x+1)*80,(y+1)*80)
                list.append(loc)
        shuffle(list)
        num = 0
        for n in list:
            im2 = im1.crop(box = n)
            im2.save("images/h"+ str(num)+ ".png")
            num += 1
        return images
    #}  

    music.play("nice.mp3")

    WIDTH = 960
    HEIGHT = 720

    #每个碎片角色的坐标列表out
    #{
    out = [
          [164, 129],
          [253, 129],
          [344, 129],
          [434, 129],
          [527, 129],
          [617, 129],
          [708, 129],
          [797, 129],
          [163, 218],
          [253, 218],
          [343, 218],
          [433, 218],
          [527, 218],
          [617, 218],
          [707, 218],
          [797, 218]
        ]
    #}

    me = open("flower1.png") #open函数可以把任意图片切分为16块
    a = Actor(me, [700, 495])
    bg = Actor("bg.png")

    #使用for循环创建角色
    chips = []
    for i in range(16):
       
        c = Actor("h" +str(i) + ".png", out[i])
        chips.append(c)

    def draw():
        bg.draw()
        a.draw()

        for g in chips:
            g.draw()
    pic = None
    def on_mouse_down(pos):
        global pic
        #遍历角色列表,判断是否被点击
        for p in chips:
            if p.collidepoint(pos):
                pic = p
        
    def on_mouse_move(pos):
        if pic != None:
            pic.pos = pos
            
    def on_mouse_up(pos):
        global pic
        
        #114~118行是吸附的逻辑
        if pic != None:
            for e in empty:
                if pic.collidepoint(e):
                    pic.pos = e
                    break
                
        pic = None
     
    go()

  • 相关阅读:
    Web服务(03)——HTTP协议
    【统计学习方法】P2 监督学习
    Linus Torvalds发布了第一个Linux内核6.4候选版本
    一文详解多模态认知智能
    Mysql语句分析、存储引擎、索引优化等详情
    Flutter 第一个程序Hello World!
    Git Gui的使用+关于SSH协议和克隆对应文件代码+IDEA集成Git等
    行业突破!四信实现低延时摄像头弱网状态100ms以内实时传输
    在thinkphp5中实现购物车的功能
    webpack5基础--02_基本配置( 5 大核心概念)
  • 原文地址:https://blog.csdn.net/fqfq123456/article/details/126150258