“世界杯八强连连看”游戏

作者 by 超米 / 2024-11-25 / 暂无评论 / 20 个足迹

import simpleguitk as gui
import random

# 定义全局变量
all_image = []  # 所有16张图片的索引下标,两两重复
exposed = []  # 真表示对应的图片已经翻开
check_list = []  # 正在对比的两种图片
turns = 0
flag_image = []  # 16强球队的国旗图标

# 初始化全局变量的辅助函数
def new_game():
    global all_image, exposed, check_list, turns
    check_list = []
    turns = 0
    exposed = []
    label.set_text("回合次数 = " + str(turns))
    background_sound.rewind()
    background_sound.play()

    # 创建并打乱16张图片的索引下标
    list_one = list(range(0, 8))
    random.shuffle(list_one)
    list_two = list(range(0, 8))
    random.shuffle(list_two)
    all_image = list_one + list_two

    # 图片默认未翻开
    for i in range(0, 16):
        exposed.append(False)

# 鼠标点击事件的处理函数
def mouseclick(pos):
    # 也是游戏逻辑的实现
    global exposed, check_list, turns
    row = pos[1] // 128  # 行
    column = pos[0] // 128  # 列
    i = row * 4 + column
    if exposed[i] is False:
        exposed[i] = True
        check_list.append([all_image[i], i])
        if len(check_list) > 2:
            if check_list[-2][0] == check_list[-3][0]:
                del check_list[-2]
                del check_list[-2]
            else:
                exposed[check_list[-2][1]] = False
                exposed[check_list[-3][1]] = False
                del check_list[-2]
                del check_list[-2]
            turns += 1
            label.set_text("回合次数 = " + str(turns))

# 每个图片的显示大小为128x128像素,8强共16张图片,16张图片显示为4行4列
def draw(canvas):
    canvas.draw_image(background_image, [256, 256], [512, 512], [256, 256], [512, 512])
    for i in range(0, 16):
        row = i // 4
        column = i % 4
        if exposed[i] is False:
            canvas.draw_image(logo_image, [256/2, 256/2], [256, 256], [64 + 128*column, 64 + 128*row], [128, 128])
        else:
            canvas.draw_image(flag_image[all_image[i]], [1024/2, 1024/2], [1024, 1024], [64 + 128*column, 64 + 128*row], [128, 128])

# 创建窗口
# 8强共16张图片,每个图片的显示大小为128x128像素
# 16张图片显示为4行4列,因此窗口的宽度为128x4=512像素,高度为128x4=512像素
frame = gui.create_frame("世界杯8强连连看", 512, 512)
frame.add_button("重新开始", new_game, 100)
label = frame.add_label("回合次数 = 0")

# 注册事件处理函数
frame.set_mouseclick_handler(mouseclick)
frame.set_draw_handler(draw)

# 读取图片
background_image = gui.load_image(
    "http://202.201.225.74/video/PythonResoure/ProjectResource/images/project5/background.png")
logo_image = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project5/Logo.png")
flag_image.append(
    gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project5/Argentina.png"))
flag_image.append(
    gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project5/Belgium.png"))
flag_image.append(
    gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project5/Brazil.png"))
flag_image.append(
    gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project5/Colombia.png"))
flag_image.append(
    gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project5/Costa-rica.png"))
flag_image.append(
    gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project5/France.png"))
flag_image.append(
    gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project5/Germany.png"))
flag_image.append(
    gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project5/Netherlands.png"))

# 读取世界杯之歌
background_sound = gui.load_sound(
    "http://202.201.225.74/video/PythonResoure/ProjectResource/sounds/project5/We_Are_One.ogg")
# 启动游戏
new_game()
frame.start()

独特见解