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.mzph.cn/news/375806.shtml

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

相关文章

解决Ubuntu14.04在外接显示器不能指定问题的最佳分辨率

通常这种情况发生。在System Settings -> display 你会发现多出了一个 unknown display。这往往是因为你使用质量低劣的视频电缆&#xff0c;例如&#xff0c;几美元VGA线。解决方案有&#xff12;&#xff0c;质量好的一个改变钢带&#xff08;有磁场干扰&#xff09;VGA线…

基础练习 - 数值交换

题目 1 声明两个变量&#xff1a;int n1 10,n2 20,要求将两个变量叫唤&#xff0c;最后输出n1为20,n2为10. (扩展*: 不使用第三个变量如何交换) 解决方案 基本方法 private static void BasicMethod(){int n1 10;int n2 20;Console.WriteLine("n1…

python计算圆的面积

用Python创建一个脚本&#xff0c;要求&#xff1a; 能计算半径为2的圆的面积保留10位小数可以直接执行 #!/usr/bin/env python3 import math print("Area is:{:.10f}".format(math.pi*4))计算圆的面积要用到pi&#xff0c;所以我们引用模块math

Visual Studio 配色方案

字体&#xff1a;Fixedsys Excelsior 字体大小&#xff1a;12 配色方案&#xff1a;http://studiostyles.info 导入步骤&#xff1a; 工具->导入和导出设置->导入选定的环境设置->否&#xff0c;仅导入新设置->“浏览”->下载的vssetings文件->完成。 转载于…

昆明学院计算机专业在哪个校区,昆明学院有几个校区及校区地址

昆明学院有几个校区及校区地址2017-06-19 11:15:56文/韩竞仪最近有很多考生和家长咨询小编&#xff0c;昆明学院有几个校区&#xff0c;今年新生会被分配到哪个校区?哪个校区好?等相关问题&#xff0c;下面小编统一回复一下考生们的问题。昆明学院有3个校区&#xff0c;分别是…

python列表总结

列表方法append()&#xff1a;在列表末尾添加元素列表方法insert()&#xff1a;在列表任意位置插入元素&#xff0c;a.insert(0,1)&#xff0c;在列表的0号位置插入元素1.列表方法count(s)&#xff1a;返回s在列表中出现的次数列表方法remove(s)&#xff1a;移除列表中的第一个…

Swift基本语法

Swift基本语法 原文:Swift基本语法Swift基本语法 简介 1.什么是Swift Swift是苹果于2014年WWDC&#xff08;苹果开发者大会&#xff09;发布的全新编程语言 Swift在天朝译为“雨燕” 跟Objective-C一样&#xff0c;可以用于开发iOS、Mac应用程序 苹果从2010年7月开始设计Swift语…

2018华工计算机应用基础作业,计算机应用基础平时作业2019

计算机应用基础平时作业2019Tag内容描述&#xff1a;1、1.简述启动控制面板的常用方法。(至少列出三种) 答&#xff1a;常用打开控制面板的方法&#xff1a;1)点开始&#xff0c;选择控制面板打开&#xff1b;2)打开我的电脑&#xff0c;选择控制面板&#xff1b;3)点开始运行&…

计算机系统组织结构,第4章 操作系统计算机组织结构.ppt

第4章 操作系统计算机组织结构第4章 计算机组织结构 前言 操作系统提供了抽象以简化对硬件的使用&#xff0c;单线程是冯?诺依曼计算机的操作抽象&#xff0c;如果理解了一个冯?诺依曼计算机是如何执行程序的&#xff0c;就能理解进程背后的知识&#xff0c;对操作系统的深入…

Solution 19: Fibonacci数列

问题描述 求Fibonacci数列的第n项。Fibonacci数列为1,1,2,3,5,... 解决思路 (1) 递归&#xff0c;指数级时间复杂度&#xff1b; (2) 循环&#xff0c;O(n)时间复杂度&#xff1b; (3) 矩阵乘法&#xff0c;O(logn)时间复杂度&#xff1b; (4) 公式法&#xff0c;O(1)时间复杂度…

