这是一个基于 SimpleGUItk 的连连看游戏,主题是2014年巴西世界杯8强球队。玩家需要翻开图片,并尝试找出相同的图片进行消除。
游戏规则
- 游戏界面被划分为4行4列,共有16个格子。
- 每个格子中包含一张图片,总共有8种不同的国家国旗图标,每种国旗图标分布在两个格子中。
- 玩家每次可以翻开两个格子中的图片,如果两个格子中的图片相同,则这两个格子会消失;否则,图片会重新翻回去。
- 游戏结束的条件是所有的图片都被消除。
运行程序
要运行这个程序,需要确保已经安装了 simpleguitk 库。可以按照以下步骤来运行程序:
-
打开 Python 解释器(如IDLE)或者使用其他支持 Python 的编辑器。
-
将代码粘贴到编辑器中,并保存为.py文件。
-
运行代码,程序窗口将弹出并显示游戏界面。
-
在窗口中点击图片来翻开图片,尝试找出相同的图片进行消除。
-
如果想重新开始游戏,可以点击界面上的“重新开始”按钮。
函数说明
以下是程序中的一些关键函数的说明:
- new_game():初始化游戏的全局变量,包括所有图片的索引、是否翻开以及对比的图片等。
- mouseclick(pos):处理鼠标点击事件的函数,根据点击位置来翻开图片,并进行图片的对比和消除。
- draw(canvas):绘制游戏界面的函数,根据图片的翻开状态来显示国旗图标或者巴西世界杯Logo。
- main():程序的入口函数,创建窗口并启动游戏。
示例运行结果
以下是一些示例运行结果的截图,展示了游戏界面和交互过程。
示例代码
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, flag_image, back_image
turns = 0
all_image = []
exposed = []
check_list = []
list1 = range(8)
list2 = range(8)
all_image.extend(list1)
all_image.extend(list2)
random.shuffle(all_image)
for card in all_image:
exposed.append(False)
label.set_text('回合次数 = 0')
background_sound.rewind()
background_sound.play()
# 鼠标点击事件的处理函数
def mouseclick(pos):
# 也是游戏逻辑的实现
global exposed, check_list, turns
image_index = (pos[0] // 128) + (pos[1] // 128) * 4
if not exposed[image_index]:
exposed[image_index] = True
if len(check_list) < 2:
check_list.append(image_index)
if len(check_list) == 2:
turns += 1
else:
if all_image[check_list[0]] != all_image[check_list[1]]:
for image in check_list:
exposed[image] = False
check_list = []
check_list.append(image_index)
else:
check_list.pop()
check_list.pop()
check_list.append(image_index)
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])
image_size = [128, 128] # 每张图片实际显示的大小
flag_source_size = [1024, 1024] # 国旗原始图片的大小
flag_source_center = [1024 / 2, 1024 / 2] # 国旗原始图片的中心
logo_source_size = [256, 256] # 2014巴西世界杯Logo原始图片的大小
logo_source_center = [256 / 2, 256 / 2] # 2014巴西世界杯Logo原始图片的中心
for i in range(4):
for j in range(4):
index = i * 4 + j
image_center = [j * image_size[0] + image_size[0] / 2, i * image_size[1] + image_size[1] / 2]
if exposed[index]:
canvas.draw_image(flag_image[all_image[index]], flag_source_center, flag_source_size, image_center,
image_size)
else:
canvas.draw_image(logo_image, logo_source_center, logo_source_size, image_center, image_size)
# 创建窗口
# 8强共16张图片,每个图片的显示大小为128x128像素
# 16张图片显示为4行4列,因此窗口的宽度为128x4=512像素,高度为128x4=512像素
frame = gui.create_frame("2014巴西世界杯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()
改进和扩展
该连连看游戏目前只支持8种国家国旗图标,可以通过添加更多的图片来扩展游戏的难度和变化。也可以加入计时功能、提示功能或者记录最佳成绩等。