第一部分代码
用户登录界面的实现:
- 导入了tkinter库和tkinter.messagebox库,用于创建图形界面和弹窗功能。
- 创建了一个名为root的窗口,并设置了窗口的标题、大小和位置。
- 创建了两个StringVar类型的变量log_name和log_pwd,用来保存用户输入的用户名和密码。
- 定义了一个按钮点击事件btn_login,通过判断用户名和密码是否正确来显示相应的弹窗信息。
- 创建了两个Label和两个Entry组件,用于显示账号和密码的输入框。
- 创建了一个Button组件,用于点击后退出登录界面。
- 最后调用了root.mainloop()方法显示图形界面。
第二部分代码
五子棋游戏界面的实现:
- 导入了tkinter库和tkinter.messagebox库,用于创建图形界面和弹窗功能。
- 创建了一个名为root的窗口,并设置了窗口的标题。
- 创建了一个Canvas组件w1,并设置了宽度、高度和背景色。
- 使用循环创建了一条横线和一条竖线,用于绘制棋盘的网格。
- 使用create_oval方法绘制了五个黑色的圆形棋子,用于标记起始位置。
- 创建了两个numpy数组A和B,用于保存棋盘状态和棋子颜色。
- 定义了一个回调函数callback,用于处理用户点击事件。
- 在回调函数中判断用户点击的位置,根据当前轮次的不同绘制黑色或白色的棋子,并更新棋盘状态。
- 使用循环遍历四个方向,判断当前棋子是否连成五个,如果是则弹窗提示获胜。
- 绑定了鼠标点击事件和回调函数。
- 创建了一个退出按钮,并绑定了退出函数。
- 最后调用了mainloop()方法显示图形界面。
需要注意的是,这两部分代码是分开的,并不是连续执行的。用户需要先登录成功,才能进入游戏界面。
from tkinter import *
from tkinter.messagebox import *
# 设置主界面的容器大小和位置
root = Tk()
root.title('浔川五子棋用户登录界面')
root.geometry("800x400+100+150")
#声明组件变量
log_name = StringVar()
log_pwd = StringVar()
#组件的使用
def btn_login():
if log_name.get() == '浔川五子棋' and log_pwd.get() == '浔川123':
showinfo('提示信息','登录成功~')
else:
showwarning('提示信息','用户名或密码输入有误~')
#组件的使用
Label(root,text='账号:',font=('幼圆',20)).place(x=200,y=80)
Entry(width=27,font=('幼圆',20),textvariable=log_name).place(x=280,y=88)
Label(root,text='密码:',font=('幼圆',20)).place(x=200,y=150)
Entry(width=27,font=('幼圆',20),show='*',textvariable=log_pwd).place(x=280,y=150)
Button(text='前往五子棋游戏',
background='white', # 背景色
foreground='black', # 前景色
width=20,font=('幼圆',20), #字体 大小
command=lambda:root.quit()).place(x=400,y=220)
# 显示图形界面
root.mainloop()
from tkinter import *
import tkinter.messagebox # 弹窗库
import numpy as np
root = Tk() #创建窗口
root.title("五子棋游戏") #窗口名字
w1 = Canvas(root, width=600,height=600,background='chocolate')
w1.pack()
for i in range(0, 15):
w1.create_line(i * 40 + 20, 20, i * 40 + 20, 580)
w1.create_line(20, i * 40 + 20, 580, i * 40 + 20)
w1.create_oval(135, 135, 145, 145,fill='black')
w1.create_oval(135, 455, 145, 465,fill='black')
w1.create_oval(465, 135, 455, 145,fill='black')
w1.create_oval(455, 455, 465, 465,fill='black')
w1.create_oval(295, 295, 305, 305,fill='black')
num=0
A=np.full((15,15),0)
B=np.full((15,15),'')
def callback(event):
global num ,A
for j in range (0,15):
for i in range (0,15):
if (event.x - 20 - 40 * i) ** 2 + (event.y - 20 - 40 * j) ** 2 <= 2 * 20 ** 2:
break
if (event.x - 20 - 40 * i) ** 2 + (event.y - 20 - 40 * j) ** 2 <= 2*20 ** 2:
break
if num % 2 == 0 and A[i][j] != 1:
w1.create_oval(40*i+5, 40*j+5, 40*i+35, 40*j+35,fill='black')
A[i][j] = 1
B[i][j] = 'b'
num += 1
if num % 2 != 0 and A[i][j] != 1 :
w1.create_oval(40*i+5, 40*j+5, 40*i+35, 40*j+35,fill='white')
A[i][j] = 1.
B[i][j] = 'w'
num += 1
f = [[-1, 0], [-1, 1], [0, 1], [1, 1]]
for z in range(0, 4):
a, b = f[z][0], f[z][1]
count1, count2 = 0, 0
x, y = i, j
while B[x][y] == B[i][j]:
count1 += 1
if x + a >= 0 and y + b >= 0 and x + a < 15 and y + b < 15 and B[x + a][y + b] == B[i][j]:
[x, y] = np.array([x, y]) + np.array([a, b])
else:
x, y = i, j
break
while B[x][y] == B[i][j]:
count2 += 1
if x - a < 15 and y - b < 15 and x - a >= 0 and y - b >= 0 and B[x - a][y - b] == B[i][j]:
[x, y] = np.array([x, y]) - np.array([a, b])
else:
break
if count1 + count2 == 6:
if B[i][j] == 'b':
tkinter.messagebox.showinfo('提示', '黑棋获胜')
else:
tkinter.messagebox.showinfo('提示', '白棋获胜')
w1.bind("<Button -1>",callback)
w1.pack()
def quit():
root.quit()
u=Button(root,text="退出",width=10,height=1,command=quit,font=('楷体',15))
u.pack()
mainloop()
账号:浔川五子棋
密码:浔川123
友情链接:浔川python社-CSDN博客