Python实验:关灯游戏

文章目录

  • 前言
  • 一、设计表
  • 二、关键代码
  • 三、运行结果
    • 小地图,容易难度:
    • 中地图,中等难度:
    • 大地图,困难难度:
  • 四、完整代码链接
  • 总结


前言

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

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

扩展内容:

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

  2. 请设计并实现界面功能,允许玩家选择游戏难度,分别为:
    容易:一开始有20%的格子状态为翻转状态
    中等:一开始有40%的格子状态为翻转状态
    困难:一开始有60%的格子状态为翻转状态

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

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

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

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

补充说明:
(1) 你可以使用任何python相关技术实现图形界面,包括但不限于Tkinter, wxPython, pyside6等,但必须界面和功能完整,设计布局合理美观
(2) 你可以使用任何数据库进行数据保存,包括任何的关系数据库或非关系数据库,但不得直接使用文件或CSV


一、设计表

使用mysql数据库,设计两张表,user表用来记录用户基本信息,play_info表用来记录用户游戏过程信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、关键代码


# 注册
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)

三、运行结果

小地图,容易难度:

在这里插入图片描述

中地图,中等难度:

在这里插入图片描述

大地图,困难难度:

在这里插入图片描述

四、完整代码链接

代码下载链接

总结

@作者:加辣椒了吗?
简介:憨批大学生一枚,喜欢在博客上记录自己的学习心得,也希望能够帮助到你们!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/268160.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

游戏软件提示d3dcompiler_43.dll的五个解决方法,亲测靠谱

在使用电脑进行工作&#xff0c;玩游戏的时候&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“D3DCompiler_43.dll丢失”的提示。D3DCompiler_43.dll是一个非常重要的动态链接库文件。它是由DirectX SDK提供的&#xff0c;用于编译和优化DirectX着色器代码的…

CnosDB:深入了解时序数据处理函数

CnosDB 是一个专注于时序数据处理的数据库&#xff0c;旨在解决时序数据存储与分析问题&#xff0c;为用户提供高效的时序数据管理与查询便利。为了实现这一目标&#xff0c;CnosDB 实现了一系列专用函数&#xff0c;快来和CC一起来看看吧&#xff01; CnosDB&#xff1a;深入了…

进程间通信---信号

什么是信号&#xff1f; 】 信号处理流程 信号类型 发送信号的函数 参数sig&#xff1a;代表 信号 接收信号的函数 参数 handle 的处理方式有几种&#xff1f; 实例代码 实例逻辑 图中的等待操作使用&#xff1a;pause&#xff08;&#xff09;函数 代码 在这里插入代码片…

区域摇杆制作

区域摇杆 介绍界面制作脚本总结 介绍 我之前讲过摇杆&#xff0c;那么看到现在游戏做区域摇杆的更多一些&#xff0c;那么我们来剖析一下。说白了区域摇杆就是在之前固定摇杆的基础上增加了一个启动事件&#xff0c;当我们开始拖拽的时候&#xff0c;我们将摇杆现实启动然后位…

uniapp cli开发和HBuilderX开发

uniapp cli开发和HBuilderX开发 前言 uniapp是一个跨平台的开发框架&#xff0c;可以开发出微信小程序、支付宝小程序、百度小程序、头条小程序、H5、App等&#xff0c;开发者只需要写一套代码&#xff0c;就可以发布到各个平台&#xff0c;大大提高了开发效率。 uniapp的开…

动态规划系列 | 最长上升子序列模型(上)

文章目录 最长上升子序列回顾题目描述问题分析程序代码复杂度分析 怪盗基德的滑翔翼题目描述输入格式输出格式 问题分析程序代码复杂度分析 登山题目描述输入格式输出格式 问题分析程序代码复杂度分析 合唱队形题目描述输入格式输出格式 问题分析程序代码复杂度分析 友好城市题…

驾驶未来:百度Apollo自动驾驶技术的探索与实践(文末赠送apollo周边)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式&#xff1a;通过连接报名观看课程&#xff0c;即可免费获取精美周边 ⛳️活动链接&#xf…

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力 代码CrissCrossAttention注意力ECAAttention通道注意力EMAU期望最大化注意力加入方法各种yaml加入结构本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中…

【5G PHY】NR参考信号功率和小区总传输功率的计算

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

