Python实验:关灯游戏

news2024/9/30 13:21:44

文章目录

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


前言

这是一个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)

三、运行结果

小地图,容易难度:

在这里插入图片描述

中地图,中等难度:

在这里插入图片描述

大地图,困难难度:

在这里插入图片描述

四、完整代码链接

代码下载链接

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

boss app sig及sp参数,魔改base64

前言 大家好呀,欢迎来到我的博客.2023年12月4日,boss web上线了最新的zp_token,环境检测点又增加了,与此同时app端的关键加密so从32位换成了64位,两者ida反编译so的时候都有反调试,无法直接f5,需要手动调整让ida重新识别.google了一下几乎找不到任何有关boss app的文章,所以这…

玩转 Scrapy 框架 (一):Scrapy 框架介绍及使用入门

目录 一、Scrapy 框架介绍二、Scrapy 入门 一、Scrapy 框架介绍 简介&#xff1a; Scrapy 是一个基于 Python 开发的爬虫框架&#xff0c;可以说它是当前 Python 爬虫生态中最流行的爬虫框架&#xff0c;该框架提供了非常多爬虫的相关组件&#xff0c;架构清晰&#xff0c;可扩…

SpringSecurity深度解析与实践(3)

这里写自定义目录标题 引言SpringSecurity之授权授权介绍java权限集成 登录失败三次用户上锁 引言 SpringSecurity深度解析与实践&#xff08;2&#xff09;的网址 SpringSecurity之授权 授权介绍 Spring Security 中的授权分为两种类型&#xff1a; 基于角色的授权&#…

基于Springboot的留守儿童爱心网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的留守儿童爱心网站(有报告)。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring…

怎么做好数字化工厂的建设?

怎样建设好的数字化工厂&#xff0c;不但须要有充足的费用预算&#xff0c;更加需要科学研究的计划和设计方案&#xff0c;一般做好智能化基本建设&#xff0c;务必要根据下列流程&#xff1a; 一.信息管理系统的计划和设计方案   许多的工厂会购买许多的单独的信息管理系统&…

基于SpringBoot+Vue的办公OA系统

开发环境 IDEA JDK1.8 MySQL8.0Node14.17.0 系统简介 本系统为前后端分离项目&#xff0c;主要拥有两个身份登录系统&#xff0c;管理员可以发布公告等信息&#xff0c;员工登录可以申请请假等信息&#xff0c;系统难度适中&#xff0c;适合学习研究使用&#xff0c;具体请…

深度学习中用来训练的train.py 探究学习2.0( 数据预处理)

数据预处理 下列代码为train.py中常见的一些数据处理方法 train_transform transforms.Compose([transforms.Resize((224, 224)),transforms.RandomVerticalFlip(),# 随机旋转&#xff0c;-45度到45度之间随机选transforms.RandomRotation(45),# 从中心开始裁剪transforms.C…

DaVinci各版本安装指南

链接: https://pan.baidu.com/s/1g1kaXZxcw-etsJENiW2IUQ?pwd0531 ​ #2024版 1.鼠标右击【DaVinci_Resolve_Studio_18.5(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到 DaVinci_Resolve_Studio_18.5(64bit)】。 2.打开解压后的文…

rk3588 之启动

目录 uboot版本配置修改编译 linux版本配置修改编译 启动sd卡启动制作spi 烧录 参考 uboot 版本 v2024.01-rc2 https://github.com/u-boot/u-boot https://github.com/rockchip-linux/rkbin 配置修改 使用这两个配置即可&#xff1a; orangepi-5-plus-rk3588_defconfig r…

Flink 客户端操作命令及可视化工具

Flink提供了丰富的客户端操作来提交任务和与任务进行交互。下面主要从Flink命令行、Scala Shell、SQL Client、Restful API和 Web五个方面进行整理。 在Flink安装目录的bin目录下可以看到flink&#xff0c;start-scala-shell.sh和sql-client.sh等文件&#xff0c;这些都是客户…

【C->Cpp】深度解析#由C迈向Cpp(2)

目录 &#xff08;一&#xff09;缺省参数 全缺省参数 半缺省参数 缺省参数只能在函数的声明中出现&#xff1a; 小结&#xff1a; &#xff08;二&#xff09;函数重载 函数重载的定义 三种重载 在上一篇中&#xff0c;我们从第一个Cpp程序为切入&#xff0c;讲解了Cpp的…

纯HTML代码实现给图片增加水印并下载保存到本地

<!DOCTYPE html> <html> <head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1, maximum-scale1, user-scalableno"/><title>图片水印打码工具-宋佳乐博客</tit…

智能优化算法应用:基于白鲸算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于白鲸算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于白鲸算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.白鲸算法4.实验参数设定5.算法结果6.参考文献7.MA…

vue3 新项目 - 搭建路由router

创建router/index 文件 main.ts 安装 router 然后 在 app下面 去 设置 路由出口

P6 音频格式—— AAC

目录 前言 01 AAC是什么&#xff1f; 02 为什么需要进行AAC进行音频压缩处理&#xff1f; 03 AAC的特点以及优势 04 AAC格式详解&#xff1a; 4.1. ADIF的数据结构&#xff1a; 4.1.1 ADIF Header具体的表格: 4.2. ADTS的结构&#xff08;重点&#xff09;&#xff1a; …

项目管理4321方法论

文章目录 一、项目立项准备&#xff08;4步&#xff09;case1、识别价值---解决背后痛点的才是价值&#xff0c;价值是做任何事情的出发点case2、明确目标---支撑价值实现的&#xff0c;目标是 具体/可衡量/可达到/相关性/有时限的case3、识别干系人---找对人才能做对事&#x…

MYSQL函数\约束\多表查询\事务

函数 字符串函数 数值函数 mod就是取余 日期函数 流程函数 约束 外键约束 删除更新\外键 多表查询 多表关系 一对多 多对多 一对一 多表查询 内连接 select e.name d.name from emp e join dept d on e.id d.id; 外连接 select emp.*, d.name from emp left join tm…

堆与二叉树(下)

接着上次的&#xff0c;这里主要介绍的是堆排序&#xff0c;二叉树的遍历&#xff0c;以及之前讲题时答应过的简单二叉树问题求解 堆排序 给一组数据&#xff0c;升序&#xff08;降序&#xff09;排列 思路 思考&#xff1a;如果排列升序&#xff0c;我们应该建什么堆&#x…

【贪心】买卖股票的最佳时机含手续费

/** 贪心&#xff1a;每次选取更低的价格买入&#xff0c;遇到高于买入的价格就出售(此时不一定是最大收益)。* 使用buy表示买入股票的价格和手续费的和。遍历数组&#xff0c;如果后面的股票价格加上手续费* 小于buy&#xff0c;说明有更低的买入价格更新buy。如…