设计井字棋游戏(一)

创建游戏登录注册窗口

用户名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()

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

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

相关文章

如同“水生态”的存储引擎|OceanBase数据转储合并技术解读(一)

本系列文章主要围绕 OceanBase数据库存储引擎中的转储合并进行解读,涉及到数据存储、转储合并、数据校验等方面的内容,旨在让读者了解OceanBase数据库的存储引擎中与转储合并有关的各种概念,帮助读者更好地理解OceanBase数据库的存储技术原理…

基于STM32实现智能饮水机控制系统

目录 引言环境准备智能饮水机控制系统基础代码示例:实现智能饮水机控制系统 温度传感器数据读取水泵和加热器控制水位传感器数据读取用户界面与显示应用场景:家庭和办公室的智能饮水管理问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在S…

关于pdfbox读取pdf

最近,想着将pdf的文件进行读取其内容,发现了一个比较好用的依赖pdfbox。目前使用这个依赖,进行实现一个简单实例,如果之后需要使用到更深的了解,会进行更新。这里提醒一下:jdk8尽量采用pdfbox3.x版本。 对…

Linux一键安装Docker、kkfileviewer

Linux一键安装Docker、kkfileviewer 一、安装docker 安装docker脚本 vi initDocker.sh脚本内容 #安装前先更新yum,防止连接镜像失败 yum -y update#卸载系统之前的docker(可选择,我这里直接注释了) #yum remove docker docker…

香橙派KunpengPro测评之使用C语言操控40pin引脚

香橙派KunpengPro测评之使用C语言操控40pin引脚 香橙派KunpengPro介绍香橙派实物图香橙派登录界面香橙派KunpengPro的登录界面香橙派KunpengPro的原始桌面香橙派KunpengPro内安装了VScode等软件香橙派KunpengPro的终端 香橙派硬件参数核心性能图形与显示接口丰富性扩展与兼容性…

【驱动】串口硬件流控和RS485自动收发

1、流控(Flow Control) 串口通信中的流控(Flow Control)是一种用于管理数据传输速率,防止数据丢失的机制。 流控可以分为硬件流控(Hardware Flow Control)和软件流控(Software Flow Control),两者的目的都是确保发送方和接收方在数据传输过程中同步。 1.1 硬件流控…

十四天学会Vue——Vue核心(理论+实战)上篇(第一天)

一、Vue核心(上篇) 热身tops:选取开发模式 ①用于开发模式 我们只需要知道 我们是开发模式,开发模式他会跟你提示代码出现错误的地方以及出错原因,而生产模式比较简洁。 ②用于生产模式 1.1 new Vue()实例 了解Vue&a…

数据库语法树优化

目录 一、σ、π、⋈ 1.选择σ 2.投影π 3.连接⋈ 二、 构建语法树 ① 解读sql语句 ② 写出关系代数表达式 ③ 画出语法树 三、优化语法树 四、练习 语法树优化方法 一、σ、π、⋈ 1.选择σ 选择就是在关系R中选择满足给定条件的诸元组。 通过条件SdeptIS选择出系别…

基于香橙派搭建家庭网盘

一、概述 家庭网盘是一种用于家庭用户的在线存储和文件共享服务。它允许家庭成员在云端存储、同步和分享照片、视频、文档等文件,方便快捷地访问和管理个人和家庭数据。家庭网盘通常提供安全可靠的数据存储和备份功能,保障用户数据的安全性。此外&#x…

Day-02面向对象

一、匿名函数 和函数的作用一致,都是进行代码逻辑的封装, 区别1 在定义时,匿名函数可以不指定函数的名字 区别2 匿名函数执行实现简单的计算 区别3 匿名函数会自动将计算的结果返回 定义格式 lambda 参数1,参数2...:计算逻辑(参数的处理逻辑…

一文解决弹窗交互设计难题,轻松上手

弹窗交互的分类 我们每天所说的弹出窗口是一个非常笼统的概念。我们习惯性地称所有的对话框、浮层和提示条为弹出窗口。事实上,弹出窗口可以分为两种类型:模态弹出框和非模态弹出框。在 UI 在设计中,当它迫使用户与之交互时,我们…

【算法】【二叉树,DFS,哈希集合,分类讨论】力扣1110. 删点成林

1110. 删点成林 文章目录 【算法】力扣【二叉树,DFS,哈希集合,分类讨论】1110. 删点成林题目描述示例 1:示例 2: 输入输出示例解释思路解析核心思想算法步骤复杂度分析 代码实现总结 【算法】力扣【二叉树&#xff0c…

ElasticSearch - 删除已经设置的认证密码(7.x)

文章目录 Pre版本号 7.x操作步骤检查当前Elasticsearch安全配置停止Elasticsearch服务修改Elasticsearch配置文件删除密码重启Elasticsearch服务验证配置 小结 Pre Elasticsearch - Configuring security in Elasticsearch 开启用户名和密码访问 版本号 7.x ES7.x 操作步骤 …

马斯克xAI融资60亿美元,宣布打造世界第一超算中心,10万张H100GPU

昨天,埃隆马斯克的xAI初创公司宣布获得60亿美元的巨额融资,主要用于打造一台巨大的超级计算机,马斯克称之为“超级计算工厂”。 从创立OpenAI到如今的xAI,技术和算力的发展历经了几个时代,但似乎马斯克的吸金能力一直…

一文讲透redis实现分布式锁里面的坑

一.前提 相信大家在使用分布式锁的时候都会选择redis或者zookeeper来实现。今天我们来讲一讲使用Redis实现分布式锁里面的坑。大家要避免 二.错误案例 1.jedis.setnx方法和jedis.expire组合实现加锁 上代码: Long result jedis.setnx(lockKey, requestId);if (re…

高精度算法(加减乘除)

高精度算法 高精度加法高精度减法高精度乘法高精度除法 高精度加法 高精度加法&#xff1a;反向存数组里&#xff0c;人工模拟两数相加 #include <iostream> #include <string> #include <vector> using namespace std; string s1, s2; void add(vector<…

代码随想录算法训练营day21|530.二叉搜索树的最小绝对值差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先

二叉搜索树的最小绝对值差 递归法 首先需考虑这是一个二叉搜索树&#xff0c;在中序遍历后的结果为从小到大的一个序列&#xff0c;寻找二叉搜索树的最小绝对值差&#xff0c;只需比较一个节点与之后的差值即可。在遍历的过程中&#xff0c;我们需要一个节点保存前节点…

短道速滑短视频:四川京之华锦信息技术公司

短道速滑短视频&#xff1a;冰雪激情的视觉盛宴 随着冬奥会的热度不断攀升&#xff0c;短道速滑作为其中一项紧张刺激、充满观赏性的运动&#xff0c;受到了越来越多人的关注。而在社交媒体和短视频平台的助力下&#xff0c;短道速滑短视频成为了人们了解、欣赏这项运动的新窗…

vxe-form-design 表单设计器的使用

vxe-form-design 在 vue3 中表单设计器的使用 查看官网 https://vxeui.com 安装 npm install vxe-pc-ui // ... import VxeUI from vxe-pc-ui import vxe-pc-ui/lib/style.css // ...// ... createApp(App).use(VxeUI).mount(#app) // ...使用 github vxe-form-design 用…

Python在忘mysql密码后该如何重新连mysql

步骤一 先到mysql的bin目录下 步骤二 用mysqld delete mysql 把之前的库删了 步骤三 通过管理员模式进去后 用命令mysqld --skip-grant-tables越过验证 再输入mysql -u root 直达账户 步骤四 用FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY new_password; 指…