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 = actionwith conn.cursor() as cursor:query = "INSERT INTO user (user_name) VALUES (%s)"cursor.execute(query, username)conn.commit()print("注册登录成功!")# 登录
def login(action):username = actionwith 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) // 40y1 = (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.hqwc.cn/news/298999.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多维时序 | MATLAB实CNN-BiGRU-Mutilhead-Attention卷积网络结合双向门控循环单元网络融合多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现CNN-BiGRU-Mutilhead-Attention卷积网络结合双向门控循环单元网络融合多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现CNN-BiGRU-Mutilhead-Attention卷积网络结合双向门控循环单元网络融合多头注意力机制多变量时间序列预测预测效果基本介…

NUAA-云计算-考试

19级期末 问题 答案: md格式 自己想办法看 # 随堂测验#### 一、请简述GFS 的系统架构和特点。**1. 系统架构**- GFS将整个系统节点分为三类角色&#xff1a;- Client&#xff08;客户端&#xff09;&#xff1a;Client是GFS提供给应用程序的访问接口&#xff0c;以库文件的…

SpringBoot2.x+mybatis plus3.x集成Activit7版本

文/朱季谦 在Activiti6版本当中&#xff0c;若要集成到Springboot里&#xff0c;需要写一些额外的配置类&#xff0c;我曾经在Activiti工作流框架学习笔记&#xff08;二&#xff09;之springboot2.0整合工作流Activiti6.0一文当中总结过相关配置过程&#xff0c;感兴趣的同学…

ssh工具 向指定的ssh服务器配置公钥

此文分享一个python脚本,用于向指定的ssh服务器配置公钥,以达到免密登录ssh服务器的目的。 效果演示 🔥完整演示效果 👇第一步,显然,我们需要选择功能 👇第二步,确认 or 选择ssh服务器 👇第三步,输入ssh登录密码,以完成公钥配置 👇验证,我们通过ssh登录…

AI时代下,如何看待“算法利维坦”?程序员客栈程序员客栈​

ChatGPT的浪潮从2022年袭来后&#xff0c;至今热度不减&#xff0c;呈现出蓬勃发展的趋势。AI家居、医疗、教育、金融、公益、农业、艺术......AI真的已经走进了生活的方方面面&#xff0c;我们仿佛已经进入了AI时代&#xff0c;势不可挡。人工智能水平如此之高&#xff0c;不禁…

学习在UE中通过Omniverse实现对USD文件的Live-Sync(实时同步编辑)

目标 前一篇 学习了Omniverse的一些基础概念。本篇在了解这些概念的基础上&#xff0c;我想体验下Omniverse的一些具体的能力&#xff0c;特别是 Live-Sync (实时同步) 相关的能力。 本篇实践了使用Omniverse的力量在UE中建立USD文件的 Live-Sync 编辑。由于相关的知识我是从…

AI进化太快了!Stability AI开源视频生成大模型Stable Video Diffusion

对于 Stable Diffusion&#xff0c;想必读者朋友们对此都不陌生。 自 Stability AI 公司发布 SD&#xff08;全称&#xff1a;Stable Diffusion) 以来&#xff0c;受到了很多人的喜爱。 SDXL 效果 随后技术升级&#xff0c;又发布了 SDXL&#xff0c;名字很有喜感&#xff0c…

青岛农业大学 百度网盘,青岛农业大学参考书目

大家好&#xff0c;本文将围绕青岛农业大学c语言程序设计展开说明&#xff0c;javase青岛农业大学教材答案是一个很多人都想弄明白的事情&#xff0c;想搞清楚青岛农业大学 百度网盘需要先了解以下几个事情。 文章目录 前言一、需要安装什么软件&#xff1f;二、代码准备 1.fid…

【期末复习】微信小程序复习大纲( 1- 5 章)

前言&#xff1a; 这周开始进入期末复习周&#xff0c;没时间看C/C、linux等知识了&#xff0c;先把期末考试必考的知识捋一遍。 目录 第一章 微信小程序入门 一、填空题 二、判断题 三、选择题 四、简答题 第二章 微信小程序页面制作 一、填空题 二、判…

Java学习时间和日期

1 常用类 1.1 Date 表示日期 具体类 设置时间 1.2 Calendar 表示日历 抽象类 设置日历的设定日期 void set(int year,int month,int date); void set(int year,int month, int date, int hour, int minute,int second); void setTime(Date d); int get(int field)&#…

Parvex驱动器维修帕瓦斯控制器DIGIVEX DSD

Parker驱动器维修&#xff1a;由不同的模拟功率控制信号&#xff0c;由IC级驱动器GND/PGND&#xff08;功率接地&#xff09;的信号控制&#xff0c;应分别接地。使用IC的小信号部分的控制IC&#xff0c;SGND信号与功率地之间的连接点。合理的方法是地信号地返回到功率层的一个…

RPC 实战与原理

文章目录 什么是 RPC&#xff1f;RPC 有什么作用&#xff1f;RPC 步骤为什么需要序列化&#xff1f;零拷贝什么是零拷贝&#xff1f;为什么需要零拷贝&#xff1f;如何实现零拷贝&#xff1f;Netty 的零拷贝有何不同&#xff1f; 动态代理实现HTTP/2 特性为什么需要服务发现&am…