欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-20 11:26:00
...

前提条件:

        需要安装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()

运行后的界面:

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

拼图完成的效果:

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

相关标签: 游戏 python