- 新增 jiyi.py 文件,实现字母翻牌记忆游戏功能 - 添加 youxijiemian.py 文件,创建游戏开始界面 - 使用 turtle 和 tkinter 模块分别实现游戏和界面 - 支持选择不同难度的游戏模式
100 lines
4.0 KiB
Python
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()
|