boost::unordered_map 和 std::map 的效率 与 内存比较

例子链接&#xff1a;http://blog.csdn.net/gamecreating/article/details/7698719 结论: unordered_map 查找效率快五倍&#xff0c;插入更快&#xff0c;节省一定内存。如果没有必要排序的话&#xff0c;尽量使用 hash_map(unordered_map 就是 boost 里面的 hash_map 实现)。…

软件可靠性指标mtbf测试评估,软件可靠性评估.pdf

软件可靠性评估软件可靠性工程基础——软件可靠性评估北京航空航天大学可靠性与系统工程学院目的 理解什么是软件可靠性评估&#xff0c;基本原理 掌握和应用典型的软件可靠性模型 了解比较软件可靠性模型的主要方法 理解稳定使用阶段的软件可靠性评估 理解增长测试中…

模型和控制器-起步阶段

MVVM简介 针对客户端应用开发AngularJS吸收了传统的MVC基本原则。MVC(Model-View-Controll)设计模式针对不同的人可能意味不同的东西 ,AngularJS并不执行传统意义上的MVC&#xff0c;更接近于MVVM。 MVVM模式是Model-View-ViewMode模式的简称。由视图(View)、视图模型(ViewMode…

Apache开启Gzip压缩

1. 编辑Apache的httpd.conf文件 vim /etc/httpd/conf/httpd.conf 2. 开启mod_deflate.so模块 LoadModule deflate_module modules/mod_deflate.so 3. 对该模块进行配置 # ShiftG到最下一行添加如下内容<IfModule mod_deflate.c> # 压缩等级 9 DeflateCompressionLevel 9 …

计算机的网络与结构,计算机结构与组成29-网络.ppt

计算机结构与组成29-网络CS61C L221 Performance ? UC Regents I/O Review I/O gives computers their 5 senses I/O speed range is 12.5-million to one Differences in processor and I/O speed ? synchronize with I/O devices before use Polling works, but expensive …

Canvas动画 位图缓存提高效率和对应的内存问题

对一个矢量图动画&#xff0c;开启位图缓存能大大提高运行效率。所谓开启位图缓存&#xff0c;其实要自己动手&#xff0c;先创建一个临时canvas&#xff0c;然后把矢量图绘制到这个canvas上&#xff0c;到了实际绘制时&#xff0c;直接把这个临时canvas拷贝到真正canvas上。而…

ASP.NET MVC 学习第一天

今天开始第一天学习asp.net mvc&#xff0c;写的不是很好&#xff0c;高手不要喷&#xff0c;希望大家能一起进步学习。 好了&#xff0c;开始学习 新建项目&#xff0c;选择mvc 4应用程序 接下来选择基本&#xff0c;视图引擎当然要选择Razor&#xff0c;如果在选择aspx那我们…

python提取字符串中的数字

字符串存储在string.txt中&#xff0c;将字符串中的数字提取出来&#xff0c;组成心得字符串&#xff0c;并打印输出。 #!/usr/bin/env python3 fileopen(/home/user/string.txt) file_contextfile.read() i0 string while i < len(file_context):if file_context[i].isdig…

计算机显示发送报告,Word文档打不开提示发送错误报告的解决方法

经常使用word文档的人员都会碰到过这种发送错误报告情况&#xff0c;既然有这个问题就要查个究竟什么原因造成&#xff0c;才能完美解决&#xff0c;那么今天小编就在这里讲解word文档发送错误报告的方法。根本原因是&#xff1a;打开word出现提示word发送错误报告的故障其主要…

asp.net mvc 如何在View中获取Url参数的值

如果url是 /home/index?id3 直接Request就ok。 但是如果路由设定为&#xff1a;{controller}/{action}/{id} url是 /home/index/3 这时想在页面View中获取参数id的值&#xff0c;该怎么获取&#xff1f; 查了下资料好多人都利用Action获取到参数值后&#xff0c;用Viewdata…