sairate 5488a216f2 feat(第7讲 字母卡牌): 实现记忆游戏并添加开始界面
- 新增 jiyi.py 文件,实现字母翻牌记忆游戏功能
- 添加 youxijiemian.py 文件,创建游戏开始界面
- 使用 turtle 和 tkinter 模块分别实现游戏和界面
- 支持选择不同难度的游戏模式
2025-11-16 13:29:06 +08:00

100 lines
4.0 KiB
Python

# 预置内容,请勿改动
a = {"01新疆碎片": (225, 231), "02西藏碎片": (244, 457), "03内蒙古碎片": (623, 203),
"04青海碎片": (383, 396), "05四川碎片": (491, 521), "06黑龙江碎片": (861, 122),
"07甘肃碎片": (472, 358), "08云南碎片": (457, 621), "09广西碎片": (580, 656),
"10湖南碎片": (640, 584), "11陕西碎片": (586, 415), "12河北碎片": (718, 330),
"13吉林碎片": (859, 228), "14湖北碎片": (654, 506), "15广东碎片": (678, 677),
"16贵州碎片": (549, 593), "17河南碎片": (672, 446), "18江西碎片": (724, 584),
"19山东碎片": (758, 392), "20山西碎片": (650, 369), "21辽宁碎片": (805, 284),
"22安徽碎片": (740, 487), "23福建碎片": (766, 609), "24江苏碎片": (770, 462),
"25浙江碎片": (793, 538), "26重庆碎片": (573, 525), "27宁夏碎片": (548, 375),
"28台湾碎片": (824, 652), "29海南碎片": (610, 753), "30北京碎片": (715, 310),
"31天津碎片": (730, 326), "32上海碎片": (818, 495)} # 省份文件名称和对应的正确位置
#基类 pygame pgzero
import pgzrun
import os
import random # 导入操作系统和随机数库
# 设置窗口
WIDTH = 1000
HEIGHT = 800
# 设置窗口标题
TITLE = '中国地图我来拼'
# 初始值设置
s_piece = None # 当前被选择的碎片
s_name = None # 当前被选择的碎片名字
count = 0 # 记录游戏中正确放置的碎片数量
time = 120 # 游戏限时
game_over = False # 标志游戏是否结束
# 加载碎片
pieces = []
# 遍历指定文件夹中的所有文件
for filename in os.listdir('images'):
if filename[-6:] == '碎片.png': # 只处理以碎片.png结尾的文件
img = Actor(filename[:-4], (random.randint(0, WIDTH), random.randint(0, HEIGHT)))
pieces.append([img, filename[:-4], False]) # 添加所有碎片和碎片信息到列表
# 加载游戏结束画面
win_img = Actor("成功", (WIDTH // 2, HEIGHT // 2))
lose_img = Actor("失败", (WIDTH // 2, HEIGHT // 2))
# 刷新屏幕
def draw():
screen.blit('中国地图背景',(0,0)) # 绘制背景
# 绘制每个碎片
for piece in pieces:
piece[0].draw()
# 显示剩余时间
screen.draw.text(f"Time: {time}", (40, 20), fontsize=40, color="white")
# 如果游戏结束,显示胜利或失败的图片
if time == 0:
lose_img.draw()
if count == len(a):
win_img.draw()
# 鼠标按下事件
def on_mouse_down(pos):
global s_piece, s_name
if not game_over:
for piece, name, placed in pieces:
if piece.collidepoint(pos) and not placed: # 检查是否点击到未正确放置的碎片
s_piece = piece # 记录选择的碎片
s_name = name # 记录碎片名称
break
# 鼠标移动事件
def on_mouse_move(pos):
if s_piece != None and 0<pos[0]<1000 and 0<pos[1]<800: # 如果有选中碎片且鼠标未移出窗口,就随着鼠标移动
s_piece.pos = pos # 更新选中碎片的位置
# 鼠标释放事件
def on_mouse_up(pos):
global count, s_piece
if s_piece != None: # 如果有选中的碎片
c_pos = a[s_name] # 选中碎片的正确位置
# 检查当前位置与正确位置的距离
if abs(pos[0] - c_pos[0]) < 50 and abs(pos[1] - c_pos[1]) < 50:
s_piece.pos = c_pos # 放置到正确位置
for piece in pieces:
if piece[0] == s_piece and not piece[2]:
piece[2] = True # 标记为已正确放置
count += 1 # 正确放置的计数器加一
break
s_piece = None # 清除当前选中的碎片
# 更新剩余时间
def update_time():
global time, game_over
if time > 0:
if count < len(a):
time -= 1 # 每秒减少一个时间单位
else:
game_over = True # 游戏结束
# 每隔 1 秒调用更新时间的函数
clock.schedule_interval(update_time, 1)
# 启动游戏
pgzrun.go()