什么是网站监控?

网站监控是跟踪网站的可用性和性能&#xff0c;以最小化宕机时间&#xff0c;优化性能并确保顺畅的用户体验。维护网站正常运行对于任何企业来说都是至关重要的&#xff0c;因而对大多数业务来说&#xff0c;网站应用监控都是一个严峻的挑战。Applications Manager网站应用监控…

2024年【金属非金属矿山安全检查(地下矿山)】模拟试题及金属非金属矿山安全检查(地下矿山)模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山安全检查&#xff08;地下矿山&#xff09;模拟试题参考答案及金属非金属矿山安全检查&#xff08;地下矿山&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及金属非金属矿山安全检查&#…

C++系列第九篇 数据类型下篇 - 复合类型(指针高级应用)

系列文章 C 系列 前篇 为什么学习C 及学习计划-CSDN博客 C 系列 第一篇 开发环境搭建&#xff08;WSL 方向&#xff09;-CSDN博客 C 系列 第二篇 你真的了解C吗&#xff1f;本篇带你走进C的世界-CSDN博客 C 系列 第三篇 C程序的基本结构-CSDN博客 C 系列 第四篇 C 数据类型…

redis基本用法学习(C#调用FreeRedis操作redis)

FreeRedis属于常用的基于.net的redis客户端&#xff0c;EasyCaching中也提供适配FreeRedis的包。根据参考文献4中的说法&#xff0c;FreeRedis和CsRedis算是近亲&#xff08;都是GitHub中账号为2881099下的开源项目&#xff09;&#xff0c;因此其用法特别相似。FreeRedis的主要…

MoveIt!生成的机器人**_moveit_config包中config文件和launch文件

MoveIt!生成的机器人**_moveit_config包中config文件和launch文件 MoveItconfig文件srdfcartesian_limits.yamljoint_limits.yamlfake_controllers.yamsimple_moveit_controllers.yamlgazebo_controllers.yaml1. ros_controllers.yamlkinematics.yamlsensors_3d.yamlompl_plann…

【Qt之Quick模块】6. QML语法详解_1 基础语法与三种导入语句

前言 通过以上1-5文档的介绍&#xff0c;Quick与QML的概念及QML语法、类型、文件作用等已叙述个大概&#xff0c;接下来是对QML语法进行展开来说。 其实&#xff0c;学习任何一门语言或者做任何一件事情&#xff0c;并不用一开始就要求尽善尽美&#xff0c;做个无懈可击&…

vue3组件通信(父给子传参,子调用父的方法,父调用子的方法,顶层组件给底层组件传参,底层组件调用顶层组件的方法)

目录 1.父传子&#xff08;父给子传参&#xff09; 2.子传父&#xff08;子调用父的方法&#xff09; 3.父调用子的方法 4.顶层给底层传参&#xff0c;底层调用顶层的方法 5.模板引用 1.父传子&#xff08;父给子传参&#xff09; ①.步骤 父组件中给子组件通过绑定属性…

收银管理系统怎样帮助商家很好地经营服装门店

收银管理系统对于服装门店的经营可以提供多方面的帮助&#xff0c;以下是一些具体的优势和功能&#xff1a; 1. 快速准确的收银&#xff1a;收银管理系统可以实现快速、准确的收银操作&#xff0c;通过条码扫描或手动输入商品信息&#xff0c;自动计算价格并生成收据。这样可以…

nacos配置中心配置已经常见错误总结

&#x1f4bb;目录 前言1、基础架构2、依赖3、配置文件3.1、bolg-product配置文件3.1.1、application.yml配置文件3.1.2、bootstrap.yml配置文件3.1.3、nacos远程配置 3.2、bolg-system3.1.1、application.yml配置文件3.1.2、bootstrap.yml配置文件3.2.3、nacos远程配置 4、测试…

【文本处理】正则表达式

一、简介 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字符&…

在Redis客户端设置连接密码 并演示密码登录

我们先连接到Redis服务 然后 我们要输入 CONFIG SET requirepass “新密码” 例如 CONFIG SET requirepass "A15167"这样 密码就被设置成立 A15167 我们 输入 AUTH 密码 例如 AUTH A15167这里 返回OK说明成功了 然后 我们退出在登录就真的需要 redis-cli -h IP地…