Python实验:关灯游戏

文章目录


前言

这是一个Python实验作业,内容如下:

题目要求:请完成《关灯游戏》,并完成以下扩展内容:

扩展内容:

  1. 请设计并实现界面功能,允许玩家选择初始地图的大小,分别为:小(5x5),中(8x8),大(12x10),玩家选择之后立即刷新窗口界面并重设地图

  2. 请设计并实现界面功能,允许玩家选择游戏难度,分别为:

    容易:一开始有20%的格子状态为翻转状态

    中等:一开始有40%的格子状态为翻转状态

    困难:一开始有60%的格子状态为翻转状态

  3. 游戏开始之前,提示玩家输入唯一的用户名,用于保留该玩家的闯关记录

  4. 按照玩家选择的地图大小和难度开始游戏,游戏过程中记录玩家闯关的总时间以及翻转次数(即开关灯的次数)

  5. 玩家通关成功后,保存相关信息到数据库,表结构可以自定,但应当至少包含以下信息:

  • 玩家选择的地图大小
  • 玩家选择的难度
  • 玩家通关的日期时间
  • 玩家通关所用的总时间
  • 玩家通关所用的总点击次数

补充说明:

(1) 你可以使用任何python相关技术实现图形界面,包括但不限于Tkinter, wxPython, pyside6等,但必须界面和功能完整,设计布局合理美观

(2) 你可以使用任何数据库进行数据保存,包括任何的关系数据库或非关系数据库,但不得直接使用文件或CSV


一、设计表

使用mysql数据库,设计两张表,user表用来记录用户基本信息,play_info表用来记录用户游戏过程信息


二、关键代码

python 复制代码
# 注册
def register(action):
    username = action
    with conn.cursor() as cursor:
        query = "INSERT INTO user (user_name) VALUES (%s)"
        cursor.execute(query, username)
        conn.commit()
    print("注册登录成功!")


# 登录
def login(action):
    username = action
    with conn.cursor() as cursor:
        query = "SELECT * FROM user WHERE user_name=%s"
        cursor.execute(query, username)
        if cursor.fetchall():
            print("登录成功!")
        else:
            print("该玩家为第一次登录,自动为其注册")
            register(action)

# 选择地图
def get_map(prompt):
    while True:
        try:
            user_input = int(input(prompt))
            if user_input < 1 or user_input > 10:
                print("输入无效,请输入1-3的数字。")
            else:
                return user_input 
        except ValueError:
            print("输入无效,请输入一个整数。")


# 选择难度
def get_difficulty(prompt):
    while True:
        try:
            user_input = int(input(prompt))
            if user_input < 1 or user_input > 10:
                print("输入无效,请输入1-3的数字。")
            else:
                return user_input 
        except ValueError:
            print("输入无效,请输入一个整数。")
# 画表格
def draw_table(row,width,height):
    for i in range(0 ,row):
        cv.create_line(10, 10+i*40, width, 10+i*40, arrow='none')
        cv.create_line(10+i*40, 10, 10+i*40, height, arrow='none')  


# 画灯
def draw_lamp(row,column):
    for i in range(0,row):
        for u in range(0,column):
            if l[i][u] == 'you':
                # 亮灯
                cv.create_oval(i*40+10, u*40+10, (i+1)*40+10,
                               (u+1)*40+10, outline='white', fill='yellow', width=2)
                # 灭灯
            else:
                cv.create_oval(i*40+10, u*40+10, (i+1)*40+10,
                               (u+1)*40+10, outline='white', fill='white', width=2)
# 单击事件函数
def do_event(event):
    x1 = (event.x - 10) // 40
    y1 = (event.y - 10) // 40
    # 翻转(x1,y1)处灯的状态
    reserve(x1, y1)
    # 翻转(x1,y1)周围灯的状态
    # 左侧灯的状态反转
    if x1 != 0:
        reserve(x1 - 1, y1)
    # 右侧灯的状态反转
    if x1 != row-1:
        reserve(x1 + 1, y1)
    # 上侧灯的状态反转
    if y1 != 0:
        reserve(x1, y1 - 1)
    # 下侧灯的状态反转
    if y1 != column-1:
        reserve(x1, y1 + 1)
    draw_lamp(row,column)

三、运行结果

小地图,容易难度:

中地图,中等难度:

大地图,困难难度:

四、完整代码链接

代码下载链接

总结

@作者:加辣椒了吗?

简介:憨批大学生一枚,喜欢在博客上记录自己的学习心得,也希望能够帮助到你们!

相关推荐
星空椰19 分钟前
Python 面向对象高级:继承与类定义详解
开发语言·python
白露与泡影36 分钟前
2026大厂Java面试题大全!牛客网最新版
java·开发语言
凯瑟琳.奥古斯特37 分钟前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
风之所往_1 小时前
Python 3.4 新特性全面总结
python
雪度娃娃1 小时前
转向现代C++——在意为改写的函数添加 override
开发语言·c++
太阳上的雨天2 小时前
任何格式的文件转Markdown
python·ai
yaoxin5211232 小时前
419. 现代 Java IO 最佳实践 - 写入文本文件
java·windows·python
喵星人工作室2 小时前
C++火影忍者1.1.2
开发语言·c++
weixin_468466852 小时前
纳米 AI 搜索新手极速上手指南
人工智能·python·深度学习·搜索引擎·ai·语言模型·自然语言处理
凯瑟琳.奥古斯特2 小时前
数据库原理选择题精选
数据库·python·职场和发展