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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信息化未来

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值