当前位置: 首页 > 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() 请求重定…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...