• 小学生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()

  • 相关阅读:
    Java 中实现单例模式
    链表经典面试题(二)
    springboot+小区公共停车位管理 毕业设计-附源码201517
    如何实现 add[1][2][3] + 4 === 6?
    CSS3DRenderer, CSS3DObject, OrthographicCamera API 结合使用案例
    蓝牙mesh基础(基本概念)
    【Seata】05 - Seata Saga 模式简单整理、Docker 部署 Nacos 单机(基于 Jpom)相关配置
    ESP8266-Arduino编程实例-LSM6DS3加速度计和陀螺仪驱动
    6 RabbitMQ之死信队列
    QMenuBar和QToolBar使用同一个QAction
  • 原文地址:https://blog.csdn.net/fqfq123456/article/details/126150258