pgzrun 拼图游戏制作过程详解(4,5)

news/2024/5/18 12:24:41 标签: python, 开发语言, pygame, 游戏程序

 4. 将小拼图位置随机打乱

  • 建立swap_Square(i,j)坐标互换函数
    将Gird[i]和Gird[j] 中的小拼图信息进行互换
python">def swap_Square(i,j):  # 两个拼图的位置互换
    temp_pos=Gird[i].pos
    Gird[i].pos=Gird[j].pos
    Gird[j].pos=temp_pos
  • 导入随机数模块
python">import random
  • 随机抽取10组小拼图将其坐标进行互换
python">for k in range(10):  # 随机抽取10组拼图 进行位置互换
    i=random.randint(0,23)
    j=random.randint(0,23)
    swap_Square(i, j)

执行效果如下图所示:

5. 实现拼图交换:

  • 设定变量click_time来储存鼠标点击次数,clickID_1、clickID_2分别来储存两个要互换的小拼图的索引。
python">click_time=0
clickID_1=clickID_2=-1
  • 监听鼠标点击事件,遍历所有小拼图,获取被点击小拼图的索引。
python">def on_mouse_down(pos,button): # 当鼠标被点击时
    global click_time ,clickID_1 , clickID_2
    for i in range(24):
        if Gird[i].collidepoint(pos): # 拼图对象被点击
            break
  • 根据点击次数的奇偶来确定两个要互换的小拼图的索引,实现小块之间的交换。
python">    if click_time%2==0 :
        clickID_1=i
    else:
        clickID_2=i
        swap_Square(clickID_1,clickID_2)
  • 鼠标每次点击将变量click_time增加1
python">click_time += 1

完整代码如下: 

python">import pgzrun
import random

TITLE="pgzrun 拼图游戏"
Square_size=125
WIDTH=Square_size*4
HEIGHT=Square_size*6

click_time=0
clickID_1=clickID_2=-1

Squares=[Actor("girl_01"),Actor("girl_02"),Actor("girl_03"),Actor("girl_04")
        ,Actor("girl_05"),Actor("girl_06"),Actor("girl_07"),Actor("girl_08")
        ,Actor("girl_09"),Actor("girl_10"),Actor("girl_11"),Actor("girl_12")
        ,Actor("girl_13"),Actor("girl_14"),Actor("girl_15"),Actor("girl_16")
        ,Actor("girl_17"),Actor("girl_18"),Actor("girl_19"),Actor("girl_20")
        ,Actor("girl_21"),Actor("girl_22"),Actor("girl_23"),Actor("girl_24")
         ]
Gird=[]
for i in range(6):
    for j in range(4):
        Square=Squares[i*4+j]
        Square.left=Square_size*j
        Square.top=Square_size*i
        Gird.append(Square)

def swap_Square(i,j):  # 两个拼图的位置互换
    temp_pos=Gird[i].pos
    Gird[i].pos=Gird[j].pos
    Gird[j].pos=temp_pos

for k in range(10):  # 随机抽取10组拼图 进行位置互换
    i=random.randint(0,23)
    j=random.randint(0,23)
    swap_Square(i, j)

def on_mouse_down(pos,button): # 当鼠标被点击时
    global click_time ,clickID_1 , clickID_2
    for i in range(24):
        if Gird[i].collidepoint(pos): # 拼图对象被点击
            break

    if click_time%2==0 :
        clickID_1=i
    else:
        clickID_2=i
        swap_Square(clickID_1,clickID_2)
    click_time += 1

def draw():
    screen.clear()
    for Square in Gird:
        Square.draw()

def update():
    pass

pgzrun.go()

pgzrun拼图游戏素材包下载


http://www.niftyadmin.cn/n/5028413.html

相关文章

dede:arclist标签判断有缩略图则显示否则不显示或显示其他自定义图片

dede:arclist标签判断有缩略图则显示否则不显示或显示其他自定义图片 织梦在首页和栏目列表页,在没有缩略图的时候会显示一张默认的无缩略图的图片,这图片在配合某些dede主题的时候不是很美观,那么我们可以在织梦模板中使用dedecms提供的php判…

数学建模__线性规划Python实现

我使用到的是python库中scipy。 线性规划 #目标函数的系数 # min z 2x13x2-5x3 c np.array([-2,-3,5])#不等式限制条件的系数&#xff0c;转化为小于等于 # 2x1-5x2x3 < 10, x13x2x3<12 Aup np.array([[-2,5,-1],[-1,-3,-1]]) #必须是二维 #右侧系数 bup np.array(…

基于Y向连贯性算法的多边形扫描线生成(适用于凸多边形和凹多边形)【原理+java实现】

问题介绍 给定一个多边形&#xff0c;可能是凸多边形&#xff0c;也可能是凹多边形&#xff0c;现需要生成一系列线条将多边形描述出来&#xff0c;示例如下图 原始方法 遇到这个问题&#xff0c;大家首先想到的方法可能是&#xff1a;使用一系列的竖线来和多边形进行相交&…

云服务器部署k8s集群

在两台不同厂商的云服务器上部署k8s集群&#xff0c;遇到一些问题。在此进行下总结。 首先要网络能够互通&#xff0c;我是通过添加虚拟网卡的方式 lsmod | grep ip_vs #检查是否有开启 #临时开启ip_vs for i in $(ls /lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|g…

LeetCode【27. 移除元素】

为国捐躯赴战场&#xff0c;丹心可并日争光。 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺…

【C语言】简易计算器的模拟实现

前言 最近在复习指针和数组&#xff0c;发现之前没写过利用函数指针数组来实现计算器的博客&#xff0c;所以今天就来写一下。 引入 先来复习一下函数指针和函数指针数组的知识 函数指针 语法格式&#xff1a; (函数返回类型) (*pf)(函数各个参数的类型) 函数名&#xf…

python连接mysql数据库的练习

一、导入pandas内置的sqlite3模块&#xff0c;连接的信息&#xff1a;ip地址是本机, 端口号port 是3306, 用户user是root, 密码password是123456, 数据库database是lambda-xiaozhang import pymysql# 打开数据库连接&#xff0c;参数1&#xff1a;主机名或IP&#xff1b;参数…

c++八股文笔记day1

malloc、free和new、delete区别。 malloc和free是C语言里的库函数&#xff0c;new和delete是c里的操作符&#xff0c;项目中有c和c混编的时候要注意他们之间的差异&#xff0c;共同的特征就是用来分配内存和释放内存。 a.new自动计算所需内存空间大小&#xff0c;而malloc是手…