当前位置: 首页 > news >正文

设计井字棋游戏(一)

创建游戏登录注册窗口

用户名admin   密码admin(可自行改变)

主页面

1. 导包

import pickle:导入 pickle 模块,这是一个 Python 的内置模块,用于将 Python 对象序列化和反序列化。序列化是指将对象转换为字节流,以便可以将其保存到文件或数据库中,或者通过网络传输。

from PIL import Image:从 PILPython Imaging Library)模块导入 Image 类。PIL 是一个用于处理图像的第三方库,它提供了广泛的图像处理功能,包括打开、修改和保存不同格式的图像文件。

from tkinter import messagebox tkinter 模块导入 messagebox 子模块。messagebox 提供了显示消息框的函数,这些消息框用于显示警告、错误消息、提示等。

pickle 来存储用户信息,tkinter 来创建用户界面,PIL 来处理图像,以及 messagebox 来显示消息框。

import pickle
import subprocess
import tkinter as tk
from PIL import Image
from tkinter import messagebox
  1. 创建游戏窗口并实现可视化,设置其名称大小,并将窗口循环显示。
win=tk.Tk()
win.title('Welcome')
win.geometry('500x400')#将窗口循环显示win.mainloop()

2. 设置加载图片到登录窗口

首先导包,一定要在上面添加此语法,否则图片将无法显示出来

from PIL import Image

以下为加载图片到窗口中,对齐居中设置(要注意图片要和文件平级在一个下面,否则将不可以显示)

img = Image.open("welcome.gif")
photo_img = tk.PhotoImage(file="welcome.gif")
label = tk.Label(image=photo_img)
label.pack()

3. 在游戏窗口内设置两个标签分别为User namePassword并绘制出其对应的输入框

#两个输入框名称
l2 = tk.Label(win, text="User name",width=10, height=1,font=6)
l2.place(x = 80, y = 160)
l3 = tk.Label(win,text="Password",width=10, height=1, font=6)
l3.place(x = 75, y = 200)
#两个输入框
entry1 = tk.Entry(win, width=25)
entry1.place(x = 220, y = 165)
entry2 = tk.Entry(win, width=25)
entry2.place(x = 220,y = 205)

4. 设置用户名

定义初始名为example@python.com,让其在User name输入框中显示
var_usr_name=tk.StringVar()
var_usr_name.set('example@python.com')
entry_usr_name=tk.Entry(win,textvariable=var_usr_name)
entry_usr_name.place(x=220,y=165)

5. 设置密码输入变为*******(隐藏密码不显示)

通过tk.StringVar()来设置隐藏密码,并让其在Password输入框中显示
var_usr_pwd=tk.StringVar()
entry_usr_pwd=tk.Entry(win,textvariable=var_usr_pwd,show='*')
entry_usr_pwd.place(x=220,y=205)

6. 分别定义usr_login()usr_sign_up()函数

def usr_login ():passdef usr_sign_up():pass

7.在窗口中设置两个按钮分别为LoginSign up,并利用command实现点击触发连接

btn_login=tk.Button(win,text='Login',command=usr_login)
btn_login.place(x=170,y=260)
btn_sign_up=tk.Button(win,text='Sign up',command=usr_sign_up)
btn_sign_up.place(x=270,y=260)

单独创建一个注册页面

  1. 创建游戏窗口并实现可视化,设置其名称大小,并将窗口循环显示。
import tkinter as tk
#设置窗口
win1=tk.Tk()
win1.title('重置密码')
win1.geometry('450x300')#将窗口循环显示win.mainloop()
2.在窗口中设置三个标签和其对应的输入框,三个标签分别命名User name、Password、Confirm password。
#设置标签名称
tk.Label(win1,text='User name :',font=10).place(x=30,y=30)
tk.Label(win1,text='Password :',font=3).place(x=30,y=90)
tk.Label(win1,text='Confirm password :',font=1).place(x=30,y=150)
#设置三个输入框
entry1 = tk.Entry(win1, width=25)
entry1.place(x = 230, y = 30)
entry2 = tk.Entry(win1, width=25)
entry2.place(x = 230,y = 90)
entry3 = tk.Entry(win1, width=25)
entry3.place(x = 230, y = 150)

