学习Python开发小游戏(五)----- 拼图

前提条件:

        需要安装pygame,pgzero,numpy(windows:1.19.3)

功能:

       1.初始化界面随机从存在的图片中抽取一张图片,并显示一个4*4错乱布局的界面

       2.使用鼠标交换两个图片的位置

       3.当全部图片拼完成后,停止游戏

       4.示例中涉及到的图片分隔的内容请参照上一边内容《Python使用PIL库分割以及压缩图片》

附:

       代码中涉及到的素材来自异步社区:《Python游戏趣味编程》一书中提供的素材:https://www.epubit.com/bookDetails?id=UB72096d97d6149

以下是代码:

import pgzrun, random

TITLE = '拼图'
TILE_SIZE = 175
WIDTH = 4 * TILE_SIZE
HEIGHT = 4 * TILE_SIZE + 120
# 存储所有的图片
image_list = []
# 加载图片
index = 1
# 开局随机加载一张图片
start_image_index = random.randint(1, 5)
start_image = Actor(str(start_image_index))
# 原图的坐标
start_image.left = 2 * TILE_SIZE - 50
start_image.top = 4 * TILE_SIZE + 10
for i in range(4):
    for j in range(4):
        image = Actor(str(start_image_index) + '_' + str(index))
        # 图片的坐标
        image.left = i * TILE_SIZE
        image.top = j * TILE_SIZE
        image_list.append(image)
        index += 1


# 交换两个图片的位置
def change_position(first, second):
    temp = first.pos
    first.pos = second.pos
    second.pos = temp


# 打乱所有图片的位置
for k in range(20):
    first = random.randint(0, 15)
    second = random.randint(0, 15)
    change_position(image_list[first], image_list[second])
# 记录鼠标第一次点击的图片,每两次为一个循环
click_first = -1
# 记录鼠标第二次点击的图片
click_second = -1
# 鼠标点击的次数
mouse_click_time = 0
# 游戏是否成功
is_success = False


# 绘制内容
def draw():
    # 背景颜色:黑色
    screen.fill('black')
    # 清除屏幕
    screen.clear()
    # 绘制图片
    for img in image_list:
        img.draw()
    # 绘制原图
    start_image.draw()
    # 如果游戏成功,则界面输出对应信息
    if is_success:
        screen.draw.text('游戏胜利', (WIDTH / 2 - 80, (HEIGHT - 120) / 2), fontsize=50, fontname='s', color='blue')


# 鼠标点击事件
def on_mouse_down(pos, button):
    global mouse_click_time, click_first, click_second, is_success, index
    # 如果游戏成功,直接返回
    if is_success:
        return
    # 记录本次鼠标点击的是哪个图片
    image_index = -1
    for i in range(16):
        # 鼠标点击的地方是在哪个图片的区域
        if image_list[i].collidepoint(pos):
            image_index = i
            break
    # 鼠标点击的次数,每两次为一个循环 第二次点击后两个图片互换位置
    if mouse_click_time % 2 == 0:
        click_first = image_list[image_index]
    elif mouse_click_time % 2 == 1:
        click_second = image_list[image_index]
        # 交换两个图片的位置
        change_position(click_first, click_second)
    # 鼠标点击次数加1
    mouse_click_time += 1
    # 判断是否胜利
    is_success = True
    index = 0
    for i in range(4):
        for j in range(4):
            img = image_list[index]
            # 判断当前是否所有的图片都移到指定位置
            if img.left != i * TILE_SIZE or img.top != j * TILE_SIZE:
                is_success = False
                break
            index += 1


pgzrun.go()

运行后的界面:

拼图完成的效果:

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值