3. 设置密码输入变为*******(隐藏密码不显示

通过tk.StringVar()来设置隐藏密码,并让其在Passwordconfirm password输入框中显示。
var_Password=tk.StringVar()
entry_Password=tk.Entry(win1,textvariable=var_Password,show='*')
entry_Password.place(x = 230,y = 90)
var_Confirm=tk.StringVar()
entry_Confirm=tk.Entry(win1,textvariable=var_Confirm,show='*')
entry_Confirm.place(x = 230, y = 150)
4.定义按钮,命名为Sign up,设置其xy位置
btn_sign_up=tk.Button(win1,text='Sign up',command=usr_sign_up)
btn_sign_up.place(x=180,y=200)

将游戏登录窗口和注册页面进行连接

  1. 将刚刚定义的usr_login()函数加以完善,使得其在点击时可弹出提示框利用get()得到输入框内的用户输入
usr_name = var_usr_name.get()
usr_pwd = var_usr_pwd.get()print(usr_name)

2. 通过try.. .. except来实现报错提示,FileNotFoundError为报错类型

try:with open('usrs_info.pickle', 'rb')as usr_file:print('1')usrs_info = pickle.load(usr_file)print(usrs_info)except  FileNotFoundError:with open('usrs_info.pickle', 'wb') as usr_file:print('2')usrs_info = {'admin': 'admin'}pickle.dump(usrs_info, usr_file)  # 序列化print('OK')print('usr_name:', usr_name)

3. 再使用if....else语句实现提示窗口的循环交替显示

if usr_name in usrs_info:print('3')if usr_pwd == usrs_info[usr_name]:tk.messagebox.showinfo(title='Welcome', message='How are your?' + usr_name)else:tk.messagebox.showerror(message='您的密码出错了!!请重新输入')else:print(4)is_sign_up = tk.messagebox.askyesno(title='Welcome', message='您还没有注册!需要去注册吗!')if is_sign_up:usr_sign_up()
 

4.再将刚刚定义的usr_sign_up()函数进行完善,从而实现与注册界面的连接。

点击按钮输出“开始注册吧”字样

def usr_sign_up():print("开始注册吧")
usr_sign_up()函数中再定义sign_up()函数,
def sign_up():nn = entry1.get()np = entry2.get()npf = entry3.get()
通过用户的输入得到注册信息,并打开创建usrs_info.pickle文件
  with open('usrs_info.pickle', 'rb') as usr_file:exist_usr_info = pickle.load(usr_file)

通过if…else语句实现报错或创建成功的提示

    if np != npf:tk.messagebox.showerror('Error','Password and confirm password must be the same!')elif nn in exist_usr_info:print("已经注册过了")tk.messagebox.showerror('Error','The user has already signed up!')else:exist_usr_info[nn] = np

打开usrs_info.pickle,显示您已成功注册的提示框

        with open('usrs_info.pickle','wb')as usr_file:pickle.dump(exist_usr_info,usr_file)tk.messagebox.showinfo('Welcome','You have successfully signed up!')btn_sign_up.destroy()

5. 导入之前创建的注册页面(将之前创建的代码复制到)usr_sign_up()函数中。

代码参考上面的单独创建注册页面。

创建游戏窗口

创建游戏窗口并实现可视化,设置其名称大小,并将窗口循环显示。

window = tk.Tk()
window.title('Welcome')
window.geometry('400x500')window.mainloop()

相关文章:

设计井字棋游戏(一)

创建游戏登录注册窗口 用户名admin 密码admin(可自行改变) 主页面 1. 导包 import pickle:导入 pickle 模块,这是一个 Python 的内置模块,用于将 Python 对象序列化和反序列化。序列化是指将对象转换为字节流&am…...

华为手机卡顿(仅针对于部分人来说,我也不清楚是否真的有用)

关机! 之前一段时间手机变得特别卡顿,然后网上搜了一堆教程一点用没有,结果因为昨天下午在考试所以把手机关机了一个多小时,再打开之后手机就变得很流畅,原因不详,但效果显著,如有需要可尝试一…...

7、按钮无法点击

不能点击,打开f12,删除disabled...

开源博客项目Blog .NET Core源码学习(25:App.Hosting项目结构分析-13)

本文学习并分析App.Hosting项目中后台管理页面的文章管理页面。   文章管理页面用于显示、检索、新建、编辑、删除文章数据,以便在前台页面的首页、文章专栏、文章详情页面显示文章数据。文章管理页面附带一新建及编辑页面,以支撑新建和编辑文章数据。…...

第七节 ConfigurationClassParser 源码分析

tips: ConfigurationClassParser 是 Springframework 中的重要类。 本章主要是源码理解,有难度和深度,也枯燥乏味,可以根据实际情况选择阅读。 位置:org.springframework.context.annotation.ConfigurationClassPars…...

零基础代码随想录【Day42】|| 1049. 最后一块石头的重量 II,494. 目标和,474.一和零

目录 DAY42 1049.最后一块石头的重量II 解题思路&代码 494.目标和 解题思路&代码 474.一和零 解题思路&代码 DAY42 1049.最后一块石头的重量II 力扣题目链接(opens new window) 题目难度:中等 有一堆石头,每块石头的重量都是正整…...

2024-5-24 石群电路-15

2024-5-24,星期五,22:15,天气:晴,心情:晴。今天最后一天上班,终于要放返校假啦,开心!!!!!!不过放假也不能耽误…...

功能测试:核心原理、挑战以及解决之道

在软件开发生命周期中,功能测试占据了至关重要的位置。它是确保软件应用按照既定的要求和规格运行的关键测试阶段。功能测试的目的在于验证软件的功能、行为和用户界面等是否达到了业务需求的标准。本文将深入探讨功能测试的概念,执行过程中可能遇到的挑…...

跨境电商赛道,云手机到底能不能化繁为简?

当下国内电商背景: 从零售额的数据来看:随着互联网的普及和消费者购物习惯的改变,国内电商市场规模持续扩大。据相关数据显示,网络消费亮点纷呈,一季度全国网上零售额达到了3.3万亿元,同比增长12.4%。这表…...

linux:信号深入理解

文章目录 1.信号的概念1.1基本概念1.2信号的处理基本概念1.3信号的发送与保存基本概念 2.信号的产生2.1信号产生的五种方式2.2信号遗留问题(core,temp等) 3.信号的保存3.1 信号阻塞3.2 信号特有类型 sigset_t3.3 信号集操作函数3.4 信号集操作函数的使用 4.信号的处理4.1 信号的…...

Android系统的/etc/mkshrc文件

/etc/mkshrc 文件是用于配置 mksh(MirBSD Korn Shell)环境的启动脚本。mksh 是 Android 默认使用的 shell,在 shell 启动时会读取并执行这个文件中的配置。以下是关于 /etc/mkshrc 文件的详细信息及其用途。 /etc/mkshrc 文件的作用 环境配…...

LeetCode199二叉树的右视图

题目描述 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 解析 这一题的关键其实就是找到怎么去得到当前是哪一层级,可以利用队列对二叉树进行层次遍历,但…...

JavaScript 基础

一 JavaScript 的书写形式 1.1 行内式 <input type"button" value"点我一下" onclick"alert(hello akai);" > 注意,JS 中的字符串常量可以用单引号表示,也可以使用双引号表示.HTML 中推荐使用双引号,JS 中推荐使用单引号(使用双引号容易…...

DOS学习-目录与文件应用操作经典案例-type

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 1. 查看文本文件内容 2. 同时查看多个文本文件内容 3. 合并文…...

QT教程-一,初识QT

目录 一,QT是什么&#xff1f;能够使用它做什么&#xff1f; 二&#xff0c;Qt 能够使用的语言 三&#xff0c;Qt主要用于什么领域&#xff1f; 四&#xff0c;Qt开发的软件 一,QT是什么&#xff1f;能够使用它做什么&#xff1f; Qt是一个跨平台的 C 开发库&#xff0c;主…...

SpringBoot搭建Eureka注册中心

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 1、Spring-Cloud Euraka介绍 Spring-Cloud Euraka是Spring Cloud集合中一…...

day 38 435.无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 968.监控二叉树

435.无重叠区间 思路 为了使区间尽可能的重叠所以排序来使区间尽量的重叠&#xff0c;使用左边界排序来统计重叠区间的个数与452. 用最少数量的箭引爆气球恰好相反。 代码 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,…...

ssm/springoot养老院问诊服务预约系统_96316老年人服务系统

2.管理员&#xff1a; &#xff08;1&#xff09;登入注册页面&#xff1a;管理员进行操作时需要是已注册登入的 &#xff08;2&#xff09;权限管理&#xff1a;管理员登入后可以运用权限进行相应的操作管理。 &#xff08;3&#xff09;用户管理&#xff1a;对用户进行删除、…...

WordPress插件优化对提升性能有多大影响?

WordPress插件优化对提升性能的影响可以是非常显著的。插件是WordPress平台的一个重要组成部分&#xff0c;它们可以增强网站的功能和定制性。然而&#xff0c;如果插件没有经过优化&#xff0c;它们可能会成为网站性能的瓶颈。 通过优化插件&#xff0c;可以减少对服务器资源…...

Servlet的response对象

目录 HTTP响应报文协议 reponse继承体系 reponse的方法 响应行 public void setStatus(int sc) 响应头 public void setHeader(String name, String value) 响应体 public java.io.PrintWriter getWriter() public ServletOutputStream getOutputStream() 请求重定…...

请感谢那个不眠的AI:当Agent在夜以继日地干活时,人类的角色正悄悄改变

AI再次攻克了一道数学难题。 就在这个月,OpenAI对外宣布:它的推理模型独立生成了一个原创数学证明,成功证伪了组合几何学中悬而未决近80年的核心猜想——由著名数学家保罗埃尔德什于1946年提出的平面单位距离问题。 消息一出,数学界和AI圈同时炸了锅。不是因为这道题有多…...

大麦网API签名机制解析:从抓包到Python复现全流程

1. 这不是“破解”&#xff0c;而是理解前端签名机制的常规技术推演大麦网的API接口在请求时普遍要求携带一个名为sign的参数&#xff0c;该参数并非固定值&#xff0c;而是由请求体、时间戳、密钥、随机串等多要素动态拼接后经哈希算法生成。很多初学者看到这个字段第一反应是…...

一幅精细绝伦的[城市或地点]微缩模型

提示词&#xff1a; 一幅精细绝伦的[城市或地点]微缩模型&#xff0c;无缝搭建于质朴的木桌之上&#xff0c;仿佛整个场景都是实时手工制作而成。场景囊括了[城市或地点]最具标志性的地标、建筑、街道、交通、文化元素和氛围&#xff0c;周围环绕着密 地址&#xff1a;https://…...

由一次构建 OpenEuler 22.03 dnf源所了解到的

零、说在前面今天在安装 Milvus 的时候&#xff0c;因为部分插件下载过慢&#xff0c;需要重建国内 yum/dnf 源&#xff0c;按照常规的方式重建后报出了一些奇怪的报错。通过这些报错让我了解到了 OpenEuler 22.03 的不同版本在构建 yum/dnf 源的时候是存在区别的。因此将我的处…...

Google三星AI眼镜来了,开发者该关注什么

AI 眼镜又回来了&#xff0c;但这次不只是换个硬件外壳AI 眼镜这个话题&#xff0c;最近又被推到了台前。Google 在 I/O 2026 展示了基于 Android XR 的智能眼镜方向&#xff0c;并把三星、Gentle Monster、Warby Parker 等合作方一起摆上台面。按照目前公布的信息&#xff0c;…...

仅限前500名设计师获取:Midjourney布料质感参数黄金比例表(含棉/丝/涤纶/羊绒/灯芯绒/牛仔布6大基材ISO 105-X12标准映射值)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney布料质感模拟的底层逻辑与设计哲学 Midjourney 并非传统三维渲染引擎&#xff0c;其布料质感生成本质上是基于大规模图像-文本对齐模型&#xff08;CLIP-guided diffusion&#xff09;的跨模…...

别再让日志拖慢你的服务器!深入对比C++同步与异步日志的性能差异(附TinyWebServer实测)

C服务器日志性能优化实战&#xff1a;同步与异步方案深度对比 当你的Web服务器开始承载真实流量时&#xff0c;那些看似无害的日志语句可能正在悄悄吞噬着系统性能。我曾在一个电商促销日亲眼目睹&#xff0c;由于同步日志的阻塞导致服务器响应时间从50ms飙升到800ms&#xff0…...

动态图神经网络实现多商品时序协同预测

1. 项目概述&#xff1a;为什么传统时序模型在多商品预测中频频“掉链子”你有没有遇到过这样的场景&#xff1a;一家区域连锁超市的运营团队&#xff0c;每天盯着几十种SKU的销售数据发愁——酸奶销量突然飙升&#xff0c;但库存系统还在按上周的均值补货&#xff1b;新款保温…...

UPGEN Lighting HDRP:HDRP光照优化与自动化配置方案

1. 这不是又一个“开箱即用”的灯光插件&#xff0c;而是HDRP光照工程的系统性减负方案我第一次在项目里把UPGEN Lighting HDRP拖进Assets文件夹时&#xff0c;并没指望它能解决什么大问题——毕竟Unity官方HDRP模板里自带的Light Explorer、Light Probe Group、Reflection Pro…...

大模型不再“一本正经地胡说八道”!揭秘RAG如何让AI「有据可查」

RAG&#xff08;Retrieval-Augmented Generation&#xff09;是一种结合信息检索与文本生成的AI架构&#xff0c;通过让大语言模型在回答问题前先查找外部知识库&#xff0c;有效缓解幻觉问题&#xff0c;并确保答案基于最新、专有数据。RAG通过文档切块、向量嵌入、向量检索